Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2006, 16h32   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut problème d'update dans une fonction trigger (before)

Bonjour,

J'ai un petit problème entre 2 tables :

symbole :
symb_id SERIAL <pk>
compteur SERIAL
symb TEXT

1:n
1:1

gids
gid_id INTEGER UNIQUE NOT NULL <pk>
symb_id INTEGER NOT NULL <fk symbole(symb_id)>

Je voudrais créer une fonction trigger permettant de vérifier, avant 'insertion d'un mot dans symbole(symb) si ce mot est déjà saisi, si c'est le cas, il faut mettre à jour gids(symb_id) pour la dernière valeur du compteur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
CREATE FUNCTION check_symbole_before() RETURNS OPAQUE AS '
        DECLARE
         symb_curr TEXT;
         last_symb_id INTEGER;
         last_gid_compt INTEGER;
        BEGIN
         last_symb_id := (SELECT symb_id FROM symbole ORDER BY symb_id DESC LIMIT 1);
         last_gid_compt := (SELECT compt FROM gids ORDER BY compt DESC LIMIT 1);
         RAISE WARNING ''Dernier compteur GID: % et dernier symb_id: %'', last_gid_compt, last_symb_id;
         SELECT INTO symb_curr symb FROM symbole WHERE symb = NEW.symb;
        IF FOUND THEN
         UPDATE gids SET symb_id = last_symb_id WHERE compt = last_gid_compt;
         RAISE EXCEPTION ''symb_id duplique => table gids mise a jour'';
        END IF;
        RETURN NEW;
        END;
        ' LANGUAGE 'PLPGSQL';
 
CREATE TRIGGER symbole_trigger_before BEFORE INSERT
        ON symbole
        FOR EACH ROW
        EXECUTE PROCEDURE check_symbole_before();
Mon problème est que la mise à jour UPDATE dans la boucle IF FOUND ne s'effectue pas.

Y aurait-il un soucis dans ce genre de structure ?

En vous remerciant,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2006, 17h08   #2
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Je viens de m'apercevoir que l'EXCEPTION empêchait le déroulement de tout l'INSERT, ce que je voulais faire à la base afin d'effectuer l'UPDATE mais conserver la dernière valeur de la table.

En revanche, du coup, une nouvelle valeur est ajoutée à la table symbole et je me retrouve avec une valeur dupliquée.

Serait-il possible d'effectuer l'UPDATE sans pour autant faire l'INSERT ?

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h40.


 
 
 
 
Partenaires

Hébergement Web