Comme @Pavel l'a fourni, la vérification <row-type> IS NOT NULL
ne fonctionne pas comme vous semblez vous y attendre. Il renvoie TRUE
si (et seulement si) chaque colonne est NOT NULL
.
Testez la variable spéciale FOUND
à la place (comme @Mike a commenté):
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;
Ou vous pourriez inverser votre expression dans le test.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Toute ligne existante que vous trouveriez contient au moins une colonne qui est NOT NULL
, donc rowt IS NULL
renvoie uniquement TRUE
si rien n'est trouvé.
Réponses associées avec plus de détails :
- Le test IS NOT NULL pour un enregistrement ne renvoie pas TRUE lorsque la variable est définie
- Contrainte NOT NULL sur un ensemble de colonnes