Seperti yang disediakan @Pavel, centang <row-type> IS NOT NULL
tidak bekerja seperti yang Anda harapkan. Ini mengembalikan TRUE
if (dan hanya jika) setiap kolom adalah NOT NULL
.
Uji variabel khusus FOUND
sebagai gantinya (seperti komentar @Mike):
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;
Atau Anda bisa membalikkan ekspresi Anda dalam ujian.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Setiap baris yang ada yang Anda temukan berisi setidaknya satu kolom yang NOT NULL
, oleh karena itu rowt IS NULL
hanya mengembalikan TRUE
jika tidak ada yang ditemukan.
Jawaban terkait dengan detail lebih lanjut:
- IS NOT NULL tes untuk record tidak mengembalikan TRUE ketika variabel disetel
- BUKAN NULL batasan pada sekumpulan kolom