PLSQL存储过程返回sysrefcursor

我有代码存储过程,它返回sysrefcursor作为OUT参数。
CREATE OR REPLACE PROCEDURE report (rvdate IN VARCHAR2,RESULTSET OUT  NOCOPY sys_refcursor)
AS
..

...

.

OPEN  RESULTSET FOR (SELECT A.*  FROM TEMP_DATA ) 
...
..
CLOSE RESULTSET
END;
/
从ibatis xml配置调用此过程
<parameterMap id="inputParam" class="map">
          <parameter property="date" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
      <parameter property="output" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR"  resultMap="rec-map" mode="OUT"/>
 </parameterMap>

 <procedure id="readReport" parameterMap="inputParam" >
        <![CDATA[{ call report(?,?) } ]]>
 </procedure>
在java中我正在这样做
      java.util.Map map = new java.util.HashMap();
      map.put("date", date);
      System.out.println("date" + date);
      xmlconfig.queryForObject("readReport", map);
      return (List)map.get("output");
上面的代码返回RESULTSET游标,如果我关闭这个游标,那么它会在java end抛出一个异常。任何人都会帮我判断是否关闭了RESULTSET。 更新: 我是否需要在java或ibatis xml中关闭oracle游标。     
已邀请:
  “任何人都会帮助我关闭   结果与否“ 不要在存储过程中关闭它。 Ref Cursor是一个指针;关闭游标变量会释放内存。因此,您的Java代码会抛出异常。 您需要执行的所有存储过程都是打开引用游标并将其分配给OUT参数。让你的java代码处理闭包(显然是在它获取了所有数据之后)。   “我需要关闭oracle游标吗?   在java或ibatis xml中。“ 我不熟悉Ibatis,但是我从谷歌搜索主题中看到的例子表明
queryForObject()
调用处理光标。并不是说我发现任何实际的文件都说明了这一点,我只是因为没有提到关闭而推断。     

要回复问题请先登录注册