мутирование триггерной таблицы при обновлении одной таблицы из другой - PullRequest
0 голосов
/ 04 июня 2018

Таблица меняется при запуске этого кода, пожалуйста, помогите мне, где я ошибаюсь?Спасибо

`CREATE OR REPLACE TRIGGER test_tri
after update of country ON test_1
for each row
when (new.country = 'SomeCountry')
begin
update test_2 set column_1 = 'Something'
where test_1.id = (Select id from test_1,test_2 where test_1.id=test_2.id) `

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Таблица мутаций определяется как таблица, которая изменяется.Но при работе с триггерами это таблица, которая может быть изменена.

Если вам действительно нужно использовать таблицу test_1 в вашем SQL, вы должны добавить прагму подсказки autivil_transaction

Как это:

CREATE OR REPLACE TRIGGER test_tri
after update of country ON test_1
for each row
when (new.country = 'SomeCountry')
 pragma autonomous_transaction;
begin
update test_2 set column_1 = 'Something'
where test_1.id = (Select id from test_1,test_2 where test_1.id=test_2.id)
0 голосов
/ 04 июня 2018

попытка уточнить, более чем реальный ответ;если я хорошо понимаю, что вам нужно, ваш триггер слишком сложен, и вам может просто понадобиться:

CREATE OR REPLACE TRIGGER test_tri
    AFTER UPDATE OF country
    ON test_1
    FOR EACH ROW
    WHEN(new.country = 'SomeCountry')
BEGIN
    UPDATE test_2
       SET column_1    = 'Something'
     WHERE test_2.id = :new.id;
END;

Например:

SQL> select *
  2  from test_2;

        ID COLUMN_1
---------- ----------------
         1 xx

SQL> update test_1
  2  set country = 'SomeCountry';

1 row updated.

SQL> select *
  2  from test_2;

        ID COLUMN_1
---------- ----------------
         1 Something

Это работает в структуре, созданной следующим образом, без триггеров:

create table test_1 (id number, country varchar2(100));
create table test_2 (id number, column_1 varchar2(100));

Если у вас разные таблицы, другие триггеры и т. Д., Пожалуйста, опубликуйте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...