2010-07-15 49 views
3

我在調試通過iBatis for Java調用存儲過程返回的null結果映射的問題。這是我收到的異常的截斷副本。iBatis在應用參數映射時出錯 - 由SQLException引起:遊標關閉

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遊標針對沒有找到數據的select打開,那麼我應該應該得到此異常。有沒有人知道這是不是真的?

回答

2

我確認這是造成這種情況的不良數據。我仍然沒有找到它的位置,但我正在回答這個問題,所以沒有人會浪費他們的時間。謝謝閱讀。