Triggers Oracle automatisés
Bonjour,
Je travaille sur un script qui me permettrai de créer des triggers automatiques sur certaines des tables de ma base.
Je voudrai un trigger before insert pour les tables voulues qui stocke dans une table (créée au préalable) la valeur de tous les champs de la ligne nouvellement créée.
je ne sais pas si je suis bien clair:
Code:
1 2 3 4 5 6 7 8 9
| CREATE OR REPLACE TRIGGER TRI_MATABLE
BEFORE INSERT ON SA.MATABLE
FOR EACH ROW
BEGIN
IF INSERTING THEN
insert into XTRIGTRC (NOMTAB,TYPFIRE,VALEURS) values ('MATABLE','I', :new.CHAMP1|| ';' || :new.CHAMP2|| ';' || :new.CHAMP3);
END IF;
END;
/ |
Ce trigger fonctionne: il me ramène dans VALEURS la liste des champs de ma ligne, séparées par des points virgules. C'est bien le résultat voulu.
Mais je souhaite l'automatiser pour plusieurs tables, et je me vois mal écrire à la main la liste des champs de chaque table...
J'avais donc pensé à la requête suivante:
Code:
Select replace(wmsys.wm_concat(':new.' || COLUMN_NAME), ',', ' || '';'' || ') COL from USER_TAB_COLUMNS where TABLE_NAME='MATABLE';
Pour récupérer les champs de chaque table, et donc pouvoir faire quelque chose du genre:
Code:
1 2 3 4 5 6 7 8 9
| CREATE OR REPLACE TRIGGER TRI_MATABLE
BEFORE INSERT ON SA.MATABLE
FOR EACH ROW
BEGIN
IF INSERTING THEN
insert into XTRIGTRC (NOMTAB,TYPFIRE,VALEURS) values ('MATABLE','I', (Select replace(wmsys.wm_concat(':new.' || COLUMN_NAME), ',', ' || '';'' || ') COL from USER_TAB_COLUMNS where TABLE_NAME='MATABLE'));
END IF;
END;
/ |
Seulement, je n'ai pas le résultat voulu... Le champ VALEURS de la table XTRIGTRC vaut : :new.CHAMP1|| ';' || :new.CHAMP2|| ';' || :new.CHAMP3 (forcément)
Du coup je bloque sur cette requête: comment faire pour récupérer de manière automatique les champs d'une table donnée, à l'intérieur d'un trigger ?
Merci d'avance de votre aide.