介绍实现原理
对应表中判断时间的字段COLUMNTYPEVARCHAR2 (200)
字段类型
怎么在Oracle中利用存储过程和调度器对过期数据进行清除?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
实现原理
1张表(SYS_DBA_CONFIG), 1个工作定时器(Job_DBA_AutoRunScript)和2个存储过程(DBA_AUTODELETE DBA_AUTORUNSCRIPT)实现自动清理不同表中的过期数据。通过定时器调用存储过程查表判断是否开启过期数据清理功能,如果开启调用数据清理的存储过程。
建表
建立数据库任务配置表,用来管理数据库中那些表需要定期处理。
表格类型
字段名类型非空注解NAMEVARCHAR2(200) ?任务执行对象名称VALUEVARCHAR2(200) ?设置保存时间(天)TYPEVARCHAR2(200) ?执行类型ISRUNNUMBER(1,0) ?是否执行REMARKVARCHAR2 (200)对应表中判断时间的字段COLUMNTYPEVARCHAR2 (200)
字段类型
建表语法
create table SYS_DBA_CONFIG ( ,NAME VARCHAR2 (200), not 空, ,value VARCHAR2 (200), not 空, ,type VARCHAR2 (200), not 空, ,REMARK VARCHAR2 (200), not null 数量,ISRUN (1), not 空, ,COLUMNTYPE VARCHAR2 (200) );
数据展示
表中的数据有两种:
- <李>
存储过程是否启用
李> <李>表格设置保存时间
李>
创建存储过程
判断系统是否启动定期清除功能的存储过程
根据类型和是否启用查找删除数据的存储过程
CREATE 或是REPLACE PROCEDURE xxx !”DBA_AUTORUNSCRIPT"作为 ,/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ,功能:定期运行指定脚本V1.0 ,说明:SQL语句从配置表SYS_DBA_CONFIG读取 ,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */,v_Name ,,,,,, VARCHAR2 (500);,——Sql语句变量 ,v_Value ,,,,,, VARCHAR2 (250);,——Sql语句变量 ,CURSOR CS  IS SELECT 上部(名字),VALUE 得到SYS_DBA_CONFIG WHERE 低(类型)=& # 39;auto_run_script& # 39;,以及ISRUN =, 1; 开始 OPEN 计算机; 循环 FETCH CS  INTO v_Name, v_Value;——获得当前记录的数据 ,EXIT WHEN c % NOTFOUND; ,dbms_output.put_line(& # 39;执行脚本(& # 39;| | v_Name | | & # 39;): & # 39; | | v_Value); ,EXECUTE IMMEDIATE (& # 39; BEGIN & # 39; | | v_Name | | & # 39;;,提交;,结束;& # 39;); 最终获得;循环; 最终获得DBA_AutoRunScript;
执行删除过期数据的存储过程
根据对应的表中的对应字段和当前时间比较,如果时间大于对应的保存时间天数,删除数据。
CREATE 或是REPLACE PROCEDURE xxx !”DBA_AUTODELETE"作为 ,/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ,功能:根据保留天数删除数据V1.0 ,说明:表名称,保存天数从配置表SYS_DBA_CONFIG读取 ,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */,v_name ,,, varchar2(250);,——对应的表名 ,v_remark ,, varchar2(250);,——对应的表字段 ,v_value ,,数量(10);,,表对应的表数据天数 ,v_endTime ,日期;,——清除的具体时间 ,v_sql ,, varchar2 (250); ,v_columntype varchar2 (20); ,CURSOR CS  IS SELECT 名称、值、备注,columntype 得到SYS_DBA_CONFIG WHERE 低(类型)=& # 39;auto_delete_table& # 39;,以及ISRUN=1; 开始 OPEN 计算机; 循环 FETCH CS  INTO v_name, v_value, v_remark v_columntype;——获得当前记录的数据 ,EXIT WHEN c % NOTFOUND; ,dbms_output.put_line(& # 39;删除的表名:& # 39;,| |,v_name | | & # 39;,保留天数:& # 39;| | v_value); ,v_endTime:=TRUNC (SYSDATE安康;v_value); ,if v_columntype=& # 39;日期# 39;然后 ,v_sql :=, & # 39; delete 得到& # 39;,| |,v_name | | & # 39;, where & # 39; | |, v_remark | | & # 39;, & lt;, TRUNC (SYSDATE安康;& # 39;| | v_value | | & # 39;) & # 39;,; ,dbms_output.put_line(& # 39;删除的sql: & # 39;, | |, v_sql); 其他的, ,v_sql :=, & # 39; delete 得到& # 39;,| |,v_name | | & # 39;, where to_date (& # 39; | | v_remark | | & # 39;, & # 39; & # 39; yyyy-mm-dd hh34: mi: ss # 39; & # 39;), & lt;, TRUNC (SYSDATE安康;& # 39;| | v_value | | & # 39;) & # 39;; ,dbms_output.put_line(& # 39;删除的sql: & # 39;, | |, v_sql); ,最终获得;如果; ,开始 execute 才能;immediate  v_sql; ,结束; 最终获得;循环; 最终获得DBA_AutoDelete;怎么在Oracle中利用存储过程和调度器对过期数据进行清除