create or replace procedure p_di_fs_log
(
is_task_name in varchar2,
is_table_name in varchar2,
is_task_sign in varchar2,
ii_task_status in integer,
is_task_log in varchar2,
oi_task_id in out integer
)
is
-- ********************************************************************************
-- 程序名称: di_source.fs_log
-- 功能描述: di_source层程序运行日志记录
-- 输入参数: is_task_name - 任务名称
-- is_table_name - 操作表名
-- is_task_sign - 任务标记, 任务统计日期或统计月份
-- ii_task_status - 任务状态, 1 程序运行中, 2 程序正常完成, 3 程序运行出错
-- is_task_log - 任务日志, 正常时为[程序运行中]或[程序运行完成],
-- 出错时为[出错信息]
-- oi_task_id - 任务ID, 状态为2和3时做输入参数
-- 输出参数: oi_task_id - 任务ID, 状态为1时做输出参数
-- 输入资源:
-- 输出资源: di_source.zh_d_ts_log
-- 中间资源:
-- ********************************************************************************
vs_err_msg varchar2(255); -- 保存出错信息
begin
if ii_task_status = 1 then
-- 新任务则新建程序运行日志
select di_source.SEQ_log_ID.nextval into oi_task_id from dual;
insert into di_source.zh_d_ts_log
(
task_id, -- 任务ID
task_name, -- 任务名称
table_name, -- 操作表名
task_sign, -- 任务标记
start_time, -- 任务开始时间
end_time, -- 任务结束时间或任务出错时间
task_status, -- 任务状态
task_log -- 任务日志
)
values
(
oi_task_id,
is_task_name,
is_table_name,
is_task_sign,
sysdate,
null,
'1',
'程序运行中'
);
elsif ii_task_status = 2 then
-- 任务正常完成则利用原任务ID记录程序结束时间
update di_source.zh_d_ts_log
set end_time = sysdate,
task_status = '2',
task_log = '程序正常完成'
where task_id = oi_task_id;
else
-- 任务出错则利用原任务ID记录程序出错时间和出错信息
update di_source.zh_d_ts_log
set end_time = sysdate,
task_status = '3',
task_log = substr(is_task_log, 1, 200)
where task_id = oi_task_id;
end if;
commit;
-- 成功返回
return;
exception
-- 出错处理
when others then
-- 得到出错信息
vs_err_msg := substr(sqlerrm, 1, 200);
-- 回滚事务
rollback;
-- 输出出错信息
dbms_output.put_line('di_source.fs_log: ' || vs_err_msg);
-- 出错返回
return ;
end;
代码如上,大家帮我看看如何修改才能捕获出错信息.
