Então é *** EXATAMENTE *** o que eu disse, o ERRO da tua lógica é que dtsaida é
uma data DO PASSADo (ou no máximo igual a data de hoje), então *** NUNCA VAI
FICAR NEGATIVO **, captou ?? Em cima do meu exemplo :
scott@BD_TESTE:SQL>select codprod, dtsaida, prazogarantia, sysdate - dtsaida
qtd_dias from TAB_TESTE_GARANTIA;
CODPROD DTSAIDA PRAZOGARANTIA QTD_DIAS
--------- ------------------- ------------- ---------
1 05/01/2018 00:00:00 90 31,661065
2 05/01/2015 00:00:00 100 1127,6611
scott@BD_TESTE:SQL>
==> É SIMPLES o case que diz se está ou não em garantia, é quando QTD_DIAS
decorrido desde a venda é MENOR OU IGUAL ao PRAZOGARANTIA :
scott@BD_TESTE:SQL>ed
Gravou file afiedt.buf
1 select codprod, dtsaida, prazogarantia,
2 (sysdate - dtsaida) qtd_dias,
3 case when (sysdate - dtsaida) <= prazogarantia then 'Está em garantia!!'
4 else 'Venceu a garantia!!' end AS STATUS
5* from TAB_TESTE_GARANTIA
scott@LOWELL:Lowell-DESENV:SQL>/
CODPROD DTSAIDA PRAZOGARANTIA QTD_DIAS STATUS
--------- ------------------- ------------- --------- -------------------
1 05/01/2018 00:00:00 90 31,748808 Está em garantia!!
2 05/01/2015 00:00:00 100 1127,7488 Venceu a garantia!!
scott@BD_TESTE:SQL>
c.q.d.
[]s
Chiappa