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

Vấn đề so sánh chuỗi PL / SQL của Oracle

Như Phil đã lưu ý, chuỗi rỗng được coi là NULL và NULL không bằng hoặc không bằng với bất kỳ thứ gì. Nếu bạn mong đợi chuỗi trống hoặc NULL, bạn sẽ cần xử lý những chuỗi đó bằng NVL() :

 DECLARE
 str1  varchar2(4000);
 str2  varchar2(4000);
 BEGIN
   str1:='';
   str2:='sdd';
-- Provide an alternate null value that does not exist in your data:
   IF(NVL(str1,'X') != NVL(str2,'Y')) THEN
    dbms_output.put_line('The two strings are not equal');
   END IF;
 END;
 /

Liên quan đến so sánh rỗng:

Theo tài liệu Oracle 12c về NULLS, so sánh rỗng sử dụng IS NULL hoặc IS NOT NULL đánh giá thành TRUE hoặc FALSE . Tuy nhiên, tất cả các so sánh khác đều đánh giá thành UNKNOWN , không FALSE . Tài liệu cho biết thêm:

Một điều kiện đánh giá UNKNOWN hoạt động gần giống như FALSE. Ví dụ, một câu lệnh SELECT với một điều kiện trong mệnh đề WHERE đánh giá là UNKNOWN trả về không có hàng nào. Tuy nhiên, một điều kiện đánh giá thành UNKNOWN khác với FALSE ở chỗ các thao tác tiếp theo trên một đánh giá điều kiện UNKNOWN sẽ đánh giá thành UNKNOWN. Do đó, NOT FALSE đánh giá là TRUE, nhưng NOT UNKNOWN đánh giá là UNKNOWN.

Một bảng tham chiếu được cung cấp bởi Oracle:

Condition       Value of A    Evaluation
----------------------------------------
a IS NULL       10            FALSE
a IS NOT NULL   10            TRUE        
a IS NULL       NULL          TRUE
a IS NOT NULL   NULL          FALSE
a = NULL        10            UNKNOWN
a != NULL       10            UNKNOWN
a = NULL        NULL          UNKNOWN
a != NULL       NULL          UNKNOWN
a = 10          NULL          UNKNOWN
a != 10         NULL          UNKNOWN

Tôi cũng học được rằng chúng ta không nên viết PL / SQL giả sử các chuỗi trống sẽ luôn được đánh giá là NULL:

Cơ sở dữ liệu Oracle hiện coi một giá trị ký tự có độ dài bằng 0 là null. Tuy nhiên, điều này có thể không tiếp tục đúng trong các bản phát hành trong tương lai và Oracle khuyên bạn không nên coi các chuỗi trống giống như chuỗi rỗng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm ROWIDTOCHAR () trong Oracle

  2. Câu hỏi PreparedStatement trong Java chống lại Oracle

  3. Kết nối cơ sở dữ liệu oracle trong web.config asp.net

  4. Hàm LOG () trong Oracle

  5. Tìm kiếm Văn bản trong Quy trình Lưu trữ Oracle