Jak uvedl @Pavel, zaškrtnutí <row-type> IS NOT NULL
nefunguje, jak se zdá, že očekáváte. Vrací TRUE
pokud (a pouze pokud) každý jeden sloupec je NOT NULL
.
Otestujte speciální proměnnou FOUND
místo toho (jako to komentoval @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;
Nebo můžete svůj výraz v testu obrátit.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Každý existující řádek, který byste našli, obsahuje alespoň jeden sloupec, který je NOT NULL
, proto rowt IS NULL
vrátí pouze TRUE
pokud není nic nalezeno.
Související odpovědi s dalšími podrobnostmi:
- Test IS NOT NULL pro záznam nevrací hodnotu TRUE, když je nastavena proměnná
- NOT NULL omezení pro sadu sloupců