Re: update avec un where = false

From: Guillaume LELARGE <gleu(at)wanadoo(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org, chetzacoalt(at)free(dot)fr
Subject: Re: update avec un where = false
Date: 2005-08-21 06:40:53
Message-ID: 200508210840.53969.gleu@wanadoo.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour,

Le Vendredi 12 Août 2005 16:19, santiago a écrit :
> j'aimerai ecrire un trigger pour intercepter les update qui cherchent a
> mettre a jour des lignes n'exhistant pas:
>
Pour cela, tu dois déclarer un trigger de type "for each statement" au lieu de
"for each row" car "for each statement" est déclenché pour chaque instruction
de mise à jour (ie quelque soit le nombre de lignes mises à jour) alors que
"for each row" est déclenché uniquement pour chaque ligne mise à jour (ie
aucune ligne mise à jour, pas de déclenchement). Voir
http://traduc.postgresqlfr.org/pgsql-8.0.3-fr/sql-createtrigger.html pour
plus de détails. Cette distinction est déjà valable en 7.1
(http://www.postgresql.org/docs/7.1/interactive/sql-createtrigger.html).

> du type:
>
> update table set col=3 where ccooll=2;
> -- avec aucune ligne ne repondant a ccooll=2
>
> je voudrais intercepter ca pour creer une ligne, avec ccooll=2, et le
> reste aux valeurs par defaut.
>
> y'a t-il un moyen de realiser ca ?
>
Je suppose que tu utilises PL/Pgsql. Exécute tout d'abord un :

SELECT INTO ligne * FROM table WHERE ccooll=2;

Puis, utilise la variable FOUND pour tester si une ligne a été récupérée. Dans
le cas contraire, exécute ton insertion.

IF NOT FOUND THEN
INSERT INTO table (ccooll) VALUES (2);
END IF;

Voir notamment
http://traduc.postgresqlfr.org/pgsql-8.0.3-fr/plpgsql-statements.html#PLPGSQL-SELECT-INTO.
Voir
http://www.postgresql.org/docs/7.1/interactive/plpgsql-description.html#PLPGSQL-DESCRIPTION-RECORDS
pour des infos sur la version 7.1.

--
Guillaume.
<!-- http://abs.traduc.org/
http://lfs.traduc.org/
http://traduc.postgresqlfr.org/ -->

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Guy Doune 2005-08-22 15:11:27 interfaage de postgresql incapable de gnrer le scaffold
Previous Message Guillaume LELARGE 2005-08-21 06:27:46 Re: un delete ou plusieurs ?