2014-11-19 1 views
1

При использовании журнала ошибок 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» в таблице ошибок журнала, а не нулевое значение.

+1

Почему вы не можете просто добавить значение к исключению, например, 'RAISE_APPLICATION_ERROR (-20002, 'FN_AIS_DCC_GETDATE: Недействительная дата"' || pDATE || '"');' –

+0

@JeffreyKemp - это полностью сошло с ума. Спасибо за указание на это. Я исправил имя функции в строке вызова RAISE. Не могли бы вы обновить его в своем комментарии, а также опубликовать это как ответ, и я соглашусь? – mservidio

ответ

3

Append его к сообщению об ошибке, если это то, что в журнале, например .:

RAISE_APPLICATION_ERROR(-20002, 'FN_GETDATE: Invalid date "' || pDATE || '"');