7

dbms ジョブから呼び出されるストアド プロシージャがあります。すなわち

DBMS_SCHEDULER.RUN_JOB ('Procedure_JB', FALSE);

Java コードのストアド プロシージャは、何らかの処理を行った後、Procedure_JB を非同期的に開始します。そして、この Procedure_JB が Procedure_PROgram を呼び出すと、プログラムはストアド プロシージャを呼び出します。

ストアド プロシージャに引数を渡すにはどうすればよいですか?

  • ジョブに渡さなければならない引数は Java からのものです。
4

2 に答える 2

14

Define your job Procedure_JB to accept arguments. Then use dbms_scheduler.set_job_argument_value to define the value of the arguments you want to pass into the program your job is going to run. An example (taken from https://forums.oracle.com/forums/thread.jspa?threadID=483135)

-- create a stored procedure with two arguments
create or replace procedure myproc (arg1 in varchar2, arg2 in varchar2)
is BEGIN null; END;
/

-- create a program with two arguments and define both
begin
dbms_scheduler.create_program
(
program_name=>'myprog',
program_action=>'myproc',
program_type=>'STORED_PROCEDURE',
number_of_arguments=>2, enabled=>FALSE
) ;

dbms_scheduler.DEFINE_PROGRAM_ARGUMENT(
program_name=>'myprog',
argument_position=>1,
argument_type=>'VARCHAR2',
DEFAULT_VALUE=>'13');

dbms_scheduler.DEFINE_PROGRAM_ARGUMENT(
program_name=>'myprog',
argument_position=>2,
argument_type=>'VARCHAR2');

dbms_scheduler.enable('myprog');
end;
/

-- create a job pointing to a program and set both argument values
begin
dbms_scheduler.create_job('myjob',program_name=>'myprog');
dbms_scheduler.set_job_argument_value('myjob',1,'first arg');
dbms_scheduler.set_job_argument_value('myjob',2,'second arg');
dbms_scheduler.enable('myjob');
end;
/
于 2012-02-08T05:19:30.597 に答える