日期:2014-05-17  浏览次数:20702 次

触发器新问题
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_trig
BEFORE DELETE ON orderform_list FOR EACH ROW
BEGIN
delete orderform_list where orderform_id=:old.orderform_id;
END;

------解决方案--------------------
1,
出错是因为你在触发器的中执行对触发器的基表的操作,这是不允许的。

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