oracle - SQLERRM被覆盖

标签 oracle plsql error-handling oracle10g

我正在使用SQLERRM。但是还有更多的程序并行运行,因此有时SQLERRM被其他程序覆盖。使用并行运行是指我同时运行过程a和过程b.SQLERRM是全局函数,这是我的问题。如果两个过程都抛出异常,则可能会发生,过程a修改过程b中的错误消息,过程b得到错误消息。
这些过程使用简单的构造:

BEGIN
--do something/cutted off
EXCEPTION
        WHEN OTHERS THEN
            write_log(SYSDATE, 'ERROR_1', SQLERRM);

END;

这些过程调用write_log,声明为
 CREATE OR REPLACE PROCEDURE WRITE_LOG
 (
        TS_START IN DATE DEFAULT SYSDATE,
        ERR_CODE IN VARCHAR DEFAULT NULL,
        ERR_DESC IN VARCHAR DEFAULT NULL
 ) 
 IS

 BEGIN
  INSERT INTO LOG
        ( LOG_TS_START, LOG_ERR_CODE, LOG_ERR_DESC)
    VALUES
        (TS_START, ERR_CODE, ERR_DESC);


   COMMIT;

END WRITE_LOG;

如何避免覆盖SQLERRM?正在写入日志,但错误消息是错误的。

最佳答案

首先,摆脱PL/SQL代码中的常见错误。

没有WHEN OTHERS THEN且没有任何理性逻辑的RAISE只是有用的东西,无非是一个bug。

删除所有exception blocks,然后重试。并且,遵循良好的编码习惯。

关于oracle - SQLERRM被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511456/

相关文章:

oracle - Oracle Forms/Reports Builder 的源代码控制

mysql - 如何使用 woocommerce 与 API 代替 Wordpress DB

oracle - ORA-00257:归档错误

plsql - 调用我的程序时的参数数量或类型错误

python - 如何创建 tkinter 错误消息框

javascript - 没有数据时显示消息

arrays - Oracle PL/SQL 中数组、循环的语法

oracle - 从存储过程中检索参数?

database - 自动创建数据库表的脚本

validation - 失败验证时设置Spark TextInput背景