步驟:
(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每隔一分鐘多一條記錄。