-
new et old dans trigger
Bonjour,
Je suis débutant en PL/SQL et j'ai absolument besoin de faire un trigger
dans lequel je selectionne le noms des champs de ma table (noms que je ne connais pas) que je stocke dans un tableau...
le problème consiste à comparer les anciennes et nouvelles valeurs de chaque
champs lors d'un update sur cette table
genre : IF OLD.Tableau(i)<>NEW.Tableau(i) THEN...
le probleme est qu'ORACLE ne possède pas de variable dynamique et que
je suis obligé de taper les noms en dur. Ce que je ne veux (et peux) pas faire
en vous remerciant par avance de votre réponse
Frank
-
il y a peut-être une autre méthode que ce genre de trigger. Que veut tu vérifier exactement ?
-
ce que je veux faire
En fait, je veux comparer l'ancien enregistrement et le nouvel enregistrement
d'une table (suite à un update) et déclencher via un trigger sur la table, une historisation de ces changements dans une table historique.
La table a modifier contient beaucoup de champs (une centaine), je ne veux pas les écrire en dur dans mon trigger : OLD.nomChamps1<>NEW.nomChamp1.
je veux utiliser un tableau qui contient le nom des champs de la table
et acceder à ces champs de manière dynamique...
OLD.tableau(i)
Est ce possible ?
-
suite
j'ai bien essayé de contourner le problème en essayant de "chopper"
la valeur du old et du new dans une requête.
Requete:='SELECT :OLD.' || tableau(i) || ' into :var FROM DUAL';
EXECUTE IMMEDIATE Requete ;
Tableau(i) contenant le nom de la colonne
mais celà ne marche pas.
-
tu peux éventuellement te servir de execute immediate pour récupérer le nom des colonnes mais ça me parait très compliqué... ce serait nettement plus simple de mettre les noms en dur et probablement plus performant :?
je crains que ce ne soit pas faisable de développer un trigger générique :?
-
Merci beaucoup
je vais essayer une autre méthode que ce trigger générique qui devait s'adapter à plusieurs table...
:(