gpt4 book ai didi

java - 在 SQLException 中获取 OUT 参数

转载 作者:行者123 更新时间:2023-12-02 00:21:12 25 4
gpt4 key购买 nike

在我的存储过程中,我有以下语句

IF (sdate > sysdate)
THEN
RAISE exec_not_allowed;
returnval := sdate;

END IF;

returnval 是我的程序中的 IN OUT 参数。

在java中,通常使用以下方式获取OUT参数:

callablestatement.getInt(2);

如果引发异常,如何在 Java 中接收 returnval?异常错误代码在 Java SQLException 部分中捕获。

最佳答案

在这种情况下您为什么要提出异常(exception)?您应该只在两种情况下真正引发异常:

  1. 您打算捕获异常并在调用代码中对其进行适当处理。
  2. 出现问题,您希望应用程序崩溃并烧毁。

您没有做这些事情,也不需要做。您只想停止代码运行并“返回”(这是一个过程)您的值。在这种情况下,我建议使用 return .

return 结束包含它的匿名 block 的执行,并在过程中将“控制权”返回给调用语句。也就是说,它完全符合要求。

以下代码在使用 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 .

关于java - 在 SQLException 中获取 OUT 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com