PROCEDURE의 CURSOR 응답을 받지 못함
- 작성자 :
- 김*근
- 작성일 :
- 2024-02-20 16:02:56
- 조회수 :
- 678
- 구분 :
- 개발환경 / 3.10
- 진행상태 :
- 완료
Q
안녕하십니까? 프로시저에서 동적생성한 결과를 리턴받으려고 하는데 자바단에서 null이 리턴됩니다.
1, 프로시저
create or replace NONEDITIONABLE PROCEDURE 프로시저명(
P_DATE IN VARCHAR2,
P_DIVS IN VARCHAR2,
O_CURSOR OUT SYS_REFCURSOR
) IS ~ 중략
OPEN O_CURSOR FOR V_SQL;
END ;
프로시저에서는 동적 SQL을 생성하여 커서로 리턴을 하였습니다. SQL DEVELOPER 상에서 EXEC 프로시저 한결과 커서를 정상 리턴받음을 확인하였습니다.
2. JAVA IMPL
XXXDAO.selectPROCEDURE(inputMap);
3. JAVA DAO
list("XXXDAO.call_PRCEDURE", inputMap);
4. JAVA XML
<parameterMap id="MYID" class="java.util.Map">
<parameter property="INPUTPARAM1" jdbcType="VARCHAR" javaType="String" mode="IN"/>
<parameter property="INPUTPARAM2" jdbcType="VARCHAR" javaType="String" mode="IN"/>
<parameter property="outputCursor" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"/>
</parameterMap>
<procedure id="XXXDAO.call_PRCEDURE"S" parameterMap="MYID">
{ CALL 프로시저명(?, ?, ?) }
</procedure>
5. 결과 로그
DEBUG [jdbc.sqltiming:230] 3. { CALL 프로시저명('20230131', 'S', <OUT>) } {executed in 85 msec}
DEBUG [jdbc.audit:152] 3. CallableStatement.execute() returned false
DEBUG [jdbc.audit:152] 3. CallableStatement.getResultSet() returned null
DEBUG [jdbc.audit:152] 3. Connection.getMetaData() returned oracle.jdbc.driver.OracleDatabaseMetaData@67376f7
DEBUG [jdbc.audit:152] 3. CallableStatement.getUpdateCount() returned -1
DEBUG [jdbc.audit:152] 3. Connection.getMetaData() returned oracle.jdbc.driver.OracleDatabaseMetaData@67376f7
DEBUG [jdbc.audit:152] 3. CallableStatement.getObject(3) returned oracle.jdbc.driver.ForwardOnlyResultSet@6ddb8907
DEBUG [jdbc.audit:152] 3. CallableStatement.clearParameters() returned
결과값을 찍어보면 null입니다.. 무엇이 문제일까요 ㅠ
1, 프로시저
create or replace NONEDITIONABLE PROCEDURE 프로시저명(
P_DATE IN VARCHAR2,
P_DIVS IN VARCHAR2,
O_CURSOR OUT SYS_REFCURSOR
) IS ~ 중략
OPEN O_CURSOR FOR V_SQL;
END ;
프로시저에서는 동적 SQL을 생성하여 커서로 리턴을 하였습니다. SQL DEVELOPER 상에서 EXEC 프로시저 한결과 커서를 정상 리턴받음을 확인하였습니다.
2. JAVA IMPL
XXXDAO.selectPROCEDURE(inputMap);
3. JAVA DAO
list("XXXDAO.call_PRCEDURE", inputMap);
4. JAVA XML
<parameterMap id="MYID" class="java.util.Map">
<parameter property="INPUTPARAM1" jdbcType="VARCHAR" javaType="String" mode="IN"/>
<parameter property="INPUTPARAM2" jdbcType="VARCHAR" javaType="String" mode="IN"/>
<parameter property="outputCursor" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"/>
</parameterMap>
<procedure id="XXXDAO.call_PRCEDURE"S" parameterMap="MYID">
{ CALL 프로시저명(?, ?, ?) }
</procedure>
5. 결과 로그
DEBUG [jdbc.sqltiming:230] 3. { CALL 프로시저명('20230131', 'S', <OUT>) } {executed in 85 msec}
DEBUG [jdbc.audit:152] 3. CallableStatement.execute() returned false
DEBUG [jdbc.audit:152] 3. CallableStatement.getResultSet() returned null
DEBUG [jdbc.audit:152] 3. Connection.getMetaData() returned oracle.jdbc.driver.OracleDatabaseMetaData@67376f7
DEBUG [jdbc.audit:152] 3. CallableStatement.getUpdateCount() returned -1
DEBUG [jdbc.audit:152] 3. Connection.getMetaData() returned oracle.jdbc.driver.OracleDatabaseMetaData@67376f7
DEBUG [jdbc.audit:152] 3. CallableStatement.getObject(3) returned oracle.jdbc.driver.ForwardOnlyResultSet@6ddb8907
DEBUG [jdbc.audit:152] 3. CallableStatement.clearParameters() returned
결과값을 찍어보면 null입니다.. 무엇이 문제일까요 ㅠ
환경정보
-
- OS 정보 :
- 표준프레임워크 버전 : 3.10
- JDK(JRE) 정보 : 1.8
- WAS 정보 : tomcat
- DB 정보 : oracle 19c
- 기타 환경 정보 : ojdbc8
A
안녕하세요.
표준프레임워크센터입니다.
첨부하신 내용으로만 보면 parameterMap 설정에서 커서를 통해
전달받은 값을 담기 위한 resultMap 설정이 필요해 보입니다.
resultMap 구성하고 procedure와 parameterMap의 outputCursor에
추가해보시기 바랍니다.
감사합니다.
표준프레임워크센터입니다.
첨부하신 내용으로만 보면 parameterMap 설정에서 커서를 통해
전달받은 값을 담기 위한 resultMap 설정이 필요해 보입니다.
resultMap 구성하고 procedure와 parameterMap의 outputCursor에
추가해보시기 바랍니다.
감사합니다.