У меня есть процедура PL/SQL (в базе данных Oracle 12c), которая пытается вставить некоторые данные. Если это не удается, он должен проверить таблицу, чтобы узнать, может ли она найти какую-либо информацию там, чтобы помочь решить проблему. Если он найдет информацию, все будет в порядке, если не регрессирует ошибка.Сохранение исключения PL/SQL и повышение его позже?
Это мой код:
BEGIN
-- Try to insert some data.
INSERT INTO table VALUES x;
EXCEPTION
WHEN OTHERS THEN
BEGIN
-- Check a table to fins some info to help solve the problem.
-- If we find a row here, we can fix it.
-- If not, we should reraise the error.
SELECT * INTO y FROM table WHERE a = b;
-- Do some more stuff here to fix the problem.
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- We could not find anything in the table,
-- so we could not handle the situation.
-- Reraise the error.
RAISE;
END;
END;
Проблема здесь состоит в том, что RAISE;
оператор поднимает последнее исключение, которое является NO_DATA_FOUND
, что SELECT
заявления бросило. Исходное исключение из INSERT
находится далее в стеке, но не вверху.
Могу ли я как-то «сохранить» ошибку с INSERT
и сделать ререйз? Или я могу запустить SELECT INTO
, который не выдает ошибку, если ничего не находит? Моя цель здесь - сделать ререйз оригинального исключения INSERT
без каких-либо следов исключения NO_DATA_FOUND
.
EDIT: Просмотреть комментарии, почему это не дубликат.
Что может пойти не так, во вставке и как вы можете исправить это впоследствии. Не можете ли вы проверить, прежде чем он пойдет не так? – Rene
Я попытался избежать большого контекста в вопросе, чтобы сосредоточиться на проблеме. Я хочу сделать несколько журналов, когда некоторые ограничения внешнего ключа будут нарушены, и создаст пользовательские сообщения об ошибках, если это произойдет. Пользовательские сообщения об ошибках поступают из таблицы, и я выполняю поиск по нарушению внешнего ключа, который был нарушен. – Anders
Возможный дубликат [Как переподнять исключение pl/sql в блоке обработки исключений?] (Http://stackoverflow.com/questions/14978431/how-to-re-raise-pl-sql-exception-in-exception -handling-block) – Stawros