Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : PL/pgSQL » [RESOLU] problème Trigger » 29/09/2016 15:00:00
Nikel, effectivement avec le RETUTN OLD sa fonctionne.
Problème réglé et les deux solutions fonctionnes.
Encore Merci Marc.
Bonne journée.
#2 Re : PL/pgSQL » [RESOLU] problème Trigger » 29/09/2016 14:55:06
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.
#3 PL/pgSQL » [RESOLU] problème Trigger » 29/09/2016 13:50:33
- fred2193
- Réponses : 4
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
Pages : 1