gpt4 book ai didi

oracle - oracle中记录行号

转载 作者:行者123 更新时间:2023-12-02 09:51:41 24 4
gpt4 key购买 nike

我目前正在记录程序中的错误。此过程的目标是在数据库中其他包的异常处理程序中调用并记录每个程序遇到的错误。下面是我的代码。

CREATE OR REPLACE PROCEDURE APMS.test_procedure AS

procedure write_error_log (errcode number, errstr varchar2) is
pragma autonomous_transaction;
-- this procedure stays in its own new private transaction
begin
INSERT INTO error_log
(ora_err_tmsp,
ora_err_number,
ora_err_msg,
ora_err_line_no)
values (CURRENT_TIMESTAMP,
errcode,
errstr,
'line number');
COMMIT; -- this commit does not interfere with the caller's transaction.
end write_error_log;

BEGIN
INSERT INTO mockdata
VALUES ('data1', 'mockname', 'mockcity');

exception when others then
write_error_log(sqlcode,sqlerrm);
raise;
END test_procedure;
/

我目前只是在我的mock_data 表中引入一个错误,以将错误记录在error_log 表中,并查看其功能是否正常,我只是不知道如何记录行号列。我是一个完全的初学者,所以任何帮助将不胜感激。另外,如果有人知道我如何能够在其他包/过程中使用此过程来记录其他包中的错误,那也很棒。我来这里是为了学习,所以任何反馈都值得赞赏,如果我不清楚,我可以进一步扩展这篇文章。

最佳答案

尝试使用DBMS_UTILITY.FORMAT_ERROR_BACKTRACE。您可以看看here了解更多信息。

这样的东西应该可以使您的代码正常工作:

CREATE OR REPLACE PROCEDURE APMS.test_procedure AS

procedure write_error_log (errcode number, errstr varchar2,errline varchar2) is
pragma autonomous_transaction;
-- this procedure stays in its own new private transaction
begin
INSERT INTO error_log
(ora_err_tmsp,
ora_err_number,
ora_err_msg,
ora_err_line_no)
values (CURRENT_TIMESTAMP,
errcode,
errstr,
errline);
COMMIT; -- this commit does not interfere with the caller's transaction.
end write_error_log;

BEGIN
INSERT INTO mockdata
VALUES ('data1', 'mockname', 'mockcity');

exception when others then
write_error_log(sqlcode,sqlerrm,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
raise;
END test_procedure;

关于oracle - oracle中记录行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32567620/

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