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
- J’ai un trigger
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;
Lorsque je compile le trigger, j’obtiens les erreurs
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;
En fait, si je simplifie mon trigger ainsi :
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'
et que je le compile, j’obtiens la même erreur
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;
Je m’attendais pourtant à ce que :OLD soit du type maTable%ROWTYPE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part PLS-00049: variable de lien erronée 'OLD'
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
Partager