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.
上调用该包装程序,可能会更易于维护。
要在 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.
上调用该包装程序,可能会更易于维护。