入力パラメーターを必要とするストアード・プロシージャーを実行するスケジューラー・プログラムがあります。
BEGIN
DBMS_SCHEDULER.DROP_PROGRAM
(program_name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING');
END;
/
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING'
,program_type => 'STORED_PROCEDURE'
,program_action => 'MYSCHEMA.EXPORT_STATUS'
,number_of_arguments => 0
,enabled => FALSE
,comments => NULL
);
SYS.DBMS_SCHEDULER.ENABLE
(name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING');
END;
/
パラメータをEXPORT_STATUS
プロシージャに渡すにはどうすればよいですか?
これを、PL/SQL BLOCKを実行するプログラムに変更しました。
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING'
,program_type => 'PLSQL_BLOCK'
,program_action => 'MYSCHEMA.EXPORT_STATUS(''STARTING''); END;'
,number_of_arguments => 0
,enabled => FALSE
,comments => NULL
);
SYS.DBMS_SCHEDULER.ENABLE
(name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING');
END;
/
期待通りに動きます。しかし、誰かがそれを以前の形式に保つ方法を知っているなら、感謝されます。
CREATE_PROGRAM
プロシージャ を使用してプログラムを作成する場合、number_of_arguments
パラメータを使用して、引数がいくつ必要かを指定できます。
何らかの理由で、既存のスケジューラオブジェクト(この場合はプログラム)の属性(この場合はnumber_of_arguments
)を変更する場合、オブジェクトを削除して新しいオブジェクトで再作成する必要はありません。属性値も、代わりに SET_ATTRIBUTE
プロシージャ を使用できます。
dbms_scheduler.set_attribute(
name => 'my_program'
, attribute => 'number_of_arguments'
, value => 1);
プログラムを作成し、そのすべての属性を設定したら、プログラムの引数(ある場合)を DEFINE_PROGRAM_ARGUMENT
procedure で定義できます。
dbms_scheduler.define_program_argument(
program_name => 'my_program'
, argument_position => 1
, argument_type => 'VARCHAR2'
, default_value => 'STARTING'
);
ここでは、プログラムの引数とそのデフォルト値を定義しました。デフォルト値を指定しないでおくこともできますが、この場合は SET_JOB_ARGUMENT_VALUE
procedure を使用して引数の値を設定する必要があります。たとえば、ジョブを作成し、関連するプログラムを次のように指定したとします。
dbms_scheduler.create_job(
job_name => 'call_my_program'
, program_name => 'my_program'
...
);
次のように、ジョブに関連付けられたプログラムで引数の値を設定する必要があります。
dbms_scheduler.set_job_argument_value(
job_name => 'call_my_program'
, argument_position => 1
, argument_value => 'STARTING');
DEFINE_PROGRAM_ARGUMENT
プロシージャを使用してプログラムの引数のデフォルト値を定義し、SET_JOB_ARGUMENT_VALUE
プロシージャを使用して引数の値を設定した場合、SET_JOB_ARGUMENT_VALUE
プロシージャを使用して設定された引数値は、 DEFINE_PROGRAM_ARGUMENT
プロシージャで設定されたデフォルトの引数値。
CREATE OR REPLACE PROCEDURE XX_COPY_SALES_ORDER
IS
RETCD NUMBER;
RETBUFF VARCHAR2(100);
BEGIN
XX_PROCESS_PKG.MAIN (RETCD,RETBUFF,NULL);
END;
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'XX_COPY_SALES_ORDER',
job_type => 'STORED_PROCEDURE',
job_action => 'XX_COPY_SALES_ORDER',
start_date => '07-MAY-16 07.00.00 PM US/Central',
repeat_interval => 'FREQ=DAILY;INTERVAL=1', /* every other day */
end_date => '05-OCT-25 07.00.00 PM US/Central',
auto_drop => FALSE,
--job_class => 'batch_update_jobs',
enabled => TRUE,
comments => 'COMMETNS');
END;