Может ли триггер выполнить SELECT и увидеть новые значения в составном триггере в «после оператора»? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть таблица t1 с двумя столбцами t1c1 и t1c2, Если обновление выполняется для t1c1 или t1c2, мне нужно вычислить значение и обновить значение в другой таблице t2 (не используется во время расчета) Для этого расчета нужны некоторые таблицы, включая t1 (поскольку обновление t1c1 или t1c2 может изменить значение, они являются параметрами расчета, если вы предпочитаете ...) Проблема в том, что SELECT на t1 вызывает «ошибку таблицы мутаций», потому что t1 является «событием». Я могу использовать «PRAGMA AUTONOMOUS_TRANSACTION», но мне нужно «зафиксировать» в триггере, чтобы в случае отката он не откатывал мои операции триггера ... И обновленная строка не видна, что вызывает неправильный расчет ... Могу ли я использовать «составной триггер», добавить переменные данные, используемые «после каждой строки», и выполнить мои вычисления в «после оператора»? Могу ли я видеть обновления в «после утверждения» или только в том, что зафиксировано? Могу ли я не фиксировать в "после оператора" в случае модификации отката t1c1 или t1c2?

Большое спасибо и извините за мой английский ....

1 Ответ

0 голосов
/ 08 апреля 2019
  1. В триггере уровня оператора (то есть, который имеет «для каждой строки») добавьте информацию об уровне ключа в массив PL / SQL. Обычно я создаю пакет для хранения таких массивов PL / SQL с функциями, позволяющими легко добавлять строки и т. Д.

    1. Затем в «после оператора» (не в каждой строке) просмотрите массив PL / SQL и делайте все, что вы хотите - здесь никаких ограничений. Когда закончите, сбросьте массив PL / SQL, чтобы он был пуст для следующего использования.
...