Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 21/07/2011 15:47:02
- mamoud
- Membre
Trigger ON DELETE
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
#2 21/07/2011 16:00:39
- gleu
- Administrateur
Re : Trigger ON DELETE
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
#3 21/07/2011 16:03:15
- mamoud
- Membre
Re : Trigger ON DELETE
Merci votre réactivité, effectivement c'est le RETURN, merci encore.
Hors ligne
Pages : 1