Как проверить, была ли установлена ​​точка сохранения перед выполнением отката?

У меня есть пакет Oracle, который просматривает список процедур и вызывает их динамически. Перед каждым вызовом процедуры создается SAVEPOINT, и, если возникает исключение, он выполняет откат и регистрирует проблему. Недавно была введена ошибка, когда к одной из динамических процедур был добавлен COMMIT, который при запуске отменяет действие SAVEPOINT. Если эта же процедура завершается ошибкой (вызывает исключение) и обработчик исключений вызывающего пакета пытается выполнить откат, в блоке обработчика исключений возникает следующее исключение:

ORA-01086: savepoint 'EXAMPLE_SAVEPOINT' never established in this session or is invalid

Теперь я мог бы добавить другой обработчик исключений в свой обработчик исключений, чтобы обработать это конкретное исключение, но было бы гораздо лучше, если бы я мог сделать быструю проверку SAVEPOINT, чтобы убедиться, что она действительна или нет непосредственно перед попыткой выдачи откатить. Это возможно?

1 ответ

Решение

Я думаю, тебе придется забыть об этом; извиняюсь. Кто-то задал этот вопрос Тому Кайту в апреле 2013 года, его ответ:

2) где oracle отслеживает создаваемую нами точку сохранения? И создается ли SCN для созданных точек сохранения?

и мы сказали...

...

2) точка сохранения - это просто концептуально указатель на ваш поток отмены. Нам не нужен SCN для этого, нам просто нужно знать, как далеко назад в вашем потоке отмены откатиться.

И Джонатан Льюис, и Берлесон не думают, что они хранятся где-либо в словаре данных. Если вы используете Workspace Manager или хотите использовать точки восстановления, тогда данные будут сохранены в ALL_WM_MODIFIED_TABLES и V$RESTORE_POINT соответственно, но это выглядит как перебор.

Другие вопросы по тегам