Как работают транзакции в хранимых процедурах Oracle? Существует ли неявная транзакция?

Как написать транзакцию в хранимой процедуре Oracle? Нужно ли это делать явно или Oracle автоматически блокирует строки?

2 ответов


вы, возможно, захотите, чтобы просмотреть руководство по концепции, в частности глава о сделки:

транзакция-это логическая единица работы, которая содержит одну или несколько инструкций SQL, выполняемых одним пользователем. [...] Транзакция начинается с первой исполняемой инструкции SQL пользователя. Транзакция завершается, когда она явно зафиксирована или откатывается этим пользователем.

вам не нужно явно начинать транзакцию, это делается автоматически. Вам нужно будет указать конец транзакции с фиксацией (или откатом).

механизм блокировки является фундаментальной частью БД, читайте об этом в главе параллелизм и согласованность данных.


в отношении хранимых процедур

хранимая процедура-это набор операторов, они выполняются в той же транзакции, что и вызывающий сеанс (*). Как правило, управление транзакциями (commit и rollback) принадлежит вызывающему приложению. Вызывающее приложение имеет более широкое представление о процессе (который может включать несколько хранимых процедур) и поэтому лучше определяет, находятся ли данные в согласованном состоянии. Хотя вы можете зафиксировать в хранимой процедуре, это не является нормой.

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


@AdamStevenson относительно DDL, есть цитата из руководства концепции:

Если текущая транзакция содержит любые операторы DML, первые коммиты Oracle этот транзакция, а затем запускает и фиксирует инструкцию DDL как новую, одиночный операция выписки.

поэтому, если вы начали транзакцию до инструкции DDL (например, написали инструкции INSERT, UPDATE, DELETE, MERGE), транзакция будет запущена неявно commited - вы всегда должны иметь это в виду при обработке операторов DML.

Я согласен с Винсентом Мальграт, вы можете найти очень полезную информацию об обработке транзакций в руководстве концепции.