Oracle
 sql >> Database >  >> RDS >> Oracle

successo imprevisto della query

Se l'ottimizzatore decide che non è necessario valutare una funzione, non lo farà, quindi la funzione non genererà mai eccezioni:

select 1 from dual where 1 = 1 OR to_date('asdasdasd','asdasdasdas') > sysdate ;

         1
----------
         1

La funzione solleva un'eccezione solo se viene effettivamente valutata:

SQL> select 1 from dual where 1 = 1 AND to_date('asdasd','asdas') > sysdate ;
select 1 from dual where 1 = 1 AND to_date('asdasd','asdas') > sysdate
                                                    *
ERROR at line 1:
ORA-01821: date format not recognized

Tuttavia, se il parser può decidere in modo statico che la query non è valida, poiché la funzione ha il tipo di argomenti errato o la query ha tipi non validi, il parser solleverà un'eccezione prima che l'ottimizzatore si attivi:

SQL> select 1 from dual where 1 = 1 or to_date('asdasdasd',0) > sysdate ;
select 1 from dual where 1 = 1 or to_date('asdasdasd',0) > sysdate
                                                         *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER


SQL> select 1 from dual where 1 = 1 or to_date('asdasdasd','asdasdasdas') > 42 ;
select 1 from dual where 1 = 1 or to_date('asdasdasd','asdasdasdas') > 42
                                                                        *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER