Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle存储过程日志文件_Oracle_Procedure_Logfile - Fatal编程技术网

Oracle存储过程日志文件

Oracle存储过程日志文件,oracle,procedure,logfile,Oracle,Procedure,Logfile,我有一个oracle过程,它选择数据并插入到另一个表中。下面是代码 CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" ( IS BEGIN INSERT INTO NDB_AML_CUSTOMER (ID, TITLE,...) SELECT ID, TITLE,... FROM NDB_CUSTOMER_NEW WHERE DATE_TIME > (SELECT RUN_DATE FR

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

CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" (
     IS   
BEGIN
  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;
END;
/

我想知道如何将事件输出到表中。与进程开始时间戳、进程结束时间戳类似&在异常情况下是什么错误消息。因此,日志表中将有两列,如Date和Message。有什么建议吗

按照中的建议,登录到一个表要容易得多,但是,与其编写自己的日志记录过程,不如使用经过良好记录和测试的日志记录过程

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;
/
以下是一个来自文档的示例:

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)

您希望日志包含什么内容?您希望每次执行时都有一个新文件,还是一个累积日志?您将如何运行该过程,以及您希望在服务器或您的客户机上运行该日志?如果它用于服务器端,那么您可以使用utl_文件。用谷歌这个词,你会得到足够的信息@Alex Poole我很想知道如何在客户机上生成过程日志?无法将DBMS_输出重定向到文件。Oracle没有内置(应用程序)日志记录。因此,如果您想这样做,您需要编写自己的实现,或者,如果您愿意记录到一个表而不是一个文件,请在@PravinSatav-spool下,编写脚本输出重定向。。。不要说这是明智的或安全的,即使程序总是被期望以某种方式调用——只是试图弄清楚OP的目的是什么。目前还不确定他们想记录什么。@Alex Poole-谢谢你提供的信息。我知道怎么做了…创建或替换过程“CUSTOMER\u INCREMENTAL”(右括号在哪里?过程不会编译。我的\u日志上应该有一个自治提交指令