Question de performance trigger/ PL
Bonjour
Je dois réaliser quelques triggers et je me pose un question sur la forme et la performance
syntaxe 1
Code:
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 ; |
syntaxe2
Code:
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 ; |
Quelle syntaxe choisir ?
Ou une autre ???
Pour info mon sélect ne renvoie qu'une ligne unique.
Merci d'avance