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

Cách sử dụng hàm Coalesce trong Oracle

Hàm Coalesce là gì

Chức năng kết hợp là một hàm hữu ích trong oracle và nó rất hữu ích khi chúng ta muốn trả về các giá trị không phải null đầu tiên trong danh sách. Hướng dẫn SQL này cung cấp các giải thích, ví dụ cho Hàm Coalesce trong Oracle và Sự khác biệt giữa Coalesce &NVL

expr1 :Giá trị này được trả về nếu nó không phải là null
expr2:Giá trị này được trả về nếu nó không phải là null và biểu thức đầu tiên là null
exprn:Giá trị này được trả về nếu biểu thức trước đó là null

Vì vậy, Coalesce trong oracle sẽ trả về biểu thức đầu tiên nếu nó không phải là null, nếu không nó sẽ thực hiện việc kết hợp phần còn lại của biểu thức

Điểm quan trọng

(1) Cơ sở dữ liệu Oracle sử dụng đánh giá ngắn mạch. Cơ sở dữ liệu đánh giá từng giá trị expr và xác định xem nó có phải là NULL hay không, thay vì đánh giá tất cả các giá trị expr trước khi xác định xem bất kỳ giá trị nào trong số đó là NULL.

(2) COALESCE trong oracle tương đương với hàm Case

Vì vậy COALESCE (expr1, expr2) tương đương với:

CASE WHEN expr1 IS NOT NULL THEN expr1

ELSE expr2 END

Tương tự,

COALESCE (expr1, expr2,…, exprn), với n> =3 tương đương với:

CASE WHEN expr1 IS NOT NULL THEN expr1
WHEN expr2 IS NOT NULL THEN expr2

WHEN expr3 IS NOT NULL THEN expr3

WHEN exprn IS NOT NULL THEN exprn

END

Hoặc điều này có thể được viết là

CASE WHEN expr1 IS NOT NULL THEN expr1
ELSE COALESCE (expr2, ..., exprn) END

(3) Thông thường tất cả thời hạn của câu lệnh liên kết phải có cùng kiểu dữ liệu, nếu không ORA-00932 sẽ được trả về.

SQL> select coalesce('a',1,2) from dual;
select coalesce('a',1,2) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER

Nếu tất cả các lần xuất hiện của biểu thức là kiểu dữ liệu số hoặc bất kỳ kiểu dữ liệu không phải số nào có thể được chuyển đổi hoàn toàn thành kiểu dữ liệu số, thì Cơ sở dữ liệu Oracle xác định đối số có ưu tiên số cao nhất, chuyển đổi ngầm các đối số còn lại thành kiểu dữ liệu đó và trả về kiểu dữ liệu đó.

Cách sử dụng hàm Coalesce

SQL> select coalesce(1,2,3) from dual;
COALESCE(1,2,3)
---------------
1

SQL> SELECT COALESCE(null, null, null, 'X', 'Y');
COALESCE(...)
---------------
X

Ví dụ về kết hợp

Giả sử chúng ta có một bảng tiên tri nhân viên bao gồm address1, address2 và address3 và chúng ta có thể muốn in địa chỉ không rỗng đầu tiên của các nhân viên từ bảng theo thứ tự ưu tiên address1> address2> address3

select emp_name, COALESCE(address1,address2,address3) from employee;

Sự khác biệt giữa hàm Coalesce và NVL

  1. Coalesce là tổng quát của chức năng NVL. Hàm NVL có thể được sử dụng cho hai biểu thức, trong khi kết hợp có thể được sử dụng cho Nhiều
  2. Trong trường hợp của hai biểu thức, chúng giống nhau nhưng cách triển khai khác nhau.Oracle đánh giá cả biểu thức trong trường hợp NVL trong khi nó chỉ đánh giá biểu thức đầu tiên trong trường hợp kết hợp. Vì vậy, nếu biểu thức thứ hai có lỗi, NVL sẽ báo lỗi trong khi liên kết sẽ không.
  3. Coalesce là tiêu chuẩn ANSI trong khi NVL là tiêu chuẩn dành riêng cho Oracle

Các bài viết có liên quan

Hướng dẫn Oracle Sql
Hàm NULLIF trong Oracle
Hàm NVL trong Oracle
Hàm LISTAGG Oracle
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm # SQLRF00617


  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ùy chọn phân phối trong khi gửi yêu cầu đồng thời trong R12.1.3

  2. Tạo trình kích hoạt cập nhật một cột trên một bảng khi một cột trong bảng khác được cập nhật

  3. 2 chức năng để có được năm từ một ngày trong Oracle

  4. Oracle Date - Cách thêm năm vào ngày tháng

  5. Làm cách nào để bạn nhận được các kết quả được định dạng độc đáo từ một thủ tục Oracle trả về một con trỏ tham chiếu?