PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi IS NOT NULL est-il faux lors de la vérification d'un type de ligne ?

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