繁体   English   中英

如何在Java JDBC(Oracle数据库)中添加OUT参数以起作用

[英]How add OUT parameter to function in Java JDBC (Oracle database)

Oracle数据库中的SQL函数:

FUNCTION init(id in number, code out varchar2) RETURN number;

我的Java代码中有SQL(Oracle数据库):

private static final String MY_FUNCTION_SQL = "SELECT live.api.init(?,?) FROM DUAL";

而我的方法:

void myMethod() throws SQLException {
  try(CallableStatement cs = sdcon.prepareCall(MY_FUNCTION_SQL) {
    cs.setLong(1, _myID);
    cs.registerOutParameter(2, Types.VARCHAR);
    ResultSet resultSet = sdInsertTask.executeQuery();
  }
}

executeQuery()我得到了异常:

java.sql.SQLException:ORA-06572:函数INIT带有参数。

将my_function_sql更改为

private static final String MY_FUNCTION_SQL = "call live.api.init(?,?)";

您可以在CallableStatement的javadoc中找到语法:

{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
{call <procedure-name>[(<arg1>,<arg2>, ...)]}

因此,您只需要调整查询,因为您需要OUT参数,请使用第一种语法

{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}

就像是 :

String initQuery = "{?= call live.api.init(?)}";
long _myID = 1L;
try(CallableStatement cs = conn.prepareCall(initQuery)) {
    cs.registerOutParameter(1, Types.VARCHAR);
    cs.setLong(2, _myID);

    ResultSet resultSet = cs.execute();
}

注意:您在代码中调用了另一个名为sdInsertTask Statement ...而不是cs

您可以在这里找到完整的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM