Trong Cơ sở dữ liệu Oracle, COALESCE() hàm trả về biểu thức không rỗng đầu tiên trong danh sách biểu thức.
Cú pháp
Cú pháp như sau:
COALESCE(expr [, expr ]...) Ít nhất hai biểu thức phải được chuyển.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT COALESCE(null, 7)
FROM DUAL; Kết quả:
7
Dưới đây là một số ví dụ khác:
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL; Kết quả:
r1 r2 r3 r4 r5
_____ _____ _____ _____ _______
1 1 3 1 null
Chúng ta có thể thấy rằng COALESCE() trả về null khi tất cả các đối số đều rỗng.
Về dòng đầu tiên SET NULL 'null'; , Tôi đã thêm điều đó để phiên SQLcl của tôi trả về null bất cứ khi nào kết quả là null.
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null xảy ra do một SELECT trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null nên được trả lại.
Ví dụ về cơ sở dữ liệu
Giả sử chúng ta chạy truy vấn sau:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; Kết quả:
LOCATION_ID STATE_PROVINCE
______________ ___________________
1000 null
1100 null
1200 Tokyo Prefecture
1300 null
1400 Texas
1500 California
Chúng ta có thể thấy rằng một số hàng null trong STATE_PROVINCE cột.
Đây là truy vấn lại, ngoại trừ lần này chúng tôi sử dụng COALESCE() chống lại STATE_PROVINCE cột:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; Kết quả:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A')
______________ _________________________________
1000 N/A
1100 N/A
1200 Tokyo Prefecture
1300 N/A
1400 Texas
1500 California
Vì vậy, chúng tôi đã sử dụng COALESCE() để trả về N/A bất cứ khi nào giá trị null xảy ra.
COALESCE() so với CASE
Sau đây:
COALESCE(expr1, expr2) Tương đương với cái này:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END Số lượng đối số không hợp lệ
Việc gọi hàm mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT COALESCE()
FROM DUAL; Kết quả:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"