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

JDBC CallableStatement - call multiple stored procedures in one shot

要在 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(?) }");

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

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

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

Read more about the differences.

将函数的 return 值赋给绑定变量(第一个 ?)现在是 a PL/SQL assignment, within the anonymous block, so it uses ? := .... In your original code you were using the call SQL statement 版本(? = call ...),并且 JDBC 使用普通的 = 来赋值给绑定变量。

推测my_procedure实际上是my_function,否则不会有return类型...

如果有一个包装程序(或函数)可以进行两次调用,然后只需在 JDBC.

上调用该包装程序,可能会更易于维护。