![](/img/trans.png)
[英]how to call stored function of IN and OUT parameter in Oracle Database using Java
[英]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.