目前主程序的大部分存储过程都是使用ZL_ErrorCenter来处理程序异常,但是ZL_ErrorCenter的主要功能是用于对ZLHIS主程序的部分错误的异常进行友好的界面提示,并且对于异常的种类处理较少,对于未处理的异常提示反而不够详细。 在业务交互平台等三方接口的运行和调试过程中,虽然本身业务交互平台有日志记录,但是查询和定位问题并不是很方便,因此考虑自定义错误日志处理过程来处理。 处理过程及脚本: 1)日志表 -- Create table
create table zlcd_错误日志
(
程序名称 varchar2(500),
错误信息 varchar2(1000),
入参 varchar2(2000),
时间 date,
用户 varchar2(100)
)
;
-- Create/Recreate indexes
create index ix_错如日志_时间 on zlcd_错误日志 (时间);
---同义词
create public synonym zlcd_错误日志 for zlhis.zlcd_错误日志;
--授权
grant all on zlcd_错误日志 to public;
2)存储过程 CREATE OR REPLACE PROCEDURE
record_err_log(程序名称_in varchar2,
错误信息_in varchar2,
入参_in varchar2
) is
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert into zlcd_错误日志
(程序名称,
错误信息,
入参,
时间,
用户
)
values
(程序名称_in,
错误信息_in,
入参_in,
sysdate,
user);
commit;
END record_err_log;
---同义词
create public synonym record_err_log for zlhis.record_err_log;
--授权
grant execute on record_err_log to public;
3)使用示例 create or replace procedure yuchen_testerro as
n_count number:=0;
begin
select 病人id into n_count from 病人信息 where 姓名='张三' or 姓名='李四';
exception
When Others Then
----记录日志
record_err_log('yuchen_testerro',dbms_utility.format_error_backtrace||'**'||SQLCODE||'**'||SQLERRM,'');
--抛出异常
Raise_application_error(-20999,dbms_utility.format_error_backtrace||'**'||SQLCODE||'**'||SQLERRM);
end yuchen_testerro;
4)效果图 查询日志表如下: |