步骤:
(1) 创建作业
(2) 创建job
dbms_job.submit();
submit ( jobno OUT binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
jobno参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块 也就是task。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时应进行语法分析,而 FALSE指示本PL/SQL代码应立即进行语法分析。
(3) 运行
dbms_job.run(jobno);
(4) 删除
dbms_job.remove(jobno)
--暂停一个job
exec dbms_job.broken(jobno,true)
commit //必须提交否则无效
启动一个job
exec dbms_job.broken(jobno,false)
/*********************************************************************************/
eg: 通过job 每过一分钟向一张表里面插入一条数据
create or replace package body test is
--创建表
procedure createTable is
num number;
begin
--查看系统表里是否已经存在,没有创建
select count(*) into num from user_tables where table_name= 'TEMP_JOB';
if (num>0) then
--删除表
execute immediate 'drop table temp_job';
commit;
end if;
--创建表
execute immediate 'create table temp_job(
address varchar2(200),
sDate date
)';
commit;
end createTable;
--创建一个task 往表里插入记录
procedure insertRecord as
begin
insert into temp_job(address,Sdate) values('MM'||sysdate,sysdate);
commit;
end insertRecord ;
--创建一个Scheduling 调度器
procedure scheJob is
jobno NUMBER;
begin
--创建表
test.createTable;
commit;
--创建job
dbms_job.submit(jobno,'scott.test.insertRecord;',sysdate,'sysdate+1/1440');--必须加上用户.包名.存储过程名 否则报必须说明标识符 'insertRecord'错误
commit;
--每天1440分钟,即一分钟运行test过程一次
--运行job
dbms_job.run(jobno);
commit;
--删除job
--dbms_job.remove(jobno);
end scheJob;
end test;
运行存储过程
Command Window 窗口
exec scott.test.scheJob ;--用户名.包名.存储过程名
结果:
select * form temp_job;
表 temp_job每隔一分钟多一条记录。