Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/06/2008, 17h37   #1
Invité régulier
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 7
Points : 7
Par défaut TRIGGER : Nom de la colonne Modifié

salut,

je développe une application de traçage d'une base de donnée Oracle où je peut crée des TRIGGER a partir d'un nom d'une table existe dans la base sans connaitre d'avance la structure,
mon problème c 'est dans le cas ou je crée une TRIGGER de type ON UPDATE je doit stocké le nom des colonnes modifiés dans une autre table nommé LMD.

donc voila le problème est claire, c'est du connaître le nom du colonne modifié sans savoir la structure du table à tracé, l'ancienne valeur et la nouvelle valeur
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
CREATE TRIGGER JOBS_table BEFORE INSERT OR DELETE OR UPDATE ON JOBS
FOR EACH ROW 
BEGIN 
IF Inserting THEN
INSERT INTO LMD VALUES('JOBS','INSERT','NULL',user,sysdate,'NULL','NULL')
END IF;
IF Deleting THEN
INSERT INTO LMD VALUES('JOBS','DELETE','NULL',user,sysdate,'NULL','NULL')
END IF;
IF Updating THEN
INSERT INTO LMD VALUES('JOBS','UPDATE','Nom_de-colone',user,sysdate,:OLD,:NEW)
END IF;
END;

:NEW = la nouvelle valeur du colonne
:OLD = l'ancienne valeur du colonne


la structure du table LMD:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
 Nom                                       NULL ?   Type
 ----------------------------------------- -------- ----------------------------
 TABLE_LMD                                          VARCHAR2(15)
 TYPE_LMD                                           VARCHAR2(10)
 COLONE_LMD                                         VARCHAR2(15)
 USER_LMD                                           VARCHAR2(10)
 DATE_LMD                                           DATE
 OLD_LMD                                            VARCHAR2(10)
 NEW_LMD                                            VARCHAR2(10)
j'utilise Oracle9i (9.0.1.1.1)

de l'aide svp
nooneelse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 17h48   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Regardez l'auditing
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 18h11   #3
Invité régulier
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 7
Points : 7
g pas dit que cette application est sous le cadre d'un mini projet en java et que je dois utilisé les trigger
nooneelse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 20h21   #4
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Pour moi, le seul moyen est de créer une fonction PL/SQL "génératrice de trigger".

Elle prendrai en paramètre le nom de la table.

Cette fonction irai dans le catalogue oracle rechercher la définition de la table en question et génèrerai le code du trigger qui serait alors retourné au code appelant pour exécuter le DDL du trigger.

Afin de déterminer ses colonnes modifiées, ce trigger devrait tester les champs de la tables (old/new) et faire l'insert sur la table d'audit si nécessaire.

Ensuite tu exécuterai ce "trigger factory" pour chacune des tables voulues, te générant ainsi des triggers adpatés...
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 17h15   #5
Invité régulier
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 7
Points : 7
tu peu me donné un exemple de fonction ?
nooneelse est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h47.


 
 
 
 
Partenaires

Hébergement Web