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