Nếu trình tối ưu hóa quyết định rằng nó không cần đánh giá một hàm, thì nó sẽ không, vì vậy hàm sẽ không bao giờ ném ra các ngoại lệ:
select 1 from dual where 1 = 1 OR to_date('asdasdasd','asdasdasdas') > sysdate ;
1
----------
1
Hàm chỉ tạo ra một ngoại lệ nếu nó thực sự được đánh giá:
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
Tuy nhiên, nếu trình phân tích cú pháp có thể quyết định tĩnh rằng truy vấn không hợp lệ - bởi vì hàm có loại đối số sai hoặc truy vấn có loại không hợp lệ, khi đó trình phân tích cú pháp sẽ nêu ra một ngoại lệ trước khi trình tối ưu hóa thực hiện nó:
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