Oracle
 sql >> Base de données >  >> RDS >> Oracle

succès inattendu de la requête

Si l'optimiseur décide qu'il n'a pas besoin d'évaluer une fonction, il ne le fera pas, donc la fonction ne lèvera jamais d'exception :

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

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

La fonction ne lève une exception que si elle est réellement évaluée :

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

Cependant, si l'analyseur peut décider statiquement que la requête n'est pas valide - parce que la fonction a le mauvais type d'arguments ou que la requête a des types invalides, alors l'analyseur lèvera une exception avant que l'optimiseur n'obtienne un swing :

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