在这种情况下,您为什么要提出异常?您应该只在两种情况下真正引发异常:
- 您打算捕获异常并在调用代码中适当地处理它。
- 出了点问题,您希望您的应用程序崩溃和烧毁。
你没有做这些事情,也不需要这样做。您只想停止代码运行并“返回”(这是一个过程)您的价值。在这种情况下,我建议使用return
.
return
结束包含它的匿名块的执行,并在过程中将“控制”返回给调用语句。即它完全符合要求。
以下代码在停止执行过程之前使用 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
之前没有分配。