Требуется ли фиксация в хранимой процедуре Oracle, которая вызывается из класса Java? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть хранимая процедура Oracle, которая выполняет некоторые вставки и обновления таблицы в БД.В конце процедуры нет явного оператора Commit или Rollback.Однако, когда я вызываю этот SP через класс Java, я вижу, что вставки и обновления фиксируются в БД.

Так что кто-нибудь может помочь мне понять, действительно ли нам нужен оператор commit в конце хранимогопроцедура в Oracle?

1 Ответ

0 голосов
/ 26 сентября 2019

Я не знаком с Java, но насколько я знаю, когда вы закрываете соединение с базой данных, данные фиксируются (если только вы не откатываете их).Теперь вернемся к вопросу о том, когда использовать коммит в SP.

Когда вы используете операцию DML (вставка, обновление, удаление) в процедуре над таблицей, таблица будет Locked, поэтому, если она есть,другой пользователь пытается получить доступ к заблокированной таблице, он должен подождать, пока вы не подтвердите или не откатите свою операцию.поэтому, если ваша процедура занимала время, из-за длинного цикла или плохо оптимизированного запроса, пользователь будет заблокирован.Так что, если у вас был коммит до DMl, блоки no будут происходить.

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

такой короткий ответ, если ваша процедура не имеет большого количества операций с большими таблицами, и она быстро, то выможет пройти мимо коммита, иначе лучше добавить коммиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...