在Oracle中使用DML错误日志记录时,如果在TO_DATE函数中指定了无效的日期格式,则整个insert / select语句将失败,而不是记录每个错误行的日期格式错误。我尝试通过编写捕获TO_DATE错误的自定义函数来解决此问题,并提出自己的错误。 IE:
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;
这会成功捕获异常,但是传递到pDATE参数的原始列值不会记录在自定义错误表中。如何获得自定义函数来记录原始的错误值"进入DML错误日志表?
IE:如果一个期望日期的列传入了一个值' abc',我希望看到' abc'在日志错误表中,而不是空值。
答案 0 :(得分:3)
将其附加到错误消息中,如果这是正在记录的内容,例如:
RAISE_APPLICATION_ERROR(-20002, 'FN_GETDATE: Invalid date "' || pDATE || '"');