首页 > 数据库 > Oracle > Oracle Job定时执行任务
Oracle Job定时执行任务
需求:
在system用户下创建一个表,每隔10秒插入一条测试数据。
思路:
可以用Oracle job来实现。
步骤:
1 创建表格
create table system.test20150929
(
myseq number(5) primary key,
mydate date
)
2 创建存储过程test_proc
CREATE OR REPLACE PROCEDURE test_proc IS
BEGIN
INSERT INTO SYSTEM.TEST20150929(MYSEQ, MYDATE) VALUES(NVL((SELECT MAX(MYSEQ) FROM SYSTEM.TEST20150929) + 1, 0), SYSDATE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception happened, data was rollback');
ROLLBACK;
END;
/
对应的删除过程的语句为
drop procedure test_proc;
3 检查oracle的job队列的进程数,要确保不为0。因为0表示不运行job
show parameter job_queue_processes;
若为0,则可以用以下语句修改
alter system set job_queue_processes=20 scope=both;
4 创建定时执行任务
假如要求每3分钟插入一条数据,实际上就是要每3分钟执行一次存储过程test_proc。
var job_num number;
begin
dbms_job.submit(:job_num,'test_proc;',SYSDATE,'sysdate+3/24/60');
end;
/
commit;
注意,这里要执行commit。
submit过程中有五个参数:job、what、next_date、interval与no_parse。
PROCEDURE submit ( job OUT binary_ineger,
what IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
job参数是由submit()过程返回的binary_integer。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。这里是存储过程的名称,后面有一个英文状态下的分号一定要加上;
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。 这里加号、括号都必须在英文状态下输入;
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。
5 查看job是否创建成功
这里由于dba_jobs里的字段很多,为了省去格式的麻烦,用PL/SQL Developer查询。
上图可以看出,最后一行JOB字段值为27的就是我们新创建的JOB。说明创建成功了。这个JOB字段其实就是上面创建语句中的job_num。job_num在删除job时要用到。
6 查看插入数据
7 删除job
exec dbms_job.remove(27);
commit;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29485627/viewspace-1811510/ ,如需转载,请注明出处,否则将追究法律责任。