프로시져 리턴관련 문의
- 작성자 :
- 오*인
- 작성일 :
- 2016-10-06 17:29:20
- 조회수 :
- 1,260
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
프로시져 리턴 관련 문의를 드립니다. 개발환경은 oracle weblogic입니다.
----------------------------------plsql---------------------------------------
create or replace procedure test(
aa in varchar2,
bb in varchar2,
cc out varchar2
)
is
begin
... 로직
cc := '1';
end test;
-------------------------------xml----------------------------
<parameterMap id="paramMap" class="java.util.HashMap">
<parameter property="aa" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="bb" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="cc" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
</parameterMap>
<procedure id="testPro" parameterMap="paramMap">
<![CDATA[ {CALL test(?,?,?)} ]]>
</procedure>
------------------------------dao----------------------------------
public String testPro(String aa, String bb) throws Exception{
HashMap map = new HashMap();
map.put("aa",aa);
map.put("bb",bb);
return (String) selectByPk("testPro",map);
}
이렇게 해서 service에서 dao를 호출한후 결과값을 불러와도 null이 나옵니다. 결과값 받는 방식이 잘못된건지 문의드립니다.
----------------------------------plsql---------------------------------------
create or replace procedure test(
aa in varchar2,
bb in varchar2,
cc out varchar2
)
is
begin
... 로직
cc := '1';
end test;
-------------------------------xml----------------------------
<parameterMap id="paramMap" class="java.util.HashMap">
<parameter property="aa" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="bb" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="cc" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
</parameterMap>
<procedure id="testPro" parameterMap="paramMap">
<![CDATA[ {CALL test(?,?,?)} ]]>
</procedure>
------------------------------dao----------------------------------
public String testPro(String aa, String bb) throws Exception{
HashMap map = new HashMap();
map.put("aa",aa);
map.put("bb",bb);
return (String) selectByPk("testPro",map);
}
이렇게 해서 service에서 dao를 호출한후 결과값을 불러와도 null이 나옵니다. 결과값 받는 방식이 잘못된건지 문의드립니다.
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
감사합니다.