При использовании журнала ошибок DML в Oracle, если недопустимый формат даты указан в функции TO_DATE, весь оператор вставки/выбора будет терпеть неудачу, вместо того, чтобы регистрировать ошибку формата даты за неудачную строку. Я попытался обойти это, написав специальную функцию, которая ловит ошибки TO_DATE и поднимает мою собственную ошибку. IE:Регистрация ошибок Oracle DML с пользовательской функцией
create or replace FUNCTION FN_GETDATE (pDATE VARCHAR2, pFORMATSTRING VARCHAR2) RETURN DAT
IS
pDATEEXCEPTION EXCEPTION;
BEGIN
RETURN TO_DATE(pDATE, pFORMATSTRING);
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20002, 'FN_GETDATE: Invalid date.');
END;
Это перехватывает исключение успешно, однако первоначальное значение столбца передается в параметр бновить не будет регистрироваться в таблице пользовательских ошибок. Как я могу получить настраиваемую функцию для регистрации «исходного плохого значения» в таблице журналов ошибок DML?
IE: если столбец, ожидающий даты, был передан со значением «abc», мне бы хотелось увидеть «abc» в таблице ошибок журнала, а не нулевое значение.
Почему вы не можете просто добавить значение к исключению, например, 'RAISE_APPLICATION_ERROR (-20002, 'FN_AIS_DCC_GETDATE: Недействительная дата"' || pDATE || '"');' –
@JeffreyKemp - это полностью сошло с ума. Спасибо за указание на это. Я исправил имя функции в строке вызова RAISE. Не могли бы вы обновить его в своем комментарии, а также опубликовать это как ответ, и я соглашусь? – mservidio