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