[ORACLE 9i] Trigger - Récupérer une information de l'enreg.
Bonjour,
J'ai un petit soucis lors de la création d'un trigger Oracle.
Pour tout enregistrement insérée ou modifiée d'une table, je cherche a mettre une valeur a 0 si une deuxieme valeur = 'TOTO'.
Pour le moment, j'ai fais ca :
Code:
1 2 3 4 5 6 7 8 9
|
create or replace trigger MON_TRG
before insert or update on MA_TBL
for each row
begin
if :new.function = 'TOTO' then
:new.valeur := 0;
end if;
end; |
Mais il ne marche pas comme je veux parce que le système qui rempli la base de donnée enregistre d'abord la fonction. Et met à jour ensuite que la valeur (qui n'est pas forcemment = à 0).
Le soucis est que lors de cette mise a jour de valeur, :new.function n'est pas défini car non mis à jour.
Je ne peux donc meme pas tester la valeur de ce champ.
Est il possible d'effectuer une requete sur l'enregistrement concerné pour que je puisse récupérer le contenu du champ function et ainsi tester sa valeur et mettre :new.valeur = 0 ?
Sinon, voyez vous une autre solution ?
Merci beaucoup
Worldofdada
Re: [ORACLE 9i] Trigger - Récupérer une information de l'enr
Citation:
Envoyé par Worldofdada
Mais il ne marche pas comme je veux parce que le système qui rempli la base de donnée enregistre d'abord la fonction. Et met à jour ensuite que la valeur (qui n'est pas forcemment = à 0).
Le soucis est que lors de cette mise a jour de valeur, :new.function n'est pas défini car non mis à jour.
Non ce n'est pas vrai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| SQL> create or replace trigger trg_test_dvp
2 before insert or update on test_dvp
3 for each row
4 begin
5 if :new.b = 'TOTO' then
6 :new.c := 0;
7 end if;
8* end;
SQL> /
Trigger created.
SQL> update test_dvp set b = 'TOTO' where a = 2;
1 row updated.
SQL> select * from test_dvp;
A B C
--------- ------------------------------ ---------
1 a 2
2 TOTO 0
3 c 2
3 rows selected.
SQL> update test_dvp set c=1;
3 rows updated.
SQL> select * from test_dvp;
A B C
--------- ------------------------------ ---------
1 a 1
2 TOTO 0
3 c 1
3 rows selected. |