我有一个从 dbms 作业中调用的存储过程。IE
DBMS_SCHEDULER.RUN_JOB ('Procedure_JB', FALSE);
一个java代码存储过程,在做一些事情之后,异步启动Procedure_JB。然后这个Procedure_JB调用Procedure_PROgram,然后程序会调用存储过程。
如何将参数传递给我的存储过程?
- 我必须传递给工作的参数来自 java。
我有一个从 dbms 作业中调用的存储过程。IE
DBMS_SCHEDULER.RUN_JOB ('Procedure_JB', FALSE);
一个java代码存储过程,在做一些事情之后,异步启动Procedure_JB。然后这个Procedure_JB调用Procedure_PROgram,然后程序会调用存储过程。
如何将参数传递给我的存储过程?
定义您的作业 Procedure_JB 以接受参数。然后使用 dbms_scheduler.set_job_argument_value 定义要传递给作业将运行的程序的参数值。一个例子(取自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;
/
请改用 PLSQL_BLOCK:
begin
dbms_scheduler.create_job (
job_name => 'myjob',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN myproc(''first arg'',''second arg''); END;',
start_date => sysdate,
repeat_interval => 'FREQ=HOURLY',
enabled => true
);
end;
/