Oracle Trigger to update a the same table

拟墨画扇 提交于 2019-12-24 00:24:54

问题


I have a trigger which I'm trying to use to update the same table it listens to.

However, upon submitting a create or update, I get the following errors:

ORA-04091: table [username].ADDRESSES is mutating, trigger/function may not see it ORA-06512: at "[username].ADDRESSES_T1", line 9 ORA-04088: error during execution of trigger '[username].ADDRESSES_T1'

I appreciate any help!


回答1:


You're updating the same table the trigger is written. You need something like this:

create or replace trigger "ADDRESSES_T1"
BEFORE
insert or update on "ADDRESSES"
for each row
begin
DECLARE
   l_lat NUMBER;
   l_lng NUMBER;
   l_postcode VARCHAR2(8) := :NEW.POSTCODE;

BEGIN
  brian.POSTCODE_TO_LAT_LNG_GM_API (l_postcode, l_lat, l_lng);
  :new.location = SDO_GEOMETRY(2001, --SDO_GTYPE
                               8307, --SDO_SRID
                               SDO_POINT_TYPE(l_lng, --X lng
                                              l_lat, --Y lat
                                              null),     --Z
                               null, --SDO_ELEM_INFO_ARRAY
                               null);
END;



回答2:


Its throwing mutating table error because your trigger is getting fired on table ADDRESSES and inside the trigger body its updating the same table "ADDRESSES".

You can avoid this by using instead of triggers (creating view for table ADDRESSES).

here is the sample code

create or replace view addresses_vw as select * from addresses;

CREATE OR REPLACE TRIGGER ADDRESSES_T1
INSTEAD OF INSERT or UPDATE
ON addresses_vw
FOR EACH ROW
BEGIN
  UPDATE addresses
  SET <statements> ;
END ADDRESSES_T1;


来源:https://stackoverflow.com/questions/13492015/oracle-trigger-to-update-a-the-same-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!