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