Oracle 11g、Java 8、ojdbc8/ojdbc7
带有 OUT REF_CURSOR 的存储过程,例如,
create or replace procedure foo(employeeId IN number, c OUT SYS_REFCURSOR) AS
BEGIN
open c for select * from Employee where id = employeeId;
END;
从 sqlplus 中,它工作正常。
JDBC调用过程:
CallableStatement statement = connection.prepareCall("{call foo(?,?)}");
statement.setObject(1, 100);
statement.registerOutParameter(2, java.sql.Types.REF_CURSOR); // ERROR here
statement.execute();
错误:
java.sql.SQLException: Invalid column type: 2012
类型 2012 是 Types.REF_CURSOR。
使用 oracle 11g 尝试了 ojdbc7 和 ojdbc8,同样的错误。
Oracle 11g 支持 REFCURSOR。 java 8 定义了 Types.REF_CURSOR。对于 11g,我应该使用哪个 Oracle jdbc 驱动程序?
最佳答案
我在我的项目中使用了这段代码,效果很好
@Override
public ResultSet getCorrespondenceDetail(Long id) {
String sql="{call dbpk_person_correspondence.get_report_detail(?,? )}";
Connection conn = JDBCUtility.getConnection();
ResultSet result = null;
CallableStatement cstmt;
try {
cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.setLong(2,id);
cstmt.execute();
result = (ResultSet)cstmt.getObject(1);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
项目依赖:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0</version>
</dependency>
关于Oracle 存储过程 java.sql.SQLException : Invalid column type: 2012 (REF_CURSOR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48847731/