sql >> Databáze >  >> RDS >> Oracle

neočekávaný úspěch dotazu

Pokud se optimalizátor rozhodne, že nepotřebuje vyhodnotit funkci, nebude, takže funkce nikdy nevyvolá výjimky:

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

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

Funkce vyvolá výjimku pouze v případě, že je skutečně vyhodnocena:

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

Pokud však analyzátor může rozhodnout staticky že dotaz je neplatný – protože funkce má nesprávný typ argumentů nebo má dotaz neplatné typy, pak analyzátor vyvolá výjimku dříve, než na to optimalizátor zasáhne:

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. Úloha Oracle DBMS neběží

  2. Jak vybrat název sloupce s mezerou v MySQL

  3. Vyberte nabídku možností čtení z databáze a použijte její hodnoty

  4. MYSQL Query – Získejte příspěvky aktuálního uživatele a příspěvky uživatele, který sleduje