sql >> Database >  >> RDS >> Oracle

onverwacht succes met zoekopdracht

Als de optimizer besluit dat het een functie niet hoeft te evalueren, zal het dat ook niet doen, dus de functie zal nooit uitzonderingen genereren:

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

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

De functie genereert alleen een uitzondering als deze daadwerkelijk wordt geëvalueerd:

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

Als de parser echter statisch kan beslissen, dat de query ongeldig is - omdat de functie het verkeerde type argumenten heeft of de query ongeldige typen heeft, zal de parser een uitzondering maken voordat de optimizer er een slag in gaat:

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


  1. Hoe het databasetype voor een bepaalde JDBC-verbinding te bepalen?

  2. SQL-filtering op meerdere kolommen

  3. Implementatie van de meest bekeken functiedatabase

  4. Hoe verwijder ik slechte karakters die niet geschikt zijn voor utf8-codering in MySQL?