Som @Pavel har angivet, er markeringen <row-type> IS NOT NULL
virker ikke som du ser ud til at forvente. Det returnerer TRUE
hvis (og kun hvis) hver enkelt kolonne er NOT NULL
.
Test den specielle variabel FOUND
i stedet (som @Mike kommenterede):
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;
Eller du kunne invertere dit udtryk i testen.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Enhver eksisterende række, du ville finde, indeholder mindst én kolonne, der er NOT NULL
, derfor ER rowt IS NULL
returnerer kun TRUE
hvis intet er fundet.
Relaterede svar med flere detaljer:
- IS NOT NULL-testen for en post returnerer ikke TRUE, når variabel er indstillet
- IKKE NULL-begrænsning over et sæt kolonner