Vous n'êtes pas identifié(e).

#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

Pied de page des forums