oracle中的复合触发器

时间:2010-01-05 12:59:15

标签: oracle plsql triggers oracle11g

我有一个复合触发器,在后面的语句中,我对其他表也有一个复合触发器的更新,如下面的代码所示:

create or replace
trigger TRIGGER
for insert or update on TABLE
COMPOUND trigger

after STATEMENT is
begin
  update THEOTHERTABLE set VALUE = VALUE + 1 where COD = 1;
end after STATEMENT;
end;

更新只是一个简单的工作。我希望它在THEOTHERTABLE上触发触发器,但只有在触发器不是复合触发时它才会触发。

这是Oracle复合触发器的问题还是仅仅是我不理解的功能?

3 个答案:

答案 0 :(得分:4)

我试图重新创建你的场景,它似乎对我很好。所以我认为你应该再看一下你的实现。寻找您编码的内容与此后的内容之间的差异,也许这就是答案所在。

这是我的触发器

SQL> create or replace
  2  trigger t1_compound
  3  for insert or update on t1
  4  compound trigger
  5
  6      after statement is
  7      begin
  8          update t2 set t1_id = nvl(t1_id,0) + 1 where cod = 12;
  9      end after statement;
 10  end;
 11  /

Trigger created.

SQL>
SQL> create or replace
  2  trigger t2_compound
  3  for insert or update on t2
  4  compound trigger
  5
  6      after statement is
  7      begin
  8          update t3 set t2_id = nvl(t2_id,0) + 1 where cod = 12;
  9      end after statement;
 10  end;
 11  /

Trigger created.

SQL>

...这是测试数据......

SQL> select id, cod from t1
  2  /

        ID        COD
---------- ----------
         1         12

SQL> select id, cod, t1_id from t2
  2  /

        ID        COD      T1_ID
---------- ---------- ----------
        11         12

SQL> select id, cod, t2_id from t3
  2  /

        ID        COD      T2_ID
---------- ---------- ----------
       111         12

SQL> 

...当我在第一张桌子上发布更新时会发生这种情况......

SQL> update t1 set dt = sysdate
  2  where id = 1
  3  /

1 row updated.

SQL> select id, cod, t1_id from t2
  2  /

        ID        COD      T1_ID
---------- ---------- ----------
        11         12          1

SQL> select id, cod, t2_id from t3
  2  /

        ID        COD      T2_ID
---------- ---------- ----------
       111         12          1

SQL>

答案 1 :(得分:0)

如果您在编译触发器后执行此操作,但是如果再次尝试,即使使用其他数据,它也不会更新THEOTHERTABLE

答案 2 :(得分:-2)

我认为它不应该工作......如果你要为THEOTHERTABLE创建一个过程并从这个触发器调用该过程会更好。