Oracle基礎知識(二)-OracleでのJobの使用


Javaにはタイミングタスクという概念があり、多くのタスクスケジューリングフレームワークもあり、Oracleにはタイミングタスク、つまりJobもあります.
1.jobを使用する場合
jobは、一般に、いくつかのストレージ・プロシージャを実行するなど、いくつかの操作をタイミング的に実行するために使用される.
2.jobを簡単に使う
ここでは、JOBの使い方を簡単にご紹介します
2.1試験表の新規作成
2つの簡単なフィールド:idと作成時間
create table t_ygy_demo_hellojob
(
       id number,
       createtime date
)

2.2シーケンスの作成
上の表では、IDが自増しています
create sequence s_ygy_demo_hellojob
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;

2.3ストレージ・プロシージャの作成
ここのストレージ・プロシージャは、レコードを挿入するために使用されます.
create or replace procedure proc_ygy_demo_hellojob
as
begin
       insert into t_ygy_demo_hellojob(id , createtime) values(s_ygy_demo_hellojob.nextval , sysdate);
end;

ここまで、すべて順調で、これからJOB関係を始めます.
2.4 JOBの作成
declare job number;
begin
sys.dbms_job.submit(job,'proc_ygy_demo_hellojob;',sysdate,'sysdate+1/1440');
end;

ここではdbms_を使用していますjobパッケージのサブプロシージャsubmit()
ここでsubmit()プロセスを簡単に説明します.
PROCEDURE Submit ( job OUT binary_ineger,
what IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE) 

job:Submit()プロシージャによって返されるbinary_ineger.この値は、1つの作業を一意に識別するために使用されます.
what:実行するストアド・プロシージャ(PL/SQLコード・ブロック)
next_date:次の実行時刻
interval:当該JOBが繰り返し実行する頻度
no_parse:TRUEのためにこのPL/SQLコードが初めて実行されたときに構文解析を行うべきであることを示し、FALSEは本PL/SQLコードが直ちに構文解析を行うべきであることを示している.デフォルトはfalse
ここまで来ると、そのJOBは実行されておらず、さらに次のステップが必要になります.
2.5運転JOB
begin 
sys.dbms_job.run(263);
end;

ここではdbms_を使用していますjobパッケージのサブプロシージャrun()
ここでrun()プロセスについて説明します.
PROCEDURE Run(job IN binary_ineger) 
ここではパラメータが1つしかなく、実行するJOBの番号です.これは唯一です.
例の263のように、私のjobのIDです.
このステップを実行すると、タイミングタスクが開始され、上記のタスクは1分に1回実行され、作成したテーブルをクエリーしてデータレコードを見ることができます.
3. DBMS_JOBパッケージのサブプロセスの紹介
3.1システム内のJOBの表示
SELECT *FROM USER_JOBS;

ここで命令することで、すべてのJOBを表示することができ、また、上でJOBを実行する場合は、JOBのIDが1つ必要になり、ここで命令することで得ることもできます.
3.2一つのJOBを削除する
dbms_job.remove(jobno);

3.3 JOBが実行するストレージプロセスの変更
dbms_job.what(jobno,what);

3.4次回実行時間の変更
dbms_job.next_date(jobno,next_date);

3.5実行頻度の変更
dbms_job.interval(jobno,interval);

3.6ストップJOB
begin
sys.dbms_job.broken(jobno,true);
end;