0

下面是从 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 块吗?

这个事情谁有经验?

4

1 回答 1

0

我从 Mike McAllister 那里窃取的这段代码解决了我在这个问题中提到的问题。它可以工作,您可以将动态变量作为参数传递,而不仅仅是硬编码值。

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

通过调度程序作业将参数传递给 oracle 存储过程

-- 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;
/
于 2013-08-26T22:04:49.150 回答