Comment vérifier si une ligne existe dans un PostgreSQL procédure stockée?
J'ai écrit une procédure stockée dans postgres où j'ai besoin de vérifier si une ligne existe ensuite agir en conséquence. quelque chose le long de la ligne.
IF SELECT * FROM foo WHERE x = 'abc' AND y = 'xyz' THEN
-- do something here
ELSE
-- do something else
END;
J'ai googlé un peu, mais ai pas de bons coups.
OriginalL'auteur ams | 2012-10-11
Vous devez vous connecter pour publier un commentaire.
Utilisation
EXÉCUTER
etvariable automatique:
Ce ne sera possible que si un ou plus lignes est retourné. Si vous souhaitez limiter le résultat à exactement une ligne utiliser
GET DIAGNOSTICS
pour obtenir le nombre de lignes, ou de l'utilisationSELECT INTO
pour stocker lescount(...)
des lignes dans uneDECLARE
variable d vous ensuite de test. Si c'est une erreur de n'obtenez pas de résultats, utilisezSELECT INTO STRICT
d'exiger que exactement une ligne être obtenues et stockées dans la variable cible.Méfiez-vous des problèmes de concurrence, lorsque vous faites quelque chose comme cela. Si vous êtes à la tentative d'écriture d'une upsert/la fonction de fusion de cette approche ne fonctionnera pas. Voir "pourquoi est-upsert si compliqué".
à partir de la page liée ci-dessus, "Aussi, la variable est définie sur true si la requête a produit au moins une ligne, ou false s'il n'a produit aucun des lignes (voir la Section 39.5.5)." . Voir 39.5.5. L'obtention de l'État du Résultat; il est également mentionné partout ailleurs dans les "instructions de base" à la page sur PL/PgSQL.
OriginalL'auteur Craig Ringer
Ou encore plus simple avec
EXISTE
:OriginalL'auteur Erwin Brandstetter