Trong Cơ sở dữ liệu Oracle, NULLIF()
hàm so sánh hai biểu thức và trả về null
nếu cả hai biểu thức bằng nhau. Nếu chúng không bằng nhau, thì hàm trả về biểu thức đầu tiên.
Cú pháp
Cú pháp như sau:
NULLIF(expr1, expr2)
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT NULLIF(5, 7)
FROM DUAL;
Kết quả:
5
Trong trường hợp này, các đối số không bằng nhau và do đó hàm trả về đối số đầu tiên.
Dưới đây là những gì sẽ xảy ra khi cả hai đối số bằng nhau:
SET NULL 'null';
SELECT NULLIF(7, 7)
FROM DUAL;
Kết quả:
null
Chúng ta có thể thấy rằng NULLIF()
trả về null
khi cả hai đối số bằng nhau
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.
So với CASE
NULLIF()
hàm tương đương với CASE
sau biểu thức:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 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 NULLIF()
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 NULLIF(1, 2, 3)
FROM DUAL;
Kết quả:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"