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