프로시저 호출시 리턴값이 안넘어 옵니다.
- 작성자 :
- 김*우
- 작성일 :
- 2015-03-12 11:37:24
- 조회수 :
- 1,827
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
1. 프로시저
PROCEDURE test3_pro
(
v_selno IN VARCHAR2,
out_str OUT VARCHAR2
) AS
BEGIN
SELECT COUNT(*) INTO out_str
FROM SPACE_TEST
WHERE COLUMN1 = v_selno;
END test3_pro;
2. 매퍼
<parameterMap id="paramMap" class="java.util.HashMap">
<parameter property="selno" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="out_str" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
</parameterMap>
<procedure id="selectTestProc2" parameterMap="paramMap">
<![CDATA[
{call SPC_Q_TEST.test3_pro(?, ?)}
]]>
</procedure>
3. DAO
public List<HashMap> selectTestProc2(SpaceStatusVO vo)
throws Exception {
List<HashMap> sqlRes = null;
try {
Map<String, Object> params = new HashMap<String, Object>();
params.put("selno", vo.getSelno());
sqlRes = (List<HashMap>) this.list("selectTestProc2", params);
} catch (Exception e) {
e.printStackTrace();
}
return sqlRes;
}
DB는 오라클입니다.
프로시저는 따로 실행해 보면 카운트 값이 2개 나오게 되어 있습니다.
리턴값 sqlRes.size() 를 찍어보면 0 이 나옵니다.......
이래 저래 다양하게 해봤는데도 안되네요....ㅜㅡ
PROCEDURE test3_pro
(
v_selno IN VARCHAR2,
out_str OUT VARCHAR2
) AS
BEGIN
SELECT COUNT(*) INTO out_str
FROM SPACE_TEST
WHERE COLUMN1 = v_selno;
END test3_pro;
2. 매퍼
<parameterMap id="paramMap" class="java.util.HashMap">
<parameter property="selno" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
<parameter property="out_str" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
</parameterMap>
<procedure id="selectTestProc2" parameterMap="paramMap">
<![CDATA[
{call SPC_Q_TEST.test3_pro(?, ?)}
]]>
</procedure>
3. DAO
public List<HashMap> selectTestProc2(SpaceStatusVO vo)
throws Exception {
List<HashMap> sqlRes = null;
try {
Map<String, Object> params = new HashMap<String, Object>();
params.put("selno", vo.getSelno());
sqlRes = (List<HashMap>) this.list("selectTestProc2", params);
} catch (Exception e) {
e.printStackTrace();
}
return sqlRes;
}
DB는 오라클입니다.
프로시저는 따로 실행해 보면 카운트 값이 2개 나오게 되어 있습니다.
리턴값 sqlRes.size() 를 찍어보면 0 이 나옵니다.......
이래 저래 다양하게 해봤는데도 안되네요....ㅜㅡ
A
안녕하세요. 김대우님.
OUT를 String로 했기 때문에 결과값을 다중으로 담지 못합니다.
다중으로 담으려면 ORACLECURSOR 를 사용 하시면 될꺼 같습니다.
사용법은 아래 참고 하시면 될꺼 같습니다.
---------------------------------------------------------
오라클 9 하위 > REF CURSOR
오라클 9 이상 > SYS_REFCURSOR
PROCEDURE test3_pro
(
v_selno IN VARCHAR2,
result_cursor OUT SYS_REFCURSOR,
) AS
BEGIN
OPEN result_cursor FOR SELECT * FROM Products;
SELECT COUNT(*) INTO out_str
FROM SPACE_TEST
WHERE COLUMN1 = v_selno;
END test3_pro;
<parameter property="result_cursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
Map map = new HashMap();
map.put("selno", "1");
map = select("getAdaptorStatus", map);
OUT를 String로 했기 때문에 결과값을 다중으로 담지 못합니다.
다중으로 담으려면 ORACLECURSOR 를 사용 하시면 될꺼 같습니다.
사용법은 아래 참고 하시면 될꺼 같습니다.
---------------------------------------------------------
오라클 9 하위 > REF CURSOR
오라클 9 이상 > SYS_REFCURSOR
PROCEDURE test3_pro
(
v_selno IN VARCHAR2,
result_cursor OUT SYS_REFCURSOR,
) AS
BEGIN
OPEN result_cursor FOR SELECT * FROM Products;
SELECT COUNT(*) INTO out_str
FROM SPACE_TEST
WHERE COLUMN1 = v_selno;
END test3_pro;
<parameter property="result_cursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
Map map = new HashMap();
map.put("selno", "1");
map = select("getAdaptorStatus", map);