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

 Oracle Discussion :

Type des variables :OLD et :NEW dans un trigger


Sujet :

Oracle

  1. #1
    Membre averti

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Points : 371
    Points
    371
    Par défaut Type des variables :OLD et :NEW dans un trigger
    Bonjour,

    Je cherche à récupérer dans une procédure la valeur avant et la valeur après de l’ensemble d’un enregistrement.
    A cette fin, cette procédure est appelée dans un trigger dont je comptais récupérer directement les valeurs :OLD et :NEW, mais voilà, ces types sembles incompatibles avec le %ROWTYPE de ma table.

    Pour faire plus clair :

    - J’ai une table maTable
    - J’ai une procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure monTraitement( contexteAvant IN maTable%ROWTYPE,
                             contexteApres IN maTable%ROWTYPE ) is
    begin
        -- traitement quelconque
    end monTraitement;
    - J’ai un trigger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace trigger maTable_trg
    after UPDATE on maTable
    referencing old as OLD new as NEW
    for each row
    begin
        monTraitement(
            contexteAvant => :OLD,
            contexteApres => :NEW );
    end maTable_trg;
    Lorsque je compile le trigger, j’obtiens les erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PLS-00049: variable de lien erronée 'OLD'
    PLS-00049: variable de lien erronée 'NEW'
    En fait, si je simplifie mon trigger ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace trigger maTable_trg
    after UPDATE on maTable
    referencing old as OLD new as NEW
    for each row
    declare
        tmp maTable%ROWTYPE;
    begin
        tmp := :OLD;
    end maTable_trg;
    et que je le compile, j’obtiens la même erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PLS-00049: variable de lien erronée 'OLD'
    Je m’attendais pourtant à ce que :OLD soit du type maTable%ROWTYPE.

    Quel est son type réel ?

    Et ai-je un moyen de récupérer directement l’ensemble de l’enregistrement afin de l’exploiter dans une fonction ou procédure ?

    Merci,
    Chris

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    :NEW et :OLD représentent, dans des trigger update for each row la ligne avant et après modification.
    mais on n'appelle jamais :NEW ou :OLD seuls, on suffixe systématiquement avec le nom de la colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if :NEW.COLONNE = 'A' Then ...
    un peu de doc à lire : http://download.oracle.com/docs/cd/B...htm#SQLRF01405

  3. #3
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Je ne suis pas sûr qu'on puisse récupérer l’ensemble d’un enregistrement en une seule fois. As-tu essayé de récupérer les colonnes une par une ?

    LBO72.

  4. #4
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249

  5. #5
    Membre averti

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Points : 371
    Points
    371
    Par défaut
    Merci pour ces infos.
    Je ne cache pas une légère déception .

    Chris

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/11/2007, 23h52
  2. requete ajout, synthaxe suivant type des variables
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 13/08/2007, 12h44
  3. [Oracle] variable :new dans les triggers
    Par blackwizard dans le forum Administration
    Réponses: 12
    Dernier message: 09/02/2007, 15h10
  4. Réponses: 15
    Dernier message: 29/10/2006, 19h01
  5. Réponses: 4
    Dernier message: 09/08/2006, 16h14

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