Oracle
 sql >> Baza danych >  >> RDS >> Oracle

nieoczekiwany sukces zapytania

Jeśli optymalizator zdecyduje, że nie musi oceniać funkcji, nie zrobi tego, więc funkcja nigdy nie zgłosi wyjątków:

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

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

Funkcja zgłasza wyjątek tylko wtedy, gdy faktycznie zostanie przeanalizowany:

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

Jeśli jednak parser może zdecydować statycznie że zapytanie jest niepoprawne - ponieważ funkcja ma zły typ argumentów lub zapytanie ma niepoprawne typy, parser zgłosi wyjątek, zanim optymalizator zwróci na niego uwagę:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak odwoływać się do kolumny według identyfikatora lub numeru indeksu?

  2. Obejście dla ORA-00997:nielegalne użycie typu danych LONG

  3. Oracle 10g PL/SQL — Wybierz wyniki jako zaktualizuj wartości kolumn

  4. Mapowanie właściwości przewodnika do Oracle w Entity Framework Code First

  5. Tworzenie aplikacji Java w Oracle JDeveloper, część 1