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

uventet forespørgselssucces

Hvis optimeringsværktøjet beslutter, at det ikke behøver at evaluere en funktion, gør det det ikke, så funktionen vil aldrig give undtagelser:

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

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

Funktionen rejser kun en undtagelse, hvis den rent faktisk bliver evalueret:

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

Men hvis parseren kan bestemme statisk at forespørgslen er ugyldig - fordi funktionen har den forkerte type argumenter, eller forespørgslen har ugyldige typer, vil parseren rejse en undtagelse, før optimeringsværktøjet får et sving på det:

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. Godt Oracle-databaseudviklings- og administrationsværktøj på Windows

  2. Scanner en mysql-tabel fra bunden

  3. Bedre samtidighed i Oracle end SQL Server?

  4. Hvorfor bruges der ikke indeks til denne forespørgsel?