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; //删除定时任务

 

posted @ 2020-05-27 10:21  向上丶  阅读(273)  评论(0编辑  收藏  举报