JDBC CallableStatement-一次调用多个存储过程

时间:2019-01-29 16:56:07

标签: java oracle jdbc java-stored-procedures

要仅使用Java中的简单JDBC来调用Oracle的存储过程,我们可以执行以下操作:

con.prepareCall("{ call ? = my_procedure(?) }");
callStm.registerOutParameter(1, Types.INTEGER);
callStm.setInt(2, -100);
callStm.execute()

我想知道是否可以在一个prepareCall语句中调用一个以上的过程?例如:

con.prepareCall("{ call prepare_proc(); ? = my_procedure(?) }");

这当然是无效的,但是如何解决它并一次调用两个或多个过程?

1 个答案:

答案 0 :(得分:4)

您可以将它们包装在一个匿名块中:

con.prepareCall("begin prepare_proc(); ? := my_procedure(?); end;");

Read more about the differences.

该函数的返回值到绑定变量(第一个?)的分配现在为a PL/SQL assignment,位于匿名块内,因此它使用? := ...。在原始代码中,您使用的是call SQL statement版本(? = call ...),而JDBC使用简单的=来分配绑定变量。

大概my_procedure实际上是my_function,否则它将没有返回类型...

拥有一个包装器过程(或函数)来进行两个调用,然后仅通过JDBC调用单个包装器,可能会更易于维护。

相关问题