很高兴这么快就有人回答!
上面的E文是从ORACLE的帮助里摘出来的.
从E文里看,
好像是可以的.

解决方案 »

  1.   

    我又简单的试了一下,(c表假设为邻时表)不行
    SQL> create or replace trigger tr_demo
      2  after insert on a
      3  for each row
      4  begin
      5  insert into c values('demo',111,111);
      6  end tr_demo;
      7  /触发器已创建SQL> create or replace trigger tr_democ
      2  after insert on c
      3  for each row
      4  begin
      5  update a set bbb=222 where aaa='101';
      6  end tr_democ;
      7  /触发器已创建SQL> insert into a values('bbb',1,1);
    insert into a values('bbb',1,1)
                *
    ERROR 位于第1行:
    ORA-04091: 表 TEMP.A 发生了变化,触发器/函数不能读
    ORA-06512: 在"TEMP.TR_DEMOC", line 2
    ORA-04088: 触发器 'TEMP.TR_DEMOC' 执行过程中出错
    ORA-06512: 在"TEMP.TR_DEMO", line 2
    ORA-04088: 触发器 'TEMP.TR_DEMO' 执行过程中出错
    SQL>
      

  2.   

    触发器已经搞定了,在同一个表上建两个触发器,
    一个是行触发器,一个是语句触发器,再建一个包, 包里的变量放数据用.
    先用行触发器取得old or new 的值,然后马上传给包里的变量,
    语句触发器从包里的变量获得值,再对原表操作.
    有可能会出现ORA-00036错误,解决办法是设一个标志变量和异常处理,防止循环触发.
    触发器的触发顺序是先行触发,紧跟着是语句触发.其他人还有什么好办法,
    欢迎讨论.