SQL存储过程小案例
需求:系统有张表数据量特别大,现在打开列表展开数据特变慢,想按时间把部分数据迁移到新表,旧表数据删掉。
写了一个存储过程
create or replace procedure updateinsert is begin insert into WF_WORK_HISTORY select * from wf_work h where to_char(h.workcreatedate,'yyyy-MM-dd')<= to_char(sysdate-1000,'yyyy-MM-dd')and EXTERNALSYSTEMKEY is not null ; commit; DELETE from wf_work h where to_char(h.workcreatedate,'yyyy-MM-dd')<= to_char(sysdate-1000,'yyyy-MM-dd') and EXTERNALSYSTEMKEY is not null ; commit; end;
select distinct name From user_source where type = 'PROCEDURE';//查询存储过程
sysdate获取当前日期。向前退了1000天,然后把当前日期的一千天以前的所有数据插入到新表中。后续做了删除操作
(我在这里遇到一个低级的错误。我在一台开发服务器调试好了,直接把新建表通过导出sql,在新服务器上执行了下sql,没注意看新表和旧表数据列数有差异,导致一直报错,一直调试)
创建好存储过程后,来新建定时任务:
declare job3 number; begin dbms_job.submit(job3,'updateinsert;',sysdate,'sysdate+1/1440');----这里直接调用创建好的test存储过程,档期日期的1分钟后执行一次 commit; ----避免在plsql中点击提交按钮 end;
SELECT t.* FROM dba_jobs t //查询所有任务
这里是一些常用的定时任务相关命令
begin DBMS_JOB.RUN(3); /*3 job的id*/ end; //触发定时任务 begin -- Call the procedure sys.dbms_job.remove(3); end; //删除定时任务