Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

truy vấn thành công ngoài mong đợi

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu vết SQL, sự kiện 10046 trong Oracle:trcsess, tiện ích tkprof

  2. ORA-00907:Thiếu dấu ngoặc phải khi tạo khóa ngoại Oracle 12c

  3. Tìm hợp đồng gần đây nhất cho mỗi tài khoản

  4. Cách tôi xóa các bản sao khỏi listagg

  5. Nhẹ trong một vỏ sò