используйте триггер для вставки в таблицу, если данных еще нет - PullRequest
0 голосов
/ 08 апреля 2011


У меня есть две таблицы с одинаковой структурой.Таблица 1 имеет несколько строк, которые могут иметь одинаковые значения.Теперь я хочу вставить те же строки в таблицу 2, исключая повторяющиеся строки.Я могу сделать это, как правило, используя «минус», но я хочу написать триггер, так что если новая строка вставляется в таблицу 1 и не присутствует в таблице 2, а затем вставить в таблицу 2 в противном случае нет.Я новичок в триггерах.Триггер, который я написал, выдает мне ошибку «триггер мутирует», когда я вставляю в таблицу 1.

INSERT INTO t3 (name1, name2, num1, num2) выберите name1, name2, num1, num2 изt1 группировка по name1, name2, num1, num2 минус select * из t3

, когда я пишу приведенный выше код, он работает нормально, но когда я включаю его в свой триггер, он выдает ошибку.Как мне выполнить вышеупомянутое с помощью триггера?

Пожалуйста, помогите,

Спасибо
Pranay

1 Ответ

1 голос
/ 08 апреля 2011

Вам не нужно запрашивать таблицу из триггера уровня строки.Вот для чего нужен синтаксис :NEW., например:

INSERT INTO t3(name1,name2,num1,num2)
select :NEW.name1,:NEW.name2,:NEW.num1,:NEW.num2 from DUAL
minus select name1,name2,num1,num2 from t3;

Хотя я думаю, что приведенный выше код выглядит немного глупо.Я бы предпочел наложить уникальное ограничение на t3, а затем добавить обработчик в триггер, чтобы позаботиться о любых DUP_VAL_ON_INDEX исключениях.

...