在我的存储过程中,我有以下声明
IF (sdate > sysdate)
THEN
RAISE exec_not_allowed;
returnval := sdate;
END IF;
returnval是我程序中的IN OUT参数。
在java中,通常使用以下命令获取OUT参数:
callablestatement.getInt(2);
如果引发异常,如何在Java中收到returnval? Java [{1}}部分中捕获了异常错误代码。
答案 0 :(得分:2)
在这种情况下,你为什么要提出异常?你应该只在两种情况下引发异常:
你没有做这些事情,也不需要。您只想停止代码运行并“返回”(这是一个程序)您的值。在这种情况下,我建议使用return
。
return
结束包含它的匿名块的执行,并在一个过程中,将“control”返回给调用语句。即它完全适合这项法案。
以下代码在暂停执行过程之前使用return将sdate
分配给out
参数。 “更多的东西”永远不会发生。
create or replace procedure my_procedure_one (returnval in out date) is
begin
-- some stuff.
if sdate > sysdate then
returnval := sdate;
-- we don-t want to continue any more if this is true.
return;
end if;
-- more stuff.
end;
如果您只想将sdate
分配给returnval
,如果条件不为真,那么您只需交换这两行;可能会把它从if语句中删除,以使其更明显。这就是您的代码当前所做的事情,就像您提出exec_not_allowed
所有执行都停止一样。
create or replace procedure my_procedure_two (returnval in out date) is
begin
-- some stuff.
-- we don-t want to continue any more if this is true.
if sdate > sysdate then
return;
end if;
returnval := sdate;
-- more stuff.
end;
在任何一种情况下,您的Java调用都保持不变。在第一个过程(my_procedure_one
)中,您将返回sdate
,在第二个过程中返回null,假设先前未分配returnval
。
答案 1 :(得分:1)
returnval:=sdate;
是一个死代码,因为在将值赋给returnval
之前会引发异常。但是如果您想终止程序执行,那么您将无法获得任何{来自proc调用的{1}}。
您可以在returnval
内创建一个块来实现。
procedure
答案 2 :(得分:0)
引发异常时,程序执行终止。
你无法得到答复。