2017-03-24 27 views
0

データベーステーブルのアクションをスケジュールするには、スケジュールチェーン、つまりスケジュールをリンクするジョブ(DBMS_SCHEDULER.CREATE_JOB)を作成する必要がありますDBMS_SCHEDULER.CREATE_SCHEDULE)とプログラム(DBMS_SCHEDULER.CREATE_PROGRAM)があります。しかし、もし私がPROGRAMとリンクされた仕事だけで同じ仕事をしたいのであれば?出来ますか ?私が試してみました、私はプログラムがログをチェックするとき、それは私を示しています(5秒の間隔で実行されます)Oracleスケジュールジョブを使用してOracleスケジュールプログラムを実行する

RUNS  FAILS 
====================== 
    10  10 

JOBが10回実行されたことを意味し、それは同じ番号で失敗しました回。

PROGRAM-CODE : 
================= 

BEGIN 
SYS.DBMS_SCHEDULER.CREATE_PROGRAM 
(
    program_name   => 'HR.INSERT_PROG' 
,program_type   => 'PLSQL_BLOCK' 
,program_action  => 'insert into sch_test values (s1.nextval,s2.nextval)' 
,number_of_arguments => 0 
,enabled    => TRUE 
,comments    => NULL 
); 
END; 


JOB-CODE : 
========== 

BEGIN 
SYS.DBMS_SCHEDULER.CREATE_JOB 
(
    job_name  => 'HR.JOB1' 
    ,schedule_name => 'HR.INSERT_SCH' 
    ,program_name => 'HR.INSERT_PROG' 
    ,comments  => NULL 
); 
END; 

関係テーブルが読み込まれることは決してありません:以下の

は、当該JOBとPROGRAM用のコードです。誰かが私に言うことができるなら、私はここで間違っていますか? SCHEDULEなしでこれを達成できないのですか?

答えて

2

あなたはこのような一つの仕事にすべてを置くことができ、別のプログラムやスケジュールを作成する必要はありません。あなたが実行しているそれらのいくつかを持っている場合、スケジュールオブジェクトと名前のプログラムオブジェクトの名前付き

DBMS_SCHEDULER.CREATE_JOB 
(
    job_name  => 'HR.JOB1' 
    ,start_date  => LOCALTIMETAMP 
    ,repeat_interval => 'FREQ=SECONDLY;INTERVAL=5' 
    ,end_date  => NULL 
    ,job_class  => 'DEFAULT_JOB_CLASS' 
    ,job_type  => 'PLSQL_BLOCK' 
    ,job_action  => 'insert into sch_test values (s1.nextval,s2.nextval);' 
    ,enabled   => TRUE 
); 

は便利です複雑な組み合わせや依存関係にあります。

+0

はい、これは実行され、チェックされており、すべてがスムーズかつ上手く動作しています。好奇心のためだけに、私はプログラムや仕事で可能かどうかを私が尋ねたことを知りたいのですか? はい、答えの弟のためにトンをありがとう! – hashir

関連する問題