Порядок выполнения триггеров на массовых вставках - PullRequest
0 голосов
/ 13 декабря 2018

Предположим, мы вставляем 1000 (от 1 до 1000) строк в одном операторе в одну таблицу.

В таблице есть одна до и одна после триггера.

Каков порядок обработкиэти строки?

В этот момент я полагаю:

  1. Перед выполнением триггера для 1-й строки
  2. Вставьте 1-ю строку
  3. Перед выполнением триггера для2-й ряд
  4. вставить 2-й ряд
    ......

Затем в конце триггеры после будут вызываться в неопределенном порядке.

Я прав?Где я могу найти доказательства моих предположений?

1 Ответ

0 голосов
/ 13 декабря 2018

Это зависит от того, является ли ваш триггер после вставки триггерами уровня строки или триггерами уровня оператора.Триггеры операторов запускаются один раз после каждого оператора

... FOR EACH STATEMENT EXECUTE PROCEDURE xyz();

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

... FOR EACH ROW EXECUTE PROCEDURE xyz();

...