步骤:

(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每隔一分钟多一条记录。