[Oracle&SQL].sql contenant la creation de plusieurs triggers (RESOLU)

.sql contenant la creation de plusieurs triggers (RESOLU) [Oracle&SQL] - SQL/NoSQL - Programmation

Marsh Posté le 15-04-2003 à 12:01:16    

Je souhaite grouper mes requetes de creation de triggers dans un fichier .sql tout comme je l ai fait pour la creation de mes tables.
 
Je commence donc par create puis end et je passe au create suivant... normal quoi.
 
Voila un morceau du fichier que j execute via la commande @ sous sqlplus :
 

Code :
  1. /* Cree les configurations de liens quand une association entre*/
  2. /*UTILISATEUR et GROUPE est cree */
  3. create or replace trigger T_A_I_UTILISATEUR_GROUPE
  4. after insert on W_UTILISATEUR_GROUPE
  5. for each row
  6. declare
  7. /* Liste des liens concernant le nouveau groupe utilisateur */
  8. cursor C_LIENS_GROUPE is select LIEN from W_GROUPE_LIEN
  9.  where :new.GROUPE = W_GROUPE_LIEN.GROUPE ;
  10. /* Variable recevant le fetch pour les codes des liens */
  11. V_LIEN_COURANT W_LIEN.CODE%type ;
  12. begin
  13. open C_LIENS_GROUPE ;
  14. loop
  15.  fetch C_LIENS_GROUPE into V_LIEN_COURANT ;
  16.  insert into W_CONFIG_LIEN_UTILISATEUR (LIEN, UTILISATEUR)
  17.   values (V_LIEN_COURANT, :new.UTILISATEUR) ;
  18.  exit when C_LIENS_GROUPE%notfound ;
  19. end loop;
  20. end T_A_I_UTILISATEUR_GROUPE ;
  21. /* Supprime les configurations de liens quand une association entre*/
  22. /*   UTILISATEUR et GROUPE est supprimée */
  23. create or replace trigger T_A_D_UTILISATEUR_GROUPE
  24. after delete on W_UTILISATEUR_GROUPE
  25. for each row
  26. declare
  27. cursor C_LIENS_GROUPE is select LIEN from W_GROUPE_LIEN
  28.  where :old.GROUPE = W_GROUPE_LIEN.GROUPE ;
  29. V_LIEN_COURANT W_LIEN.CODE%type ;
  30. begin
  31. open C_LIENS_GROUPE ;
  32. loop
  33. fetch C_LIENS_GROUPE into V_LIEN_COURANT ;
  34. delete from W_CONFIG_LIEN_UTILISATEUR
  35.  where V_LIEN_COURANT = W_CONFIG_LIEN_UTILISATEUR.LIEN
  36.  and :old.UTILISATEUR = W_CONFIG_LIEN_UTILISATEUR.UTILISATEUR ;
  37.  exit when C_LIENS_GROUPE%notfound ;
  38. end loop;
  39. end T_A_D_UTILISATEUR_GROUPE ;
  40. ...
  41. ..
  42. .


 
Le sho err donne ca :
 

Code :
  1. 22/1     PLS-00103: Symbole "CREATE" rencontrÚ


 
Super sympa j'aimerais qu il me cree mon 2eme trigger au lieu de me dire "ouay mais non un trigger c'est deja bien assez t en crees pas un 2eme garcon  :non: "
 
Ah oui je precise que si j'execute mes 20 triggers separement, it works  [:yaisse2] !
 
Si vous avez une syntaxe pour enchainer la creation de triggers dans un fichier sql... merchi :)
 
 
EDIT Solution :
 
syntaxe :
 

Code :
  1. /* debut du fichier sql */
  2. create trigger nom_trigger
  3. ...
  4. end ;
  5. /
  6. create trigger nom_trigger2
  7. ...
  8. end ;
  9. /
  10. ...
  11. /* fin du fichier sql */


Message édité par Masure le 15-04-2003 à 14:06:28
Reply

Marsh Posté le 15-04-2003 à 12:01:16   

Reply

Marsh Posté le 15-04-2003 à 12:52:04    

et si tu mets / a la fin de ton premier trigger? :??:

Reply

Marsh Posté le 15-04-2003 à 13:31:09    

c pas ça la syntaxe ?
 
declare
 
Begin
 
... 1 creat trigger
 
... 2 creat trigger
 
end.

Reply

Marsh Posté le 15-04-2003 à 14:03:53    

polo021 a écrit :

et si tu mets / a la fin de ton premier trigger? :??:  


 
Et bien j'etais persuadé que le "/" indiquait la fin du fichier... merci beaucoup car ca marche en effet.
 
On doit donc mettre un / a la fin de chaque trigger

Reply

Marsh Posté le 15-04-2003 à 14:09:11    

masure a écrit :


 
Et bien j'etais persuadé que le "/" indiquait la fin du fichier... merci beaucoup car ca marche en effet.
 
On doit donc mettre un / a la fin de chaque trigger


 
ben j'en etais pas sur en fait. Mais si je me souviens bien le / n'indique pas la fin du fichier mais bien la fin d'une fonction, procedure ou trigger,... dans un bloc pl/sql. Et c'est comme ca que Oracle sait qu'il peut traiter ce bloc. Mais tu dois quand meme mettre ton end T_A_I_UTILISATEUR_GROUPE ;  
 
Et avaec la solution de vttman2 ca donnait quoi?


Message édité par polo021 le 15-04-2003 à 14:10:53
Reply

Marsh Posté le 15-04-2003 à 14:18:13    

polo021 a écrit :


 
ben j'en etais pas sur en fait. Mais si je me souviens bien le / n'indique pas la fin du fichier mais bien la fin d'une fonction, procedure ou trigger,... dans un bloc pl/sql. Et c'est comme ca que Oracle sait qu'il peut traiter ce bloc. Mais tu dois quand meme mettre ton end T_A_I_UTILISATEUR_GROUPE ;  
 
Et avaec la solution de vttman2 ca donnait quoi?


 
a vrai dire je ne l'ai pas essayé car ca me paraissait assez bizarre...
 
Peut etre est ce la syntaxe de creation de package ? Je ne m'y suis pas penché encore

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed