Table en mutation SQL

Fermé
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 - 22 déc. 2013 à 15:17
alan7 Messages postés 1 Date d'inscription dimanche 5 janvier 2014 Statut Membre Dernière intervention 5 janvier 2014 - 5 janv. 2014 à 21:09
Bonjour à tous,

Je suis bloqué, j'ai besoin d'accéder à une table et donc de faire un Select dessus lors du Trigger mais la table est en mutation !!!
Donc ça ne marche pas !

Si quelqu'un pouvait m'aider s'il vous plaît merci :

CREATE TRIGGER deux_defiles
BEFORE INSERT or UPDATE of Date_Defi on Defile
DECLARE
nb Integer;
BEGIN
Select distinct count(NumDefi) into nb from Defile where NumCout = :OLD.NumCout and extract(year from Date_Defi) = extract(year from :NEW.Date_Defi);
IF (nb = 2) Then
raise_application_error(-20001,'Ce Couturier a deja organise 2 defiles durant cette meme annee.');
END IF;
END;
/



A voir également:

1 réponse

alan7 Messages postés 1 Date d'inscription dimanche 5 janvier 2014 Statut Membre Dernière intervention 5 janvier 2014
5 janv. 2014 à 21:09
Bonjour,

Les triggers "for each row" sont déclenchés pendant la mise à jour (juste avant ou après) et ne permettent pas d'accéder à la table du trigger.
Par contre, les triggers de type statement (par opposition à for each row) permettent d'accéder à la table.
Ce trigger doit être du type "for each row" (mention qui devrait apparaitre entre la ligne before et la ligne declare puisque les variables :New et :Old sont accessibles.
Une possibilité pour contourner ce problème est de faire le select dans un trigger after statement mais il faut alors stocker les identifiants :New et :Old nécessaires dans un trigger for each row (stocker en variable globale ou table temporaire par exemple).
0