JDBC CallableStatement 和 Oracle SYS_REFCURSOR IN 参数?
和标题中说的差不多,到底该怎么做呢?
基本上我需要将空(空?)引用游标作为 IN 参数传递给存储过程。
/** spring's PreparedStatementSetter#setValues(...) */
public void setValues(PreparedStatement ps) throws SQLException {
CallableStatement cs = (CallableStatement) ps;
cs.setString(1,"constant");
//this is the IN param
cs.setNull(2, OracleTypes.CURSOR);
//this is the OUT param
cs.registerOutParameter(3, OracleTypes.CURSOR);
}
这失败了:
caused by: java.sql.SQLException: Unsupported feature: sqlType=-10
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4399)
at oracle.jdbc.driver.OraclePreparedStatement.setNullInternal(OraclePreparedStatement.java:4161)
at oracle.jdbc.driver.OracleCallableStatement.setNull(OracleCallableStatement.java:4472)
我在这里不知所措,尝试了几种不同的方法来做到这一点,但我找不到任何关于此的例子,也不知道如何正确地做到这一点。
Pretty much what it says in the title, how the hell is this supposed to be done?
Basically i need to pass a null (empty?) ref cursor as an IN parameter to a stored procedure.
/** spring's PreparedStatementSetter#setValues(...) */
public void setValues(PreparedStatement ps) throws SQLException {
CallableStatement cs = (CallableStatement) ps;
cs.setString(1,"constant");
//this is the IN param
cs.setNull(2, OracleTypes.CURSOR);
//this is the OUT param
cs.registerOutParameter(3, OracleTypes.CURSOR);
}
And this fails with:
caused by: java.sql.SQLException: Unsupported feature: sqlType=-10
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4399)
at oracle.jdbc.driver.OraclePreparedStatement.setNullInternal(OraclePreparedStatement.java:4161)
at oracle.jdbc.driver.OracleCallableStatement.setNull(OracleCallableStatement.java:4472)
I'm at a loss here, tried several different ways to do this, but I couldn't find any examples about this and have no idea how to do it properly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我的 java 有点生疏,但您应该能够在 PL/SQL 块中初始化 REF CURSOR 变量:
My java is a bit rusty, but you should be able to initialize your REF CURSOR variable in a PL/SQL block: