【发布时间】:2014-04-22 23:54:37
【问题描述】:
我遇到了一个问题,在尝试从存储过程返回引用游标时,我经常收到 java.sql.SQLException: Bigger type length than Maximum 错误。
我有一个非常简单的存储过程,它只有一个输出变量作为引用游标,ref_cursor 被定义为名为 WS_SEARCHTEST 的 Oracle 包中的类型引用游标。
CREATE OR REPLACE PACKAGE DB.WS_SEARCHTEST
IS
TYPE ref_cursor IS REF CURSOR;
我的程序:
PROCEDURE searchTest(query_result OUT ref_cursor)
Is
Begin
open query_result for select pay_id, member_id, group_no from member_table
where carrier_no = '7' AND group_no = '200607';
End;
我知道我的连接有效,因为我已经使用它来运行简单的查询并检查了数据库。在我的 java 代码中,我执行以下操作:
callStmt = connection.prepareCall("{call WS_SEARCHTEST.searchTest(?)}");
callStmt.registerOutParameter(1, OracleTypes.CURSOR);
callStmt.execute();
resultSet = (ResultSet) callStmt.getObject(1);
我也试过了:
resultSet = callStmt.executeUpdate();
与
resultSet = callStmt.executeQuery();
但是当我尝试访问结果集时,我总是会得到 java.sql.SQLException: Bigger type length than Maximum。
谢谢
【问题讨论】:
-
你可以在这里得到你的答案stackoverflow.com/questions/14900708/…>?
-
@KerriWilliams 该链接没有帮助,因为它们返回一个整数,我可以这样做,但我无法返回参考光标。这也是一个自动提交问题。
-
您使用的是哪个 Oracle 版本?您使用的是哪个 JDBC jar(例如 ojdbc14.jar、ojdbc5.jar、ojdbc6.jar)?
-
我已经成功地将代码用于返回引用的函数:
callStmt = connection.prepareCall("{ ? = call WS_SEARCHTEST.searchTest }");如果将 searchTest 转换为函数,它是否有效? -
@KlasLindbäck 感谢您的回复,但我也尝试将其转换为函数,但是我收到空指针异常,而不是“java.sql.SQLException: Bigger type length than Maximum”错误消息在我的 SOAP 响应中。我有: callStmt.prepareCall("{? = call WS_SEARCHTEST.func(?,?,?)}");
标签: java stored-procedures jdbc plsql callable-statement