Предположим, у меня есть функция PL / SQL, которая выбирает одно значение из таблицы. Если запрос не возвращает записей, я хочу, чтобы ошибка NO_DATA_FOUND
распространялась (чтобы вызывающий код мог ее перехватить), но с более значимым сообщением об ошибке при вызове SQLERRM
.
Вот пример того, чего я пытаюсь достичь:
FUNCTION fetch_customer_id(customer_name VARCHAR2) RETURN NUMBER;
customer_id NUMBER;
BEGIN
SELECT customer_id
INTO customer_id
FROM CUSTOMERS
WHERE customer_name = fetch_customer_id.customer_name;
RETURN customer_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
meaningful_error_message := 'Customer named ' || customer_name || ' does not exist';
RAISE;
END;
Есть ли способ связать meaningful_error_message
с ошибкой NO_DATA_FOUND
?
Обновление: Было предложено использовать RAISE_APPLICATION_ERROR
, чтобы вызвать пользовательский код ошибки при обнаружении NO_DATA_FOUND
. Цель этого вопроса состояла в том, чтобы определить, можно ли избежать этого метода, чтобы вызывающий код мог перехватывать NO_DATA_FOUND
ошибок, а не пользовательский код ошибки. Поймать NO_DATA_FOUND
кажется более семантически правильным, но я могу ошибаться.