#oracle #triggers #move
#Oracle #триггеры #переместить
Вопрос:
вначале я думал, что это действительно легко выполнить, но я застрял с ошибкой изменения с помощью триггера, и у меня нет другой идеи о том, как это выполнить. основная цель этого действия — избежать того, чтобы строка обновления выполнялась дважды… поэтому, как только некоторые поля обновляются, мне нужен процесс, который перемещает строку в другую таблицу (те же поля в этой таблице)
Я пробовал запускать с помощью AFTER update.. но ошибка изменения
Я надеюсь, что кто-нибудь может мне помочь
заранее благодарю
Raph
Ответ №1:
Сложно отлаживать код, который вы не видите; почему вы не опубликовали тестовый пример, чтобы мы увидели, что вы сделали и как отреагировал Oracle?
Потому что это работает так, как ожидалось — если я правильно понял вопрос. Вот как.
SQL> create table test (id number, name varchar2(20));
Table created.
SQL> create table test_2 (id number, name varchar2(20), datum date);
Table created.
SQL> create or replace trigger trg_ai_test
2 after insert on test
3 for each row
4 begin
5 insert into test_2 (id, name, datum)
6 values (:new.id, :new.name, sysdate);
7 end;
8 /
Trigger created.
Тестирование:
SQL> insert into test (id, name) values (1, 'Littlefoot');
1 row created.
SQL> select * from test;
ID NAME
---------- --------------------
1 Littlefoot
SQL> select * From test_2;
ID NAME DATUM
---------- -------------------- -------------------
1 Littlefoot 07.01.2021 13:47:31
SQL>
Я предполагаю, что ваш триггер выбирает из таблицы, в которой вы создали триггер (в моем примере это было бы select ... from test
). Вы не можете этого сделать из-за ошибки изменяющейся таблицы, но — вам также не нужно этого делать, поскольку вы можете использовать :new
:old
значения столбцов и / или.
Ответ №2:
именно это! изменение
Я нашел способ заставить ее работать :
создайте или замените ТРИГГЕР TRIGGER1 После ОБНОВЛЕНИЯ AUTOMATICCOUNT НА SCAN4000
НАЧАТЬ вставку в SCAN4000_SAP (datamatrixcode, automaticcount) выберите scan4000.datamatrixcode, scan4000.automaticcount из scan4000, где automaticcount не равен нулю; Удалить из SCAN4000, где scan4000.automaticcount не равен нулю; КОНЕЦ;
Коллега только что сказал мне, что это может привести к ВЗАИМОБЛОКИРОВКАМ, что вы думаете?