sql >> Databasteknik >  >> RDS >> Oracle

oväntad sökfråga framgång

Om optimeraren bestämmer sig för att den inte behöver utvärdera en funktion kommer den inte att göra det, så funktionen kommer aldrig att skapa undantag:

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

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

Funktionen skapar ett undantag endast om det faktiskt utvärderas:

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 om tolken kan bestämma statiskt att frågan är ogiltig - eftersom funktionen har fel typ av argument eller att frågan har ogiltiga typer, kommer parsern att skapa ett undantag innan optimeraren får en sväng 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. Hur tar man bort en fil i PL/SQL?

  2. problem med kolumnnamnet 'typ' i skenor 3

  3. Schemalägga händelser och ha händelser över midnatt

  4. Undantag:Det finns redan en öppen DataReader kopplad till denna anslutning som måste stängas först