gpt4 book ai didi

oracle - oracle plsql 的分步进度日志记录

转载 作者:行者123 更新时间:2023-12-03 23:18:17 25 4
gpt4 key购买 nike

我有一个带有 ID、严重级别、消息、日志日期和时间的 message_log 表。

我正在使用以下过程将日志消息插入到我的 PL/SQL 脚本中的日志表中。

add_log(ID,'START','DEBUG','No CDR Detail to be processed', sysdate);    

但是在失败的情况下,我看到一些消息没有被记录。记录 plsql 进度的逐步进度的最佳方法是什么(如果需要,直到故障点)?
create or replace procedure add_log 
(stp varchar2, code varchar2, log_message varchar2, logdat date)
is

begin

insert into message_log
(SEQ,PROC_STEP,
CODE,
LOG_MESSAGE,
LOG_DATE
)
values
(log_SEQ.NEXTVAL,stp,code,log_message,logdat)
;

end;

最佳答案

"in case of failure I don't see some message are getting logged. What is the best method to log step by step progress of a plsql progress (until failure point if needed)."


您的 ADD_LOG() 过程不包括 commit - 大概你依靠更广泛的事务来保存日志记录。问题是,如果更广泛的事务失败,它会回滚并带走您的日志消息。
这是自治事务 pragma 的少数合法用途之一。这会创建一个隔离的事务(就像嵌套 session 一样),因此我们可以在不影响外部事务的情况下提交。
create or replace procedure add_log (stp varchar2, code varchar2, log_message varchar2, logdat date)
is
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into message_log
(SEQ,PROC_STEP,
CODE,
LOG_MESSAGE,
LOG_DATE
)
values
(log_SEQ.NEXTVAL,stp,code,log_message,logdat)
;
COMMIT;
end;
如果您对 ADD_LOG() 进行此更改,则无论调用事务发生什么情况,您的所有消息都将被提交。

关于oracle - oracle plsql 的分步进度日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44281010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com