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' 执行过程中出错

解决方案 »

  1.   


    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; 既然要删除了,干吗在触发器里还要在删一次》、
      

  2.   

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

  3.   

    多些指点 我知道哪错了!CREATE OR REPLACE TRIGGER orderformlist_delete_trig
    BEFORE DELETE ON orderform_list FOR EACH ROW
    BEGIN
    delete orderform where orderform_id=:old.orderform_id;
    END;
    红字部分的那个表我打错了,改了就好了!