Trong Cơ sở dữ liệu Oracle, NVL2()
hàm cho phép chúng ta thay thế các giá trị null bằng một giá trị khác.
Nó tương tự như NVL()
, ngoại trừ việc nó chấp nhận ba đối số thay vì hai. Điều này cho phép chúng tôi chỉ định một giá trị khác để trả về trong trường hợp đối số đầu tiên không phải là giá trị rỗng.
Cú pháp
Cú pháp như sau:
NVL2(expr1, expr2, expr3)
Nếu expr1
không phải là null, thì NVL2
trả về expr2
. Nếu expr1
là null, sau đó là NVL2
trả về expr3
.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Kết quả:
3
Đối số đầu tiên là null và do đó, đối số thứ ba được trả về.
Và đây là những gì sẽ xảy ra khi đối số đầu tiên không rỗng:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Kết quả:
2
Khi các giá trị thay thế bằng rỗng
Nếu đối số thứ hai hoặc thứ ba là null, thì bạn có thể nhận được kết quả rỗng.
Ví dụ:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Kết quả:
r1 r2 _________ _________ (null) (null)
Về dòng đầu tiên SET NULL '(null)';
, Tôi đã thêm dòng này để phiên SQLcl của tôi trả về giá trị đó 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 sẽ được trả về (giống như tôi đã hoàn thành ở đây).
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 NVL2()
FROM DUAL;
Kết quả:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
Và việc chuyển quá nhiều đối số cũng gây ra lỗi:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Kết quả:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"