Доступны ли изменения данных в ходе выполнения транзакции в Oracle?
СУБД Oracle.
В ходе выполнения транзакции происходит вставка (INSERT) или обновление (UPDATE) данных в одной таблице. В той же транзакции вызывается хранимая процедура, использующая для получения результата эту же таблицу.
Правильно ли я понимаю, что в используемом по умолчанию Oracle уровне изоляции READ COMMITED изменения, сделанные в ходе транзакции, не видны при чтении в рамках этой же транзакции? То есть моя хранимая процедура не видит данных вставленных или обновленных ранее в ходе транзакции?
Какой уровень изоляции нужно выставить, чтобы чтение увидело изменения, сделанные в ходе транзакции?
Неправильно понимаете. В рамках одной сессии вы видите все незакомиченные изменения сделанные в этой сессии. Если ваша хранимая процедура не автономная, то все она увидит. Да и проверить это легко. Что вам мешает создать таблицу, вставить туда строку, а потом вызвать хранимую процедуру, которая что-то попытается сделать с этой строкой.
Это транзакция в транзакции. Используется, когда надо что-то сделать независимо от того будет ли основная транзакция зафиксирована или будет откат. В документации обо всем этом хорошо написано. Автономные транзакции: docs.oracle.com/cd/E11882_01/server.112/e40540/tra...
@Geny про другие транзакции понятно, но вот я где-то читал, что Oracle фиксирует данные перед началом транзакции и использует их для чтения в рамках транзакции, а все изменения сделанные откладывает отдельно и они становятся видны только после коммита. Хочу узнать опыт других людей в этом вопросе.