Bonjour à tous,
J'ai un léger soucis avec une fonction et un trigger en PL pgSQL.
Je dispose d'une table 'énumération' (je ne donne pas les détails de l'implémentation, mais il s'agit d'une table et non d'un type énum). Lors de la suppression d'une occurrence dans cette table, je veux vérifier qu'elle n'est pas utilisée par une occurrence de la table 'log'.
Mon code est donc le suivant:
Cependant, dans tout les cas la suppression se fait sans soucis, même lorsque je devrais récupérer une exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 DROP TRIGGER log_enumeration_value_on_delete ON log_enumeration_value CASCADE; CREATE OR REPLACE FUNCTION log_enumeration_value_on_delete() RETURNS TRIGGER LANGUAGE plpgsql AS $$ DECLARE row RECORD; BEGIN FOR row IN (SELECT * FROM log WHERE id_log_name = OLD."id_log_name" AND value_integer = OLD."id_log_enumeration_value") LOOP IF row IS NOT NULL THEN RAISE EXCEPTION 'The log enumeration value is used by at least one log'; END IF; END LOOP; RETURN OLD; END $$; CREATE TRIGGER "log_enumeration_value_on_delete" BEFORE DELETE ON log_enumeration_value FOR EACH ROW EXECUTE PROCEDURE log_enumeration_value_on_delete() ;
Avez vous une idée ?
EDIT:
Après un peu de debug, je me rends compte que je ne rentre jamais dans ma boucle FOR !
J'ai donc surement une erreur sur la lignemais j'ai un peu de mal à comprendre où :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part FOR row IN (SELECT * FROM log WHERE id_log_name = OLD."id_log_name" AND value_integer = OLD."id_log_enumeration_value") LOOP
Partager