Oracle存储过程日志文件

时间:2016-05-11 06:43:42

标签: oracle procedure logfile

我有一个oracle过程,它选择数据并插入到另一个表中。贝娄是代码。

1  2  3  5
|  |  |  |
30 15 10 6

我想知道如何将事件输出到表中。如过程开始时间戳,过程结束时间戳和在一个例外的错误消息。因此日志表中会有两列,如Date和Message。有什么建议?

2 个答案:

答案 0 :(得分:0)

create or replace procedure my_log (action in varchar2, message in varchar2 )
is

begin
  Insert into my_log_table (ACTION, MESSAGE, EVENT_DATE)
  values (action, message, sysdate);
  commit;
end;
/
CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" ()
IS   
   err_num NUMBER;
   err_msg VARCHAR2(4000);
BEGIN
    my_log ('Start','My message');
  INSERT INTO NDB_AML_CUSTOMER 
(ID, TITLE,...)
  SELECT ID, TITLE,... 
FROM NDB_CUSTOMER_NEW
WHERE DATE_TIME > (SELECT RUN_DATE FROM CHECK_POINT WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW');

  UPDATE CHECK_POINT SET RUN_DATE = SYSDATE WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW';

  COMMIT;
  my_log ('End','My message');
  EXCEPTION
  WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SQLERRM;
my_log ('Error' , errnum ||' - ' || err_msg);
 END;
/

答案 1 :(得分:0)

根据other answer的建议,更容易登录到表,但不是编写自己的日志记录程序,而是使用经过充分记录和测试的LOGGER

以下是文档中的示例:

begin
  logger.log('This is a debug message. (level = DEBUG)');
  logger.log_information('This is an informational message. (level = INFORMATION)');
  logger.log_warning('This is a warning message. (level = WARNING)');
  logger.log_error('This is an error message (level = ERROR)');
  logger.log_permanent('This is a permanent message, good for upgrades and milestones. (level = PERMANENT)');
end;
/

select id, logger_level, text
from logger_logs_5_min
order by id;

  ID LOGGER_LEVEL TEXT
---- ------------ ------------------------------------------------------------------------------------------
  10       16     This is a debug message. (level = DEBUG)
  11        8     This is an informational message. (level = INFORMATION)
  12        4     This is a warning message. (level = WARNING)
  13        2     This is an error message (level = ERROR)
  14        1     This is a permanent message, good for upgrades and milestones. (level = PERMANENT)