Như @Pavel đã cung cấp, kiểm tra <row-type> IS NOT NULL
không hoạt động như bạn mong đợi. Nó trả về TRUE
nếu (và chỉ khi) mọi cột đơn lẻ là NOT NULL
.
Kiểm tra biến đặc biệt FOUND
thay vào đó (như @Mike đã nhận xét):
CREATE OR REPLACE FUNCTION registration(wr text)
RETURNS integer AS
$rL$
...
SELECT * INTO rowt FROM email WHERE email_email = eml;
IF FOUND THEN
RAISE EXCEPTION 'email address, %, already registered.', eml;
END IF;
...
$rL$ LANGUAGE plpgsql;
Hoặc bạn có thể đảo ngược biểu thức của mình trong bài kiểm tra.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Bất kỳ hàng hiện có nào bạn tìm thấy đều chứa ít nhất một cột NOT NULL
, do đó rowt IS NULL
chỉ trả về TRUE
nếu không tìm thấy gì.
Các câu trả lời liên quan với nhiều chi tiết hơn:
- Kiểm tra KHÔNG ĐẦY ĐỦ đối với một bản ghi không trả về TRUE khi biến được đặt
- Ràng buộc NOT NULL trên một tập hợp các cột