Ошибка iBatis при применении карты параметров - вызвано SQLException: курсор закрыт - PullRequest
3 голосов
/ 15 июля 2010

Я отлаживаю проблему с нулевым ResultsMap, возвращенным из вызова хранимой процедуры через iBatis для Java.Вот усеченная копия исключения, которое я получаю.

DataAccessException: Exception calling procedure
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in ibatis-map.xml.  
--- The error occurred while applying a parameter map.  
--- Check the getEmpLoanDistribContribInfoMap.  
--- Check the output parameters (retrieval of output parameters failed).  
--- Cause: java.sql.SQLException: Cursor is closed.

Я не верю, что проблема на самом деле в карте параметров, поскольку аналогичный код работает в других областях проекта, но у меня естьздесь на всякий случай включены карта параметров и сохраненный заголовок процедуры.

<parameterMap id="getEmpLoanDistribContribInfoMap" class="map" >
    <parameter property="resultCode" javaType="int" jdbcType="NUMERIC" nullValue="-1" mode="OUT"/>
    <parameter property="client_id" javaType="int" jdbcType="NUMERIC" mode="IN"/>
    <parameter property="emp_nbr" javaType="int" jdbcType="NUMERIC" mode="IN"/>
    <parameter property="general_info" javaType="result" jdbcType="ORACLECURSOR" mode="OUT"/> 
    <parameter property="current_contrib_info" javaType="result" jdbcType="ORACLECURSOR" mode="OUT"/> 
    <parameter property="future_contrib_info" javaType="result" jdbcType="ORACLECURSOR" mode="OUT"/> 
    <parameter property="distrib_info" javaType="result" jdbcType="ORACLECURSOR" mode="OUT"/> 
    <parameter property="loan_info" javaType="result" jdbcType="ORACLECURSOR" mode="OUT"/> 
</parameterMap>

function get_emp_ldc_info (
  client_id                 employees.clt_id%type,
  emp_nbr                   employees.emp_nbr%type,
  general_info              out retire_ref_types.retire_ref_cursor,
  current_contrib_info      out retire_ref_types.retire_ref_cursor,
  future_contrib_info       out retire_ref_types.retire_ref_cursor,
  distrib_info              out retire_ref_types.retire_ref_cursor,
  loan_info                 out retire_ref_types.retire_ref_cursor
) return number is
  retval number;

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

Я понимаю, что моей проблемой вполне могут быть неверные данные, но я не уверен, где искать.Единственное, о чем я могу думать, это то, что я должен получить это исключение, если один из курсоров out в карте параметров открыт для выбора, который не находит данных.Кто-нибудь знает, правда ли это?

1 Ответ

2 голосов
/ 15 июля 2010

Я подтвердил, что причиной этого были плохие данные. Я до сих пор не нашел, где это, но я отвечаю на вопрос, поэтому никто не тратит свое время на это. Спасибо за чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...