REATE OR REPLACE TRIGGER "XDZX"."TRI_YLDX" AFTER
INSERT ON "T_DELIVER" FOR EACH ROW begin
  pro_bjx(: old.f_userdata,: old.id,: old.f_destaddr,: old.f_orgaddr);
end;我刚才检查了一下,有调用存储过程,但没有传进去参数.参数都是空的

解决方案 »

  1.   

    如果存储过程里直接执行UPDATE语句就提示
    ORA-04091: 表 XDZX.T_DELIVER 发生了变化,触发器/函数不能读
    ORA-06512: 在"XDZX.PRO_BJX", line 15
    ORA-06512: 在"XDZX.TRI_BJX", line 2
    ORA-04088: 触发器 'XDZX.TRI_BJX' 执行过程中出错
      

  2.   

    把所有的old更改为new,因为在插入时所有的old的值都是为空的,只有new才有值,更新时old才为原来的值!
      

  3.   

    if mid>0  then
         update xdzx.t_deliver set f_dotime=sysdate,f_processflag=1 where id =mid;
         commit;
     end if;
    触发了存储过程,参数也正常了,但存储过程中这句执行不了
    还是提示原来的错误,改成了Before 后提示错误变了
    ERROR 位于第 1 行:
    ORA-04092: COMMIT 不能在触发器中
    ORA-06512: 在"XDZX.PRO_BJX", line 16
    ORA-06512: 在"XDZX.TRI_BJX", line 2
    ORA-04088: 触发器 'XDZX.TRI_BJX' 执行过程中出错
      

  4.   

    是不是插入后触发器,不能执行UPDATE语句?
      

  5.   

    在触发器中不能用commit;语句,你把commit;去掉就看看!
      

  6.   

    谢谢去掉成功执行了,但是UPDATE的语句没有执行成功,因为触发器是在T_DELIVER插入前触发的,每触发一次都能更新一下标志位呀.