Bonjour
Je dois réaliser quelques triggers et je me pose un question sur la forme et la performance
syntaxe 1
syntaxe2
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 CREATE OR REPLACE TRIGGER MonTrigger AFTER INSERT OR UPDATE ON com_e FOR EACH ROW -- pour chaque ligne parceque ce n'est pas implicite ! DECLARE vIdSuivi NUMBER := -1; BEGIN -- si mon select ne trouve rien, alors, je fais la suite, sinon dodo ! FOR crs IN (SELECT idsuivi FROM MaTable WHERE flowtype = 'MonFlux' AND key = :new.NUMCOMMANDE AND stateid = 0) LOOP vIdSuivi := crs.idsuivi; END LOOP; IF vIdSuivi = -1 THEN INSERT INTO MaTable(idsuivi,flowtype,key,company,stateid,process) VALUES(MaSequence.nextval,'MonFlux',:new.NUMCOMMANDE,'',0,'Toto'); END IF; END ;
Quelle syntaxe choisir ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE OR REPLACE TRIGGER MonTrigger AFTER INSERT OR UPDATE ON com_e FOR EACH ROW -- pour chaque ligne parceque ce n'est pas implicite ! DECLARE vIdSuivi NUMBER := -1; BEGIN -- si mon select ne trouve rien, alors, je fais la suite, sinon dodo ! SELECT idsuivi INTO vIdSuivi FROM MaTable WHERE flowtype = 'MonFlux' AND key = :new.NUMCOMMANDE AND stateid = 0; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO MaTable(idsuivi,flowtype,key,company,stateid,process) VALUES(MaSequence.nextval,'MonFlux',:new.NUMCOMMANDE,'',0,'Toto'); END ;
Ou une autre ???
Pour info mon sélect ne renvoie qu'une ligne unique.
Merci d'avance
Partager