RefCursor result mapping fails ------------------------------ Key: IBATIS-453 URL: https://issues.apache.org/jira/browse/IBATIS-453 Project: iBatis for Java Issue Type: Bug Components: SQL Maps Affects Versions: 2.2.0 Reporter: adamb
http://opensource.atlassian.com/confluence/oss/pages/viewpage.action?pageId=5653 I am following this example, except that I am mapping back to a map rather than a java object. The result map expects the column names from the query, not from the definition of the ref cursor. The ResultSet in UnknownTypeHandler, debugged using Eclipse: String result=""; for(int i=1;i<=rs.getMetaData().getColumnCount();i++){ result+=String.format("(%s)%s\n",i,rs.getMetaData().getColumnName(i)); } return result; shows the following columns in the result set: (1)CLIENT_NO (2)MSD_NAME (3)MSD_BIRTH_DATE (4)SERVICE_SHORT_CODE (5)SERVICE_STATUS_DESC (6)SERVICE_START_DATE (7)SERVICE_END_DATE (8)MATCH_CASE_ID (9)MATCH_RUN_ID (10)MATCH_RUN_TYPE_DESC (11)MATCH_RUN_DATE (12)ASSIGNMENT_TYPE_ID (13)URGENT (14)SPECIAL_BENEFIT (15)HIGH_EARNINGS (16)ASSIGNED_USER_NAME (17)LAST_EVENT_DETAILS (18)CASE_RECORD_STATUS_DESC (19)PENDING_EVENT_DETAILS (20)CASEWHENMC.CASE_STATUS_CODE=:B10ANDMC.ASSIGNMENT_TYPE_ID!=:B5THENMR.OOT_TO_OPEN_DATEWHENMC.CASE_STATUS_CODEIN(:B9,:B8,:B7,:B6,:B11)ANDMC.ASSIGNMENT_TYPE_ID!=:B5THENMR.OOT_NO_OUTCOME_DATEWHENMC.CASE_STATUS_CODE=:B10ANDMC.ASSIGNMENT_TYPE_ID=:B5THENMR.ABC_OO (21)DISTRICT_NAME (22)GENDER (23)UNDER_INVESTIGATION (24)COMMISSION_SALES (25)CONTACT_869A (26)MULTI_CLIENT (27)LINK_ID (28)MATCHED_SERVICES (29)MATCHED_NAME (30)NVL(MREC.MATCHED_BIRTH_DATE,MC.MSD_BIRTH_DATE) (31)RELATION_IND (32)OS_PENSION (33)DPB_CSI (34)MATCH_IND (35)EMP_LEGAL_ACTION (36)MP (37)MATCH_IND_2 (38)MATCH_LEVEL (39)AGENCY_DETAIL_TYPE1 (40)AGENCY_IND1 (41)AGENCY_REFERENCE2 (42)AGENCY_REFERENCE1 (43)AGENCY_DETAIL_TYPE2 (44)REL (45)STDT However the definition is: TYPE MatchCase IS RECORD ( client_no ndm_match_case.client_no%TYPE, msd_name VARCHAR2(100), msd_birth_date ndm_match_case.msd_birth_date%TYPE, service_short_code ndm_service.service_short_code%TYPE, service_status_desc ndm_service_status.service_status_desc%TYPE, service_start_date ndm_match_case.service_start_date%TYPE, service_end_date ndm_match_case.service_end_date%TYPE, match_case_id ndm_match_case.match_case_id%TYPE, match_run_id ndm_match_case.match_run_id%TYPE, match_run_type_desc ndm_match_run_type.match_run_type_desc%TYPE, match_run_date ndm_match_run.match_run_date%TYPE, assignment_type_id ndm_match_case.assignment_type_id%TYPE, urgent VARCHAR2(3), special_benefit VARCHAR2(2), high_earnings VARCHAR2(2), assigned_name VARCHAR2(121), last_event_details VARCHAR2(100), case_record_status_desc ndm_case_record_status.case_record_status_desc%TYPE, pending_event_details VARCHAR2(100), milestone_date ndm_match_run.oot_to_open_date%TYPE, district_name ndm_district.district_name%TYPE, gender VARCHAR2(10), under_investigation VARCHAR2(3), commission_sales VARCHAR2(3), contact_869a VARCHAR2(5), multi_client VARCHAR2(1), link_id ndm_match_case.link_id%TYPE, matched_services VARCHAR2(100), matched_name VARCHAR2(122), matched_birth_date DATE, relation_ind ndm_match_case.relation_ind%TYPE, os_pension VARCHAR2(3), dpb_csi VARCHAR2(3), match_ind ndm_match_record.match_ind%TYPE, emp_legal_action VARCHAR2(2), mp VARCHAR2(3), match_ind_2 ndm_match_record.match_ind%TYPE, match_level ndm_match_record.match_level%TYPE, agency_detail_type1 ndm_match_record.agency_detail_type1%TYPE, agency_ind1 ndm_match_record.agency_ind1%TYPE, agency_reference2 ndm_match_record.agency_reference2%TYPE, agency_reference1 ndm_match_record.agency_reference1%TYPE, agency_detail_type2 ndm_match_record.agency_detail_type2%TYPE, rel VARCHAR2(5), stdt VARCHAR2(5) ); TYPE MatchCaseCur IS REF CURSOR RETURN MatchCase; As you can see, if I try to get column "assigned_name", "milestone_date", or "matched_birth_date" it will fail. SQLMAP: <resultMap id="viewCaseCaseHeaderBaseQueryResultMap" class="java.util.HashMap"> <result property="clientNo" column="CLIENT_NO"/> <result property="multiClient" column="MULTI_CLIENT"/> <result property="msdName" column="MSD_NAME"/> <result property="linkId" column="LINK_ID"/> <result property="agencyDetailType1" column="AGENCY_DETAIL_TYPE1"/> <result property="agencyInd1" column="AGENCY_IND1"/> <result property="agencyReference2" column="AGENCY_REFERENCE2"/> <result property="agencyReference1" column="AGENCY_REFERENCE1"/> <result property="agencyDetailType2" column="AGENCY_DETAIL_TYPE2"/> <result property="matchedServices" column="MATCHED_SERVICES"/> <result property="mp" column="MP"/> <result property="matchedName" column="MATCHED_NAME"/> <result property="matchedBirthDate" column="MATCHED_BIRTH_DATE"/> <result property="relationInd" column="RELATION_IND"/> <result property="msdBirthDate" column="MSD_BIRTH_DATE"/> <result property="serviceShortCode" column="SERVICE_SHORT_CODE"/> <result property="serviceStatusDesc" column="SERVICE_STATUS_DESC"/> <result property="serviceStartDate" column="SERVICE_START_DATE"/> <result property="serviceEndDate" column="SERVICE_END_DATE"/> <result property="districtName" column="DISTRICT_NAME"/> <result property="gender" column="GENDER"/> <result property="matchCaseId" column="MATCH_CASE_ID"/> <result property="matchRunTypeDesc" column="MATCH_RUN_TYPE_DESC"/> <result property="matchRunId" column="MATCH_RUN_ID"/> <result property="matchRunDate" column="MATCH_RUN_DATE"/> <result property="assignmentTypeId" column="ASSIGNMENT_TYPE_ID"/> <result property="matchInd2" column="MATCH_IND_2"/> <result property="matchLevel" column="MATCH_LEVEL"/> <result property="osPension" column="OS_PENSION"/> <result property="dpbCsi" column="DPB_CSI"/> <result property="urgent" column="URGENT"/> <result property="specialBenefit" column="SPECIAL_BENEFIT"/> <result property="highEarnings" column="HIGH_EARNINGS"/> <result property="rel" column="REL"/> <result property="assignedName" column="ASSIGNED_NAME"/> <result property="lastEventDetails" column="LAST_EVENT_DETAILS"/> <result property="matchInd" column="MATCH_IND"/> <result property="contact869a" column="CONTACT_869A"/> <result property="commissionSales" column="COMMISSION_SALES"/> <result property="underInvestigation" column="UNDER_INVESTIGATION"/> <result property="empLegalAction" column="EMP_LEGAL_ACTION"/> <result property="stdt" column="STDT"/> <result property="caseRecordStatusDesc" column="CASE_RECORD_STATUS_DESC"/> <result property="pendingEventDetails" column="PENDING_EVENT_DETAILS"/> <result property="milestoneDate" column="MILESTONE_DATE"/> </resultMap> <parameterMap id="viewCaseCaseHeaderBaseQueryParameterMap" class="map"> <parameter property="result" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" resultMap="viewCaseCaseHeaderBaseQueryResultMap"/> <parameter property="pMatchCaseId"/> </parameterMap> <procedure id="viewCaseCaseHeaderBaseQuery" parameterMap="viewCaseCaseHeaderBaseQueryParameterMap" >{call pkg_match_case.get_match_case(?,?)}</procedure> If I change the sqlMap from ORACLECURSOR to MATCHCASECUR I get: com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in nz/govt/msd/aimos/viewCase/server/CaseHeaderSqlMap.xml. --- The error occurred while executing query procedure. --- Check the {call pkg_match_case.get_match_case(?,?)}. --- Check the output parameters (register output parameters failed). --- Cause: java.sql.SQLException: Invalid column type Caused by: java.sql.SQLException: Invalid column type Note: This is just one of thousands of autogenerated mappings, so I can't just add aliases to every query in the database, or rename the map aliases. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.