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

Sự khác biệt của Oracle giữa NVL và Coalesce

COALESCE là chức năng hiện đại hơn, là một phần của ANSI-92 tiêu chuẩn.

NVLOracle cụ thể, nó đã được giới thiệu trong 80 trước khi có bất kỳ tiêu chuẩn nào.

Trong trường hợp có hai giá trị, chúng là từ đồng nghĩa.

Tuy nhiên, chúng được triển khai khác nhau.

NVL luôn đánh giá cả hai đối số, trong khi COALESCE thường dừng đánh giá bất cứ khi nào nó tìm thấy không phải NULL đầu tiên (có một số ngoại lệ, chẳng hạn như trình tự NEXTVAL ):

SELECT  SUM(val)
FROM    (
        SELECT  NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Điều này chạy gần như 0.5 giây, vì nó tạo SYS_GUID() của, mặc dù 1 không phải là NULL .

SELECT  SUM(val)
FROM    (
        SELECT  COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Điều này hiểu rằng 1 không phải là NULL và không đánh giá đối số thứ hai.

SYS_GUID không được tạo và truy vấn là tức thì.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tên cột bảng Oracle có khoảng trắng

  2. Sự cố với các biến liên kết của Oracle không sử dụng chỉ mục đúng cách

  3. Khắc phục "Không thể mở ứng dụng" SQLDeveloper.app "."

  4. Có thể truy vấn cột được phân tách bằng dấu phẩy cho một giá trị cụ thể không?

  5. Hiểu sự khác biệt giữa Bảng và API Giao dịch