【问题标题】:How to create error log for stored procedure in oracle 10g?如何在 oracle 10g 中为存储过程创建错误日志?
【发布时间】:2011-05-09 11:42:58
【问题描述】:

我需要一个在 oracle 中为存储过程创建错误日志文件的示例。 请给我一个创建表、创建存储过程和创建错误日志的例子。

提前致谢

编辑(其他问题的相关信息)

假设有一个存储过程。当我执行该存储过程时,可能会发生一些预期的错误/异常,因此我需要创建一个错误日志表,每当我执行该存储过程时,所有错误都会自动存储在其中。

例如,如果某列不允许空值,但用户输入空值,则应生成该错误并将其存储在错误日志表中。

【问题讨论】:

标签: oracle stored-procedures logging oracle10g


【解决方案1】:

您并没有真正详细说明您的要求。这是一个简单的错误日志表和将错误消息记录到其中的过程:

CREATE TABLE error_log (ts TIMESTAMP NOT NULL, msg VARCHAR2(4000));

CREATE PROCEDURE log_error (msg IN VARCHAR2) IS
BEGIN
  INSERT INTO error_log (ts, msg)
  VALUES (SYSTIMESTAMP, SUBSTR(insert_log.msg, 1, 4000));
END log_error;

您可能需要也可能不需要它来成为一个自治事务。这取决于您是否希望日志记录回滚更改的过程中的错误。

通常,这将在更通用的日志系统中实现,该系统不仅会记录错误,还会记录警告和调试信息。

如果您希望 DML 语句 (insert/update/delete) 为每一行记录一个错误(而不是只在第一行出错),您可以使用 LOG ERRORS 子句 - 而不是语句失败,该语句将成功,并且未插入/更新/删除的行将连同适用的错误代码和错误消息一起写入您指定的错误日志表。请参考 vettipayyan 提供的链接。

如果您希望记录过程中引发的所有异常,可以使用 WHEN OTHERS 捕获它们:

BEGIN
  -- your code here
EXCEPTION
  WHEN OTHERS THEN
    log_error(DBMS_UTILITY.format_error_stack);
    log_error(DBMS_UTILITY.format_error_backtrace);
    RAISE;
END;

【讨论】:

  • +1,基本上我一次又一次地做同样的事情。一定要看看自治事务——很多时候你想要日志条目,特别是当你遇到一个回滚所有内容的错误时!
【解决方案2】:

这是包含代码示例的页面:
DML ErrorLogging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多