Как работают транзакции в хранимых процедурах Oracle? Существует ли неявная транзакция?
Как написать транзакцию в хранимой процедуре Oracle? Нужно ли это делать явно или Oracle автоматически блокирует строки?
2 ответов
вы, возможно, захотите, чтобы просмотреть руководство по концепции, в частности глава о сделки:
транзакция-это логическая единица работы, которая содержит одну или несколько инструкций SQL, выполняемых одним пользователем. [...] Транзакция начинается с первой исполняемой инструкции SQL пользователя. Транзакция завершается, когда она явно зафиксирована или откатывается этим пользователем.
вам не нужно явно начинать транзакцию, это делается автоматически. Вам нужно будет указать конец транзакции с фиксацией (или откатом).
механизм блокировки является фундаментальной частью БД, читайте об этом в главе параллелизм и согласованность данных.
в отношении хранимых процедур
хранимая процедура-это набор операторов, они выполняются в той же транзакции, что и вызывающий сеанс (*). Как правило, управление транзакциями (commit и rollback) принадлежит вызывающему приложению. Вызывающее приложение имеет более широкое представление о процессе (который может включать несколько хранимых процедур) и поэтому лучше определяет, находятся ли данные в согласованном состоянии. Хотя вы можете зафиксировать в хранимой процедуре, это не является нормой.
(*) за исключением случаев, когда процедура объявлена как автономная транзакция, в этом случае процедура выполняется как независимый сеанс (спасибо здесь, теперь я вижу ваша точка).
@AdamStevenson относительно DDL, есть цитата из руководства концепции:
Если текущая транзакция содержит любые операторы DML, первые коммиты Oracle этот транзакция, а затем запускает и фиксирует инструкцию DDL как новую, одиночный операция выписки.
поэтому, если вы начали транзакцию до инструкции DDL (например, написали инструкции INSERT, UPDATE, DELETE, MERGE), транзакция будет запущена неявно commited - вы всегда должны иметь это в виду при обработке операторов DML.
Я согласен с Винсентом Мальграт, вы можете найти очень полезную информацию об обработке транзакций в руководстве концепции.