Package내 프로시져 호출실 결과를 ResultSet을 받을 수있을까요
- 작성자 :
- 이*호
- 작성일 :
- 2015-09-03 17:37:51
- 조회수 :
- 938
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요
전장정부프레임워크로 처음 개발하는 개발자 이인호입니다.
시작하는 프로젝트에서 모든 쿼리를 Package화 하여 사용을 한다고 해서
Package를 호출하여 REF CURSOR를 결과로 받아서 처리를 하고자 합니다.
CURSOR의 결과를 ResultSet으로 받아서 처리를 할 수 는 없는지 궁금합니다.
제가 테스트하고 있는 SQL_MAP 입니다.
<parameterMap class="map" id="getInfoParam">
<parameter property="p_full_name" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" nullValue="true"/>
<parameter property="p_gender" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" nullValue="true"/>
<parameter property="r_res" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"/>
</parameterMap>
<procedure id="sampleDAO.procedurSmapleObject" parameterMap="getInfoParam" >
{ call usrqsa.pkg_test.sp_que_test(?,?,?) }
</procedure>
이런식으로 호출를 해서 결과를 받아서
ResultSet을 Lsit<Map>으로 전달을 할려고 하는데 잘 안되고 있습니다.
호출하는 DAO 는
public List<?> procedurSmapleObject(SampleVO sampleVO) throws Exception {
HashMap map = new HashMap();
map.put("p_full_name", "lee in ho");
map.put("p_gender", "1");
return getSqlMapClientTemplate().queryForList("sampleDAO.procedurSmapleObject", map);
}
이런 방법으로 할려고 하는데
어디선가는
RowHandler을 오버라이드 해서 사용하라고 되어 있는데 어떻게 해야 하는지 알수 있을까요??
수고하세요
전장정부프레임워크로 처음 개발하는 개발자 이인호입니다.
시작하는 프로젝트에서 모든 쿼리를 Package화 하여 사용을 한다고 해서
Package를 호출하여 REF CURSOR를 결과로 받아서 처리를 하고자 합니다.
CURSOR의 결과를 ResultSet으로 받아서 처리를 할 수 는 없는지 궁금합니다.
제가 테스트하고 있는 SQL_MAP 입니다.
<parameterMap class="map" id="getInfoParam">
<parameter property="p_full_name" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" nullValue="true"/>
<parameter property="p_gender" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" nullValue="true"/>
<parameter property="r_res" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"/>
</parameterMap>
<procedure id="sampleDAO.procedurSmapleObject" parameterMap="getInfoParam" >
{ call usrqsa.pkg_test.sp_que_test(?,?,?) }
</procedure>
이런식으로 호출를 해서 결과를 받아서
ResultSet을 Lsit<Map>으로 전달을 할려고 하는데 잘 안되고 있습니다.
호출하는 DAO 는
public List<?> procedurSmapleObject(SampleVO sampleVO) throws Exception {
HashMap map = new HashMap();
map.put("p_full_name", "lee in ho");
map.put("p_gender", "1");
return getSqlMapClientTemplate().queryForList("sampleDAO.procedurSmapleObject", map);
}
이런 방법으로 할려고 하는데
어디선가는
RowHandler을 오버라이드 해서 사용하라고 되어 있는데 어떻게 해야 하는지 알수 있을까요??
수고하세요
A
안녕하세요. 표준프레임워크센터입니다.
해당 내용을 확인해 보니 결과값을 받는 부분에 대한 선언이 없어서 오류가 발생한 것 같습니다.
<parameterMap> 엘리먼트는 쿼리를 실행하기 위해 넘어오는 parameter를 정의한 부분이기 때문에 결과값을 받기위해서는,
추가로 프로시저를 선언한 부분에 ResultClass나 resultmap 의 엘리먼트를 추가하여 결과값을 받는 타입을 선언해야 할 것 같습니다.
예시)
<procedure id="sampleDAO.procedurSmapleObject" parameterMap="getInfoParam" resultClass="java.util.HashMap">
{ call usrqsa.pkg_test.sp_que_test(?,?,?) }
</procedure>
호출하는 DAO는 기존 방식처럼 사용하시면 되고, 표준프레임워크의 EgovAbstractDAO를 상속하신 경우는 다음과 같이 list() 메소드를
호출하시면 됩니다.
예시)
return list("sampleDAO.procedurSmapleObject", map );
자세한 내용은 하단 링크의 내용을 참조해 보시기 바랍니다.
http://wjkim-info.tistory.com/610
http://finkle.tistory.com/41
감사합니다.
해당 내용을 확인해 보니 결과값을 받는 부분에 대한 선언이 없어서 오류가 발생한 것 같습니다.
<parameterMap> 엘리먼트는 쿼리를 실행하기 위해 넘어오는 parameter를 정의한 부분이기 때문에 결과값을 받기위해서는,
추가로 프로시저를 선언한 부분에 ResultClass나 resultmap 의 엘리먼트를 추가하여 결과값을 받는 타입을 선언해야 할 것 같습니다.
예시)
<procedure id="sampleDAO.procedurSmapleObject" parameterMap="getInfoParam" resultClass="java.util.HashMap">
{ call usrqsa.pkg_test.sp_que_test(?,?,?) }
</procedure>
호출하는 DAO는 기존 방식처럼 사용하시면 되고, 표준프레임워크의 EgovAbstractDAO를 상속하신 경우는 다음과 같이 list() 메소드를
호출하시면 됩니다.
예시)
return list("sampleDAO.procedurSmapleObject", map );
자세한 내용은 하단 링크의 내용을 참조해 보시기 바랍니다.
http://wjkim-info.tistory.com/610
http://finkle.tistory.com/41
감사합니다.