如标题,我在对一个表进行插入的时候,需要对该记录的某一字段进行修改,通过触发器进行修改。原触发器如下
CREATE OR REPLACE TRIGGER t_bingrsj_shijms_update
AFTER INSERT ON bingrsj
FOR EACH ROW
BEGIN
UPDATE bingrsj SET shijms = '' WHERE zhuyh = :new.zhuyh;
END;
结果出现了以下错误
后经过分析,得出以下结论:
要知道,oracle在执行dml语句的时候是需要提交操作的。在对于一个表进行操作时,如果在未提交状态下是无法再对该表进行操作的。
接下来分析该触发器
该触发器是在插入之后在对他进行修改,插入后立即执行,也就是说在插入后还没来得及进行提交操作,触发器就启动了,造成死锁
解决办法:
我们可以换一种思路,在插入之前对插入的值进行提前定义,这样的话就避免的插入之后在修改造成的死锁
CREATE OR REPLACE TRIGGER t_bingrsj_shijms_update
Before INSERT ON bingrsj
FOR EACH ROW
BEGIN
:new.shijms := '';
END;
这样修改之后,功能实现;