Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 29/09/2016 13:50:33
- fred2193
- Membre
[RESOLU] problème Trigger
Bonjour à tous,
Etant débutant avec postgresql, je rencontre un problème dont je n'arrive pas à trouver la solution. J'espère qu'un âme charitable pourra me débloquer.
Voici en résumé ce que doit faire le Trigger :
Pré requis :
- Table A avec un champ id automatique
- Table B contenant une colonne avec le nom de la table A et une colonne avec l'id de la table A
Ce que doit faire le Trigger :
Quand on supprime une ligne dans la table A, il faut aller rechercher la ligne correspondante dans la table b et la supprimer également.
Voici le code que j'ai créé et qui fonctionne presque :
Code du Trigger :
CREATE TRIGGER trigger1
BEFORE DELETE
ON tableA FOR EACH ROW
EXECUTE PROCEDURE "fctDeleteTableB"();Code de la fonction :
CREATE OR REPLACE FUNCTION "fctDeleteTableB" (
)
RETURNS trigger AS
$body$
DECLARE
sqlinst TEXT;
BEGIN
sqlinst = format('DELETE FROM TableB WHERE (idTable=%s) AND (NomTable=''TableA'') ', OLD.id) ;
EXECUTE sqlinst ;
return null;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;Phénomène observé :
En exécutant le code suivant :
DELETE FROM TableA WHERE id=3;J'ai bien la ligne correspondante de la table B qui est supprimée mais la ligne avec l'id 3 de la table A ne l'est pas, ce qui est plutôt ennuyant vu que plus rien ne se supprime dans la table A.
Si quelqu'un à une petite idée d'ou peut venir le problème, je suis preneur ![]()
Dernière modification par fred2193 (29/09/2016 15:05:12)
Hors ligne
#2 29/09/2016 14:42:27
- Marc Cousin
- Membre
Re : [RESOLU] problème Trigger
Salut…
Un trigger BEFORE qui retourne NULL annulle l'opération en cours.
Deux solutions ici:
* En faire un trigger AFTER (ce qui suffit vu qu'on ne souhaite pas modifier l'enregistrement)
* Remplacer le RETURN NULL par un RETURN NEW
Marc.
Hors ligne
#3 29/09/2016 14:55:06
- fred2193
- Membre
Re : [RESOLU] problème Trigger
Salut…
Un trigger BEFORE qui retourne NULL annulle l'opération en cours.
Deux solutions ici:
* En faire un trigger AFTER (ce qui suffit vu qu'on ne souhaite pas modifier l'enregistrement)
* Remplacer le RETURN NULL par un RETURN NEW
Merci pour la réponse aussi rapide ![]()
J'ai testé les deux solutions proposées et la première fonctionne. Par contre la deuxième ne fonctionne pas et me donne le même résultat, bizarre.
Hors ligne
#4 29/09/2016 14:56:17
- Marc Cousin
- Membre
Re : [RESOLU] problème Trigger
Oups, c'est un trigger DELETE. Il n'y a donc pas de NEW. C'est RETURN OLD qui devrait marcher ![]()
Marc.
Hors ligne
#5 29/09/2016 15:00:00
- fred2193
- Membre
Re : [RESOLU] problème Trigger
Nikel, effectivement avec le RETUTN OLD sa fonctionne.
Problème réglé et les deux solutions fonctionnes.
Encore Merci Marc.
Bonne journée.
Hors ligne
Pages : 1