массовая загрузка и запуск - PullRequest
2 голосов
/ 06 сентября 2010

Несколько вопросов для групповой привязки и триггера (Oracle 10g)

1) Будет ли запускаться триггер уровня строки в случае массового связывания?
2) Если да, то есть ли возможность отменить выполнение только для массового связывания?
3) Если нет, то есть ли способ выполнить триггер уровня строки в массовом связывании?
4) Будет ли снижаться производительность в случае выполнения триггера уровня строки для массового связывания?

Ответы [ 2 ]

3 голосов
/ 06 сентября 2010

Триггеры по-прежнему включены и срабатывают при выполнении массовых вставок. Вы не можете ничего сделать, чтобы остановить это, но, конечно, вы можете поместить свою собственную логику в триггер и код, который выполняет массовую вставку, следующим образом ...

В спецификации упаковки:

create or replace package my_packags is

    in_bulk_mode boolean default false;

    ... -- rest of package spec
end;

В триггере:

begin
    if NOT my_package.in_bulk_mode then
        -- do the trigger stuff
    end if;
end;

В телефонном коде:

my_package.in_bulk_mode := true;
-- do the bulk insert
my_package.in_bulk_mode := false;
1 голос
/ 06 сентября 2010

Триггеры выполняются в механизме SQL.Массовая привязка влияет на способ, которым вызывающий язык (pl / sql или любой язык OCI) вызывает механизм SQL, уменьшая количество вызовов / операторов, но не должен обходить никакие триггеры.

(Представьте, что у вас естьиспользовал триггер для добавления проверки, ведения журнала или другого ограничения в базу данных, но стороннее приложение могло бы обойти его просто с помощью массовой операции - это послужило бы рецептом для проблем с повреждением данных и безопасностью).

Ваш триггер уровня оператора должен срабатывать один раз.

Вы можете «отключить» свой триггер, заставив его проверить переменную сеанса в памяти, прежде чем делать что-либо еще, и явно установив его перед массовой операцией.

Триггеры уровня строки все равно будут срабатыватьдля каждой строки, что может оказать гораздо большее влияние.

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