Что подразумевается под PRAGMA AUTONOMOUS_TRANSACTION? - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужна ясность о прагме автономной транзакции. Я использовал запрос выбора перекрытия в триггере и вставить запрос в процедуру. Если я импортирую две записи в одном файле, вторая запись будет такой же, как и первая, поэтому вторая запись должна отображаться как ошибка перекрытия. Теперь выполняется запрос select в триггере, но ошибка не генерируется с помощью автономной транзакции pragma.

1 Ответ

0 голосов
/ 19 ноября 2018

AUTONMOUS_TRANSACTION является вложенной транзакцией.Он выполняет DML независимо от вызывающей транзакции.Таким образом, запрос, выданный в автономной транзакции, не увидит никаких незафиксированных изменений во внешней транзакции.Вот почему вы не видите своего сообщения об ошибке: недопустимое состояние существует только в незафиксированных изменениях транзакции.

Очевидно, что вы используете AUTONMOUS_TRANSACTION, чтобы избежать ошибки в таблице мутаций.Однако лучшим решением будет использование триггера COMPOUND DML: используйте FOR EACH ROW для хранения изменений в массиве, а затем проверьте их на отсутствие перекрытий на этапе оператора AFTER. Узнайте больше .

...