Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 30/04/2008, 15h07   #1
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 92
Points : 28
Points : 28
Envoyer un message via ICQ à Fritzoune Envoyer un message via MSN à Fritzoune
Par défaut Syntaxe d'un trigger

Bonjour,
Je ne suis pas spécialement doué avec les triggers et je dois en faire un pas facile pour moi.
Pouvez-vous me dire pourquoi il ne fonctionne pas ?
Mon but:
Lorsque je change la valeur AREA d'un enregistrement de la table RM, je dois aller vérifier dans la table GROS la valeur du champs IS_FME, si celui-ci =0, alors je dois calculer la somme AREA de tous les champs pour lesquels le BL_ID et le FL_ID correspondent et l'insérer dans la table GROS.
BL_ID étant le bâtiment, FL_ID étant l'étage.
J'ai mis un LIKE % sur le FL_ID car l'étage est divisé en plusieurs parties et le numéro est le dernier caractère de celui-ci.

Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE TRIGGER t_update_SP_gros
after INSERT OR DELETE OR UPDATE OF area ON RM
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
 
UPDATE GROS SET AREA=(SELECT sum(area)*110/100 FROM rm WHERE rm.bl_id=':new.bl_id' AND rm.fl_id LIKE '%:new.fl_id')
WHERE gros.bl_id=':new.bl_id' AND gros.fl_id LIKE '%:new.fl_id' AND is_fme=0;
 
 
END;
Citation:
Erreur du Serveur: XXXXX: table RM is mutating, trigger/function may not see it
ORA-06512: at "T_UPDATE_SP_GROS", line 3
ORA-04088: error during execution of trigger 'AFM.T_UPDATE_SP_GROS'


Enregistrement:
bl_id = <BCH>
rm_id = <1103>
fl_id = <_1>
c_porte = <BCH 1103>
name = <ENSEIGNEMENT>
x_code_usuel = <>
x_motcle = <F>
comments_adm = <>
dwgname = <BCH_01ZP>
ehandle = <268FD>
dv_id = <10600>
dp_id = <10621>
option1 = <1103>
area = <171.88>
layer_name = <RM>
length = <56.3>

Ancienne Clé Principale:
<BCH><_1><1103>
Fritzoune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 17h18   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
2 choses : 1 chaine de caractère reste une chaine, elle ne sera jamais évaluée lorsqu'elle est directement dans un ordre sql.
Donc ':new.jifejdfie' vaut ':new.jifejdfie'

Dans les triggers, donc il faut simplement utiliser :new.colonne

Deuxième chose : Mutating table, une recherche sur le forum ou google te donnera 200000 posts : Tu ne peux pas lire (dans un trigger) une table qui est en train d'être modifiée/créée/deletée par ton trigger.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h04.


 
 
 
 
Partenaires

Hébergement Web