Zoals @Pavel aangaf, is het vinkje <row-type> IS NOT NULL
werkt niet zoals je lijkt te verwachten. Het retourneert TRUE
als (en alleen als) elke kolom is NOT NULL
.
Test de speciale variabele FOUND
in plaats daarvan (zoals @Mike heeft gereageerd):
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;
Of je zou je uitdrukking in de test kunnen omkeren.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Elke bestaande rij die u zou vinden, bevat ten minste één kolom die NOT NULL
is , daarom rowt IS NULL
retourneert alleen TRUE
als er niets wordt gevonden.
Gerelateerde antwoorden met meer details:
- IS NOT NULL-test voor een record geeft geen TRUE als variabele is ingesteld
- NOT NULL-beperking voor een reeks kolommen