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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;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>
Partager