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

使用自定义函数记录Oracle DML错误,oracle,oracle11g,dml,Oracle,Oracle11g,Dml,在Oracle中使用DML错误日志记录时,如果在TO_date函数中指定了无效的日期格式,则整个insert/select语句将失败,而不是按错误行记录日期格式错误。我试图通过编写一个捕获最新错误的自定义函数,并提出我自己的错误来解决这个问题。即: create or replace FUNCTION FN_GETDATE (pDATE VARCHAR2, pFORMATSTRING VARCHAR2) RETURN DAT IS pDATEEXCEPTION EXCEPTION; BE

在Oracle中使用DML错误日志记录时,如果在TO_date函数中指定了无效的日期格式,则整个insert/select语句将失败,而不是按错误行记录日期格式错误。我试图通过编写一个捕获最新错误的自定义函数,并提出我自己的错误来解决这个问题。即:

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”,而不是空值。

如果记录的是错误消息,则将其附加到错误消息中,例如:

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

为什么不能将值附加到异常,例如,
RAISE_APPLICATION_ERROR(-20002,'FN_AIS_DCC_GETDATE:Invalid date“'| | pDATE |””)@JeffreyKemp-我完全忘记了。谢谢你指出这一点。我更正了RAISE调用字符串中的函数名。你能在你的评论中更新它吗,并把它作为答案发布,我会接受的?