Wie @Pavel bereitgestellt hat, ist die Prüfung <row-type> IS NOT NULL
funktioniert nicht so wie du es erwartest. Es gibt TRUE
zurück if (and only if) jeder einzelnen Spalte ist NOT NULL
.
Testen Sie die spezielle Variable FOUND
stattdessen (wie @Mike kommentiert):
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;
Oder Sie könnten Ihren Ausdruck im Test umkehren.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Jede vorhandene Zeile, die Sie finden würden, enthält mindestens eine Spalte, die NOT NULL
ist , daher rowt IS NULL
gibt nur TRUE
zurück wenn nichts gefunden wird.
Verwandte Antworten mit weiteren Details:
- Der IS NOT NULL-Test für einen Datensatz gibt nicht TRUE zurück, wenn die Variable gesetzt ist
- NOT NULL-Einschränkung über eine Reihe von Spalten