--每个月5号 SELECT TRUNC(SYSDATE, 'MM') + 4 + 2 / 24 FROM dual ; SELECT (TRUNC(SYSDATE,'YYYY')-INTERVAL '1' YEAR),(TRUNC(SYSDATE,'YYYY')) FROM dual; select add_months(sysdate,-24) as 前年的今天, add_months(sysdate,-1) as 前一个月的今天 from dual; select add_months((add_months(sysdate,-24)),-1) as 前年的前一个月的今天 from dual; select add_months((LAST_DAY(sysdate)),-1) as 最后一天 from dual; select add_months((add_months((TRUNC(sysdate, 'mm')),-24)),-1) as 第一天, add_months((TRUNC(sysdate, 'mm')),-24) as 第二个月的第一天 from dual; select add_months((add_months((TRUNC(sysdate, 'mm')),-24)),-1) as 前年的前一个月的今天 from dual; SELECT * FROM WIP_LOT WHERE CREATED > add_months((add_months(sysdate,-24)),-1); --创建存储过程
–下面才是正式sql
create or replace procedure copy_wlh as str_sql varchar2(2000); str_sql2 varchar2(2000); begin --str_sql:='INSERT into "WIP_LOT_HIS_BACK" SELECT * FROM WIP_LOT_HIS WHERE TRANS_TIME >= --add_months((add_months((TRUNC(sysdate,''mm'')),-24)),-1) --AND TRANS_TIME < add_months((TRUNC(sysdate, ''mm'')),-24)' str_sql:='INSERT into "WIP_LOT_copy1" SELECT * FROM WIP_LOT WHERE CREATED > add_months((add_months((TRUNC(sysdate,''mm'')),-24)),-1) AND CREATED <add_months((TRUNC(sysdate, ''mm'')),-24)'; str_sql2:='DELETE FROM WIP_LOT_copy1'; execute immediate str_sql; execute immediate str_sql2; exception when others then null; end ; --运行存储过程 begin proc_test(add_months((add_months(sysdate,-24)),-1)); end; --创建job declare my_job number; begin dbms_job.submit(my_job, 'proc_test;', sysdate, 'sysdate+10/24*60*60');--每10插入一条记录 end; --查询job select job, what from dba_jobs; --运行 begin dbms_job.run(6); end; --下次 select job,next_date,what from dba_jobs where job='6'; --删除 begin dbms_job.remove(6); end;