IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

new et old dans trigger


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut 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

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    il y a peut-être une autre méthode que ce genre de trigger. Que veut tu vérifier exactement ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut 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 ?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut 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.

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    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

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup

    je vais essayer une autre méthode que ce trigger générique qui devait s'adapter à plusieurs table...


Discussions similaires

  1. Update dans Trigger
    Par Te-Deum dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2020, 14h31
  2. Triggers, tester si NEW ou OLD est assigné
    Par Antoine_935 dans le forum Débuter
    Réponses: 2
    Dernier message: 15/12/2009, 21h12
  3. Réponses: 1
    Dernier message: 16/03/2006, 17h04
  4. Variable OUTPUT dans Trigger
    Par Yanmeunier dans le forum Développement
    Réponses: 4
    Dernier message: 09/12/2005, 13h38
  5. [PL/SQL] Appel procédure stockée dans trigger
    Par Félia dans le forum Oracle
    Réponses: 3
    Dernier message: 24/01/2005, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo