Come fornito da @Pavel, il controllo <row-type> IS NOT NULL
non funziona come sembri aspettarti. Restituisce TRUE
if (e solo se) ogni singola colonna è NOT NULL
.
Testare la variabile speciale FOUND
invece (come ha commentato @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;
Oppure potresti invertire la tua espressione nel test.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Qualsiasi riga esistente che potresti trovare contiene almeno una colonna che è NOT NULL
, quindi rowt IS NULL
restituisce solo TRUE
se non viene trovato nulla.
Risposte correlate con maggiori dettagli:
- Il test NON È NULLO per un record non restituisce TRUE quando è impostata la variabile
- vincolo NOT NULL su un insieme di colonne