Bonjour
Je dois réaliser quelques triggers et je me pose un question sur la forme et la performance

syntaxe 1
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 ;
syntaxe2
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 ;
Quelle syntaxe choisir ?
Ou une autre ???
Pour info mon sélect ne renvoie qu'une ligne unique.

Merci d'avance