使用自定义函数进行Oracle DML错误记录

时间:2014-11-19 00:46:02

标签: oracle oracle11g dml

在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'在日志错误表中,而不是空值。

1 个答案:

答案 0 :(得分:3)

将其附加到错误消息中,如果这是正在记录的内容,例如:

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