2013-08-26 34 views
0

这里是代码Oracle过程从Java调用:从Java调用Oracle过程 - 调用System.exit()时会发生什么?

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块?

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

+0

不是会不会继续运行。您的会话将在某个时候终止。 – OldProgrammer

+0

好的,会提交给Oracle job scheduler解决这个问题吗? –

回答

0

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

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

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; 
/
相关问题