Oracle学习笔记:用于记录调度日志的存储过程
一、背景
在复杂的跑数过程中,往往需要执行比较多的步骤,并且跑数时间较长,可以利用存储过程配合linux下的 crontab
定时任务配置执行,但有时候发生故障,跑数异常的情况下,需要进行检查。
因此有必要对跑数过程日志进行一个记录,结合今天学习到的序列(sequence)自增长,可以实践一下。
二、准备工作
1.创建序列
-- 创建序列
create sequence seq_id_cwh increment by 1 start with 1;
-- 查询
select seq_id_cwh.currval, seq_id_cwh.nextval from dual;
2.创建日志记录表
-- 创建日志表
create table temp_cwh_seq_test
(
seq_log_id number(15), -- 自增长序列
run_name varchar2(500), -- 调度名称、存储过程名称
run_param varchar2(100), -- 运行参数,例如:统计时间等
run_time date, -- 跑数时间
run_flag number, -- 运行状态,0为正常,其他为异常
run_log varchar2(4000) -- 具体运行日志信息
)
3.查看数据库对象
-- 查看数据库对象
select * from user_objects;
/*
TEMP_CWH_SEQ_TEST 74925 TABLE
SEQ_ID_CWH 74924 SEQUENCE
PRO_CWH_TEST 74926 PROCEDURE
*/
三、创建存储过程
在建立好序列,用于记录日志的中间表之后,便可创建记录日志的存储过程,脚本为:
-- 创建存储过程
create or replace procedure pro_cwh_test(
is_run_name varchar2,
is_run_param varchar2,
is_run_flag number,
is_run_log varchar2
)
is
vcSeq_log_id number;
vcRun_log varchar2(4000); -- 4000最长 不能5000
begin
select seq_id_cwh.nextval into vcSeq_log_id from dual;
vcRun_log := substr(is_run_log, 1, 4000);
insert into temp_cwh_seq_test(seq_log_id, run_name, run_param, run_time, run_flag, run_log)
values(vcSeq_log_id, is_run_name, is_run_param, sysdate, is_run_flag, vcRun_log);
commit;
end pro_cwh_test;
四、执行存储过程
测试存储过程。
-- 执行日志存储过程
call pro_cwh_test('run_day_report', 'sysdate', 0, 'run_result:success!!!')
-- 执行多次之后的结果
select * from temp_cwh_seq_test
/*
2 run_day_report sysdate 2020/5/30 22:51:12 0 run_result:success!!!
3 run_day_report sysdate 2020/5/30 22:51:26 0 run_result:success!!!
4 run_day_report sysdate 2020/5/30 22:51:27 0 run_result:success!!!
5 run_day_report sysdate 2020/5/30 22:51:28 0 run_result:success!!!
6 run_day_report sysdate 2020/5/30 22:51:28 0 run_result:success!!!
7 run_day_report sysdate 2020/5/30 22:51:28 0 run_result:success!!!
8 run_day_report sysdate 2020/5/30 22:51:28 0 run_result:success!!!
9 run_day_report sysdate 2020/5/30 22:51:29 0 run_result:success!!!
*/
到此便结束了,在实际跑数过程中可以利用该存储过程记录跑数日志,将跑数中各个环节的结果作为参数传入,写入日志表即可。
五、其他:查询存储过程函数
可以使用以下脚本查询存储过程实际脚本:
select dbms_lob.substr(dbms_metadata.get_ddl('PROCEDURE','PRO_CWH_TEST','HIDER')) from dual;
- 参数1:类型(procedure、function、table、view)
- 参数2:名称
- 参数3:所属用户
分类:
Oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)