Table en mutation SQL
Étienne9
Messages postés
1022
Date d'inscription
Statut
Membre
Dernière intervention
-
alan7 Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
alan7 Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
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;
/
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:
- Table en mutation SQL
- Table ascii - Guide
- Table des matières word - Guide
- Table des caractères - Guide
- Sql lister les tables ✓ - Forum Programmation
- Logiciel sql - Télécharger - Bases de données
1 réponse
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).
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).