最近项目中遇到创建oracle定时任务还用到了拼串功能记录一下
1.创建定时删除表的存储过程
默认保存当前两天的(今天17号 就删除16号之前的)
CREATE ORREPLACE PROCEDURE delete_proc2 IS
BEGIN
declare
sqlstr VARCHAR(200);
tabletime varchar(10);
begin
select to_char(sysdate - 3, 'yyyymmdd')into tabletime from dual;
for i in 0..5 loop
sqlstr := 'drop table EVENT' || tabletime|| '_' || i;
execute immediate sqlstr;
end loop;
end;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exceptionhappened,data was rollback');
ROLLBACK;
END;
2.创建oracle定时任务
用command Window
var job_num number;
begin
dbms_job.submit(:job_num,' delete_proc2;', trunc(sysdate)+23/24,'sysdate+23/24');
end;
3.通过 select * from Dba_Jobs;来查看任务执行的时间,下次执行时间等
4.停止已经启动的定时任务:
先执行selectjob,next_date,next_sec,failures,broken from user_jobs;
以查看定时任务的job号。
在SQL>中执行下面的语句停止一个已经启动的定时任务:
begin
dbms_job.remove(1);
commit;
end;
/
表示停止job为1的任务。
执行后显示如下:
PL/SQL procedure successfully completed
测试用见表语句
createtablesystem.EVENT20150915_0
(
seq NUMBER(2) PRIMARYKEY,
seqtime DATE )