最近项目中要用到一个定时执行的功能,查了下才知道有Oracle job(Oracle作业)这个东西(对Oracle了解的太少,就只知道写sql语句了),在网上复制了一段创建的代码,结果在plsql中弄了半天连 编译都没通过,这东西真够博大精深的,哈哈,然后又在网上查,结果发现贴出来的sql都差不多,还是没搞懂怎么编译通过的,没办法,只好照着他的错误提示 一遍一遍的改,累死累活的总算改对了.
先看一下语法
Submit ( job OUT binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。
增加Oracle job一般都是这两种方法,如下
--1.这种方法可以在命令/sql窗口中执行,执行完后不会输出jobid
declare
jobid number;
begin
dbms_job.submit(jobid,'test;',sysdate,'sysdate+1/1440');--test后面必须跟分号,最后一个参数必须为varchar类型(加引号)
commit;--创建job也需要提交,否则不会调用test
end;
/
--如果需要删除job用这种方法(当然也可以用鼠标在plsql中操作)
exec dbms_job.remove(85);--85指的是jobid的值(视创建后产生的值而定),这里不能直接用:jobid,之后也需要提交
--2.这种方法只能在命令窗口中执行,执行完后会输出jobid
variable jobid number;
begin
dbms_job.submit(:jobid,'test;',sysdate,'sysdate+1/1440');
commit;
end;
/
--删除
exec dbms_job.remove(:jobid);--这里可以直接用:jobid,之后也需要提交
上面增加的job其实是没隔一分钟调用一次test这个存储过程,这个存储过程则是往表a中插入一条记录
create or replace procedure test
as
begin
insert into a(aaa) values(to_char(sysdate,'yyyy-mm-dd hh:mi:ss'));
end;
/
crete table a(aaa varchar2(20));/
暂时把它创建好了,也能执行了,但是关键的next_date , interval这两个参数还没弄懂,继续学习.....
完整例子代码:
create table super.a(aaa varchar2(20));
create or replace procedure test
as
begin
insert into super.a(aaa) values(to_char(sysdate,'yyyy-mm-dd hh:mi:ss'));
end;
variable jobid number;
begin
dbms_job.submit(:jobid,'test;',sysdate,'sysdate+1/1440');
commit;
end;
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
exec dbms_job.remove(:jobid);
drop procedure test;
drop table super.a;