LibreOffice连接Oracle:registerOutParameter参数设置咨询
LibreOffice Basic连接Oracle时registerOutParameter参数设置方案
针对你代码中Oracle REF CURSOR输出参数的registerOutParameter调用,正确的参数设置如下:
参数说明
- 第一个参数
1:对应SQL语句中输出参数?的索引(从1开始计数) - 第二个参数填
-10:这是Oracle JDBC驱动定义的OracleTypes.CURSOR常量数值,专门用来标识REF CURSOR类型 - 第三个参数可省略或传
Null:REF CURSOR类型不需要额外的类型名称参数
修改后的完整代码
Dim oraCon As Object Sub Main openOracle("DB_LOC") ' 移除SQL*Plus风格的VARIABLE声明,直接用?作为输出参数 stmt = oraCon.prepareCall("DECLARE V_Sqlstatement Varchar2(2000); BEGIN V_Sqlstatement:= 'SELECT * FROM DUAL'; OPEN ? for v_Sqlstatement; End;") ' 设置REF CURSOR输出参数 stmt.registerOutParameter(1, -10) ' 执行匿名块(用execute而非executeQuery) stmt.execute() ' 获取REF CURSOR对应的结果集 rs = stmt.getResultSet() ' 示例:遍历结果集 If Not rs Is Nothing Then If rs.next() Then Print rs.getString(1) ' 输出DUAL表的DUMMY字段值 End If rs.close() End If ' 释放资源 stmt.close() End Sub
关键注意事项
- 原SQL中的
VARIABLE x REFCURSOR是SQL*Plus专属语法,JDBC调用匿名块时不需要,直接用?绑定输出参数即可 - 调用包含输出参数的匿名块/存储过程,应该使用
stmt.execute()而非stmt.executeQuery(),结果集需要通过getResultSet()获取 - 使用完毕后务必关闭结果集、语句对象,避免数据库资源泄漏
内容的提问来源于stack exchange,提问作者Z T Minhas
相关产品推荐
相关产品推荐

