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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; /
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:
Pour récupérer les champs de chaque table, et donc pouvoir faire quelque chose du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Select replace(wmsys.wm_concat(':new.' || COLUMN_NAME), ',', ' || '';'' || ') COL from USER_TAB_COLUMNS where TABLE_NAME='MATABLE';
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; /
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.
Partager