Bonjour,
Je cherche à créer un trigger sur une table qui incrémente la valeur d'un champs sur un enregistrement donné après chaque modification.
Merci!
Bonjour,
Je cherche à créer un trigger sur une table qui incrémente la valeur d'un champs sur un enregistrement donné après chaque modification.
Merci!
Tu fais un TRIGGER BEFORE UPDATE FOR EACH ROWS
Et dans le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part :new.compteur := NVL(:old.compteur,0) + 1;
Ne devrais-je pas faire aussi un update sur ce champs comme ceci ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE OR REPLACE TRIGGER trigger_name AFTER UPDATE ON table_name FOR EACH ROW DECLARE v_champs1 table_name.champs1%TYPE; BEGIN :new.champs1:= NVL(:old.champs1,0) + 1; END;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 BEGIN :new.champs1:= NVL(:old.champs1,0) + 1; update table_name set champs1 = :new.champs1 where id = v_id (que je déclare ?) END;
Houla surtout pas malheureux !
Il va falloir que tu regardes une doc sur les triggers (je ne sais pas s'il y en a dans les tutoriels)
Le premier code est quasi juste :
C'est BEFORE et v_champs1 ne sert à rien et pas de DECLARE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE OR REPLACE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW BEGIN :new.champs1:= NVL(:old.champs1,0) + 1; END;
En fait je voudrais pouvoir dupliquer dans la table l'enregistrement qui a été modifié avec les mêmes données en incrémentant le champs1 comme dit précédemment.
Par exemple:
si je modifie champs2, je voudrais avoir une ligne comme ci-dessous:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Table1 ------ id | champs0 | champs1 | champs2 etc... --------------------------------------- 1 | aaa | 0 | aaaaa
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 id | champs0 | champs1 | champs2 etc... --------------------------------------- 1 | aaa | 0 | aaaaa 2 | aaa | 1 (0+1) | baaaa
Voici mon code:
J'ai l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW BEGIN INSERT INTO table_name(champs0,champs1,champs2) VALUES(:new.champs0,NVL(:old.champs1,0) +1,:new.champs2) END;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [1]: (Error): ORA-04091: table SYSADM.table_name is mutating, trigger/function may not see it ORA-06512: at "SYSADM.trigger_name", line 3 ORA-04088: error during execution of trigger 'SYSADM.trigger_name
Partager