Как запустить триггер после каждой вставки - Oracle (Массовая вставка) - PullRequest
2 голосов
/ 13 октября 2011

Я хочу, чтобы триггер запускался после каждой вставленной записи.

Эта проверка работает нормально, если у меня есть простая вставка, подобная этой:

insert into g_dossier values
               (112334, 'BBT', 'LPO','TTS','Y') ;

Однако, когда этокак массовая вставка, как это:

INSERT INTO g_piece(
                refpiece,
                typpiece,
                class_piece
                group_piece
                flag_piere)    
SELECT         :new.element_num,
                PROC_TYPE,
                DECODE( piece_it, 'F', 'FTTR', 'N', 'FTTR', NULL ),
                DECODE( piece_it, 'T', 'TTSN', 'N', 'TTSN', NULL ),
                'N'
FROM    t_elements
WHERE   :new.db_piece_flag = 'Y';

Триггер мутирует.Я хочу, чтобы проверка также работала, когда выполняется как массовая вставка.

Запрос, вызывающий эту проблему,

SELECT COUNT(*)
INTO existing_cmcl_cnt
FROM g_piece cmcl
WHERE cmcl.class_piece= :new.class_piece

Проблема заключается в том, что этот запрос вызывается в триггере, применяемом к тому жестол "г_шт".Когда я продолжаю простую вставку (вставка в значения g_piece (...)), у меня нет этой проблемы.

Как я могу избежать этой проблемы?Спасибо.

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Здесь вы должны изменить запрос и вставить результат SELECT ... FROM some join, не используя триггер вообще.Вы хотите, чтобы при вставке в таблицу X триггер также вставлял в ту же таблицу, что невозможно (это повторяется).

Если вы не можете изменить запрос, вам следует переименовать таблицу, создатьпредставление таблицы со старым именем и создание TRIGGER INSTEAD OF INSERT ON that view FOR EACH ROW, которое будет INSERT INTO into the real table результатом SELECT ... FROM some join.

0 голосов
/ 13 октября 2011

Если вы используете Oracle 11G, вы можете взглянуть на составные триггеры, чтобы избежать ошибки таблицы мутаций.Взгляните: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/triggers.htm#CIHEFGFD

...