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:
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:
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:
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:
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:
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