Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/02/2008, 10h32   #1
Membre éclairé
 
Inscription : décembre 2005
Messages : 315
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2005
Messages : 315
Points : 313
Points : 313
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 :
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
jproto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 10h46   #2
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
: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 :
1
2
 
IF :NEW.COLONNE = 'A' Then ...
un peu de doc à lire : http://download.oracle.com/docs/cd/B...htm#SQLRF01405
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 10h47   #3
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
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.
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 11h17   #4
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
déjà traité:
http://www.developpez.net/forums/sho...d.php?t=485614

DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 13h50   #5
Membre éclairé
 
Inscription : décembre 2005
Messages : 315
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2005
Messages : 315
Points : 313
Points : 313
Merci pour ces infos.
Je ne cache pas une légère déception .

Chris
jproto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h59.


 
 
 
 
Partenaires

Hébergement Web