Bonjour à tous,

Je cherche à avoir un script de création de trigger dynamique de façon à pouvoir le passer sur plusieurs tables en ne changeant que le nom de table. J'avais prévu de faire une procédure de création de trigger avec le nom de table en paramètre, puis d'appeler cette procédure dans une boucle qui parcourt toutes les tables auxquelles je veux ajouter le trigger; cela aurait donné quelque chose comme ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
create procedure Add_Trigger (in table_nom varchar(20))
begin
# prépération de la requete de création du trigger
set @trigger_creation = concat("create trigger set_date_modification_",table_nom," 
before update on ",table_nom,"
for each row set new.date_modification = now()");
# execution de la requete
prepare stmt_create from @trigger_creation; 
execute stmt_create; deallocate prepare stmt_create;
end
puis dans une autre routine je l'aurai appelée:

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
17
18
19
20
21
22
23
 
create procedure Add_trigger_on_all (in schema_nom varchar(20))
begin
declare done int default 0; #variable pour la boucle
declare table_nom varchar(50); # variable pour les noms de tables parcourues
 
declare cursor_tables cursor for #curseurr de parcours des tables
select distinct table_name from information_schema.tables
where table_schema like schema_nom;
 
#handler pour le curseur
declare continue handler for sqlstate '02000' set done = 1;
 
#boucle grâce au curseur:
open cursor_tables;
repeat
   fetch cursor_tables into table_nom
   #appel de la routine de création du trigger:
   if not done then call Add_Trigger(table_nom); end if; 
until done end repeat;
close cursor_tables;
 
end;
Malheureusement il est indiqué dans la doc mysql qu'une routine ne peut pas contenir de create trigger!!
Est-ce que quelqu'un sait comment je pourrais scripter ma création de trigger en masse d'une autre manière?

Merci beaucoup, Thomas