当前位置: 代码迷 >> Oracle开发 >> 触发器新有关问题
  详细解决方案

触发器新有关问题

热度:145   发布时间:2016-04-24 08:02:14.0
触发器新问题
create trigger orderformlist_update_trig
before UPDATE on orderform_list
for each row
begin
update orderform set diaodu=:new.a where orderform_id=:new.orderform_id;
END ;
/×××××××××××××××××××××××××××××××××××××××××××××××××××××/

CREATE OR REPLACE TRIGGER orderformlist_delete_trig
BEFORE DELETE ON orderform_list FOR EACH ROW
BEGIN
delete orderform_list where orderform_id=:old.orderform_id;
END;

先运行UPDATA语句,成功!
在运行DELETE语句,报错

ORA-04091: 表 SCOTT.ORDERFORM_LIST 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SCOTT.ORDERFORMLIST_DELETE_TRIG", line 3
ORA-04088: 触发器 'SCOTT.ORDERFORMLIST_DELETE_TRIG' 执行过程中出错

------解决方案--------------------
SQL code
CREATE OR REPLACE TRIGGER orderformlist_delete_trigBEFORE DELETE ON orderform_list FOR EACH ROWBEGINdelete orderform_list where orderform_id=:old.orderform_id;END;
------解决方案--------------------
1,
出错是因为你在触发器的中执行对触发器的基表的操作,这是不允许的。

2,你的删除是不是希望在删除一条记录的时候将所有orderform_id相同的全部删除?
如果不是,这个触发器是多余;
如果你的表中orderform_id存在重复的情况,你要想一次删除全部的话,建议在delete语句中指明就可以了,这种触发器操作不好使。
  相关解决方案