Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'ai une table (gestionnaire) qui est référencée dans deux autres tables, j'ai écris un trigger qui, lorsque je supprime une ligne de la table gestionnaire, je met à jour les deux autres table.
Problème : après un delete sur gestionnaire, la ligne à supprimer est toujours visible (même après avoir fais un deuxième delete et la clé n'est plus référencée)
les autres mise à jour s'exécute bien (sku et utilisateurs).
table gestionnaire(
id integer, --primary key
code varachar
)
table utilisateurs(
id integer
--some fields
id_gestionaire foreign key references gestionnaire (id)
)
table sku(
id integer
--some fields
id_gestionaire foreign key references gestionnaire (id)
)
Le code :
CREATE OR REPLACE FUNCTION p_delete_gest()
RETURNS TRIGGER AS
$t_delete_gest$
DECLARE
id_gestAdmin INTEGER;
BEGIN
IF (TG_OP = 'DELETE') THEN
SELECT id INTO id_gestAdmin
FROM gestionnaire
WHERE code = '*';
UPDATE sku
SET id_gestionnaire = id_gestAdmin
WHERE id_gestionnaire = OLD.id;
UPDATE utilisateurs
SET id_gestionnaire = id_gestAdmin
WHERE id_gestionnaire = OLD.id;
END IF;
RETURN NULL;
END;
$t_delete_gest$
LANGUAGE 'plpgsql' VOLATILE;
CREATE TRIGGER t_delete_gest
BEFORE DELETE ON gestionnaire
FOR EACH ROW EXECUTE PROCEDURE p_delete_gest();
Hors ligne
Renvoyer NULL dans un trigger BEFORE DELETE annule l'opération de suppression. Vous devez renvoyer l'ancienne ligne, donc un "RETURN OLD;". Pour plus d'infos, http://docs.postgresql.fr/9.0/triggers.html
Guillaume.
Hors ligne
Merci votre réactivité, effectivement c'est le RETURN, merci encore.
Hors ligne
Pages : 1