Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group