从Java调用Oracle过程 - 调用System.exit()时会发生什么?

时间:2013-08-26 16:38:45

标签: oracle stored-procedures jvm system.exit

以下是从Java调用的Oracle过程的代码:

CallableStatement st = connection.prepareCall("{call PROCEDURE_0(?,?,?)}");

st.setInt(1,xyz1);
st.setString(2,xyz2);
st.setInt(3,int_variable);

st.registerOutParameter(3,Types.INTEGER);

try{

st.execute();

}
catch(Exception e){

}

如果用户在此Java JVM上调用System.exit(),那么调用的Oracle过程会发生什么?是否保证在Oracle中继续运行?或者,为了保证这一点,我应该将其提交给Oracle作业调度程序?到目前为止,我的经验是,即使JVM终止,有时程序仍会继续运行,有时则不会。这与“注册参数”有什么关系吗?如果调用System.exit,代码是否会到达catch块?

有没有人有这方面的经验?

1 个答案:

答案 0 :(得分:0)

我从迈克·麦卡利斯特那里偷走了这个代码,他从甲骨文论坛上偷走了这个代码,解决了我在这个问题中提到的问题。它可以工作,你可以将动态变量作为参数传递,而不仅仅是硬编码值。

这个问题也解决了这个问题:

Passing arguments to oracle stored procedure through scheduler job

-- 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;
/