怎么在Oracle中利用存储过程和调度器对过期数据进行清除

  介绍

怎么在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)   );

数据展示

表中的数据有两种:

<李>

存储过程是否启用

<李>

表格设置保存时间

怎么在Oracle中利用存储过程和调度器对过期数据进行清除

创建存储过程

判断系统是否启动定期清除功能的存储过程

根据类型和是否启用查找删除数据的存储过程

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中利用存储过程和调度器对过期数据进行清除