2010-01-05 4 views
1

У меня есть триггер соединения и в после заявления у меня есть обновление для другой таблицы, которая имеет также триггер соединения, как в коде ниже:Соединения триггеров в оракуле

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 или просто функцией, которую я не понимаю?

+0

Что триггер на THEOTHERTABLE выглядеть? –

+0

Это простой триггер, который срабатывает при обновлении THEOTHERTABLE. Я пробовал выводить на dbms_output в перед каждой строкой, а после оператора и сразу запускает первый раз после компиляции триггера TRIGGER – Joao

ответ

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> 
-2

Я не думаю, что это должно сработать ... было бы лучше, если бы вы создали процедуру для THEOTHERTABLE и вызвали это процедуры с этого триггера.

0

Это работает, если вы делаете это после компиляции триггера, но если вы попытаетесь его снова, даже с другими данными, он не будет обновлять THEOTHERTABLE

Смежные вопросы