아이바티스에서 프로시저를 호출하고 싶습니다.
- 작성자 :
- 박*희
- 작성일 :
- 2015-12-31 10:00:56
- 조회수 :
- 3,707
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
프로시저==========================
CREATE OR REPLACE PROCEDURE SCM.TEST
(
pLIST_CURSOR OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN pLIST_CURSOR FOR
SELECT AREA_CODE AS Code,
CTPRVN_NM AS CodeNm
FROM TCM_ADSTRD
WHERE AREA_CODE LIKE '%00000000'
ORDER BY AREA_CODE;
RETURN;
END;
=======설정
org.apache.ibatis.type.JdbcType.java에 TB_CURSOR(-17) 추가
=======SQL맵퍼
<parameterMap id="outProcedureMap" class="java.util.HashMap">
<parameter property="pep" jdbcType="TB_CURSOR" mode="OUT" />
</parameterMap>
<procedure id="COM_SQL.Area01CodeService" parameterMap="outProcedureMap" resultClass="java.util.HashMap">
<![ CDATA[{call SCM.TEST(?)} ]]>
</procedure>
=================이렇게 호출한 결과
Check the {call SCM.TEST(?)}.
Check the output parameters (register output parameters failed).
Cause: java.sql.SQLException: JDBC-590704:Unsupported SQL type. - -99999999; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
이 뜹니다. 커서가 아닌 VARCHAR값인 경우 정상적으로 받는걸 확인했습니다.
CREATE OR REPLACE PROCEDURE SCM.TEST
(
pLIST_CURSOR OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN pLIST_CURSOR FOR
SELECT AREA_CODE AS Code,
CTPRVN_NM AS CodeNm
FROM TCM_ADSTRD
WHERE AREA_CODE LIKE '%00000000'
ORDER BY AREA_CODE;
RETURN;
END;
=======설정
org.apache.ibatis.type.JdbcType.java에 TB_CURSOR(-17) 추가
=======SQL맵퍼
<parameterMap id="outProcedureMap" class="java.util.HashMap">
<parameter property="pep" jdbcType="TB_CURSOR" mode="OUT" />
</parameterMap>
<procedure id="COM_SQL.Area01CodeService" parameterMap="outProcedureMap" resultClass="java.util.HashMap">
<![ CDATA[{call SCM.TEST(?)} ]]>
</procedure>
=================이렇게 호출한 결과
Check the {call SCM.TEST(?)}.
Check the output parameters (register output parameters failed).
Cause: java.sql.SQLException: JDBC-590704:Unsupported SQL type. - -99999999; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
이 뜹니다. 커서가 아닌 VARCHAR값인 경우 정상적으로 받는걸 확인했습니다.
A
박영희님, 안녕하세요.
올려주신 코드 자체에는 특별한 문제는 없는 것으로 보여집니다.
String(varchar)타입일 경우 정상동작하고, 오류 로그에서 파라미터 등록에 실패했다는 메세지로 추측하였을때는 별도로 커스터마이징하여 등록하신 jdbcType TB_CURSOR에 문제가 있지 않을까 추측 됩니다.
검색 결과 일부 db에서 ibatis에서의 커서 리턴부분에 대해 지원이 안되는 내용을 확인할 수 있었습니다. db벤더사에 문의하심이 좀더 정확한 답변을 받아보실 수 있을 것 같습니다.
센터 내부적으로도 좀 더 확인해봐야 할 부분인 것 같습니다.
감사합니다.
올려주신 코드 자체에는 특별한 문제는 없는 것으로 보여집니다.
String(varchar)타입일 경우 정상동작하고, 오류 로그에서 파라미터 등록에 실패했다는 메세지로 추측하였을때는 별도로 커스터마이징하여 등록하신 jdbcType TB_CURSOR에 문제가 있지 않을까 추측 됩니다.
검색 결과 일부 db에서 ibatis에서의 커서 리턴부분에 대해 지원이 안되는 내용을 확인할 수 있었습니다. db벤더사에 문의하심이 좀더 정확한 답변을 받아보실 수 있을 것 같습니다.
센터 내부적으로도 좀 더 확인해봐야 할 부분인 것 같습니다.
감사합니다.