Хранимая процедура PLSQL, возвращающая sysrefcursor - PullRequest
0 голосов
/ 20 декабря 2010

У меня есть хранимая процедура кода, которая возвращает 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.anybody, помогите мне закрыть ли RESULTSET или нет ..

Обновление:

Нужно ли мне закрыть курсор оракула в Javaили в ibatis xml.

1 Ответ

1 голос
/ 20 декабря 2010

"кто-нибудь поможет мне, закрыть ли RESULTSET или нет"

Не закрывайте его в хранимой процедуре.

Ref Cursor - указатель;закрытие переменной курсора освобождает память.Следовательно, ваш Java-код создает исключение.

Все, что требуется от хранимой процедуры, - это открыть курсор ref и назначить его параметру OUT.Позвольте вашему Java-коду обработать замыкание (очевидно, после того, как оно получило все данные).


"Нужно ли мне закрыть курсор оракула в Java или в ibatis xml."

Я не знаком с Ibatis, но примеры у меня естьПосмотрев из Google, можно предположить, что вызов queryForObject() обрабатывает курсор.Не то чтобы я нашел какую-либо фактическую документацию, утверждающую, что это так, я просто делаю вывод об отсутствии каких-либо упоминаний о закрытии.

...