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"