sql >> Base de Datos >  >> RDS >> Oracle

éxito de consulta inesperado

Si el optimizador decide que no necesita evaluar una función, no lo hará, por lo que la función nunca generará excepciones:

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

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

La función genera una excepción solo si realmente se evalúa:

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

Sin embargo, si el analizador puede decidir estáticamente que la consulta no es válida, porque la función tiene el tipo de argumentos incorrecto o la consulta tiene tipos no válidos, entonces el analizador generará una excepción antes de que el optimizador la golpee:

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