프로그래밍
[JAVA] iBatis 에서 오라클 프로시저 호출하기
ReturnToHome
2016. 12. 24. 20:48
오라클에서는 프로시저 내부에서 NUMBER 를 BIGDECIMAL 로 변환해서 사용한다고 한다.
그래서 iBatis 에서 선언 시
IN 변수는 number
OUT 변수는 decimal
로 설정해줘야 한다.
-- Controller
HashMap requestMap = new HashMap();
requestMap.put("REQUEST_PARAM_STR", "AA");
requestMap.put("REQUSET_PARAM_NUM", 100);
service.callProceduer(requestMap);
String resultCode = requestMap.get("RESULT_CODE");
String resultMsg = requestmap.get("RESULT_MSG");
System.out.println(resultCode);
System.out.println(resultMsg);
-- Service
public HashMap callProceduer(Map requestMap) throws ServiceException {
try {
return dao.callProceduer(requestMap);
} catch (Exception e) {
// throw Exception('error');
}
}
-- Dao
public HashMap callProceduer(Map requestMap) throws DaoException {
return (HashMap) queryForObject("callProceduer", requestMap);
}
-- iBatis
<parameterMap id="proceduerResultMap" class="java.util.Map">
<parameter property="REQUEST_PARAM_STR" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="REQUSET_PARAM_NUM" javaType="java.lang.Integer" jdbcType="NUMBER" mode="IN" />
<parameter property="RESULT_CODE" javaType="java.lang.Integer" jdbcType="DECIMAL" mode="OUT" />
<parameter property="RESULT_MSG" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />
</parameterMap>
<procedure id="callProceduer" parameterMap="proceduerResultMap">
<![CDATA[
{ CALL PROC_USER_PROCEDUER(?,?,?,?) }
]]>
</procedure>
-- Proceduer
create or replace PROCEDURE PROC_USER_PROCEDUER
(
REQUEST_PARAM_STR VARCHAR2
, REQUSET_PARAM_NUM NUMBER
, RESULT_CODE OUT NUMBER
, RESULT_MSG OUT VARCHAR2
)
IS
BEGIN
-- 업무 로직 수행
RESULT_CODE := 0;
RESULT_MSG := 'SUCCESS';
END;