오라클 프로시저 out 타입이 SYS_CURSOR일 때 가능한가요?
- 작성자 :
- 정*교
- 작성일 :
- 2013-12-23 13:37:38
- 조회수 :
- 1,416
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
1. VO를 이용해서 처리할려고 합니다.
가. SqlMap.xml 내용
<!-- 거래명세서 목록조회 프로시저 -->
<parameterMap id="getSpecList" class="SotInterfaceVO">
<parameter property="p_ship_org_id" jdbcType="NUMERIC" javaType="int" mode="IN" />
<parameter property="o_cursor" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" />
</parameterMap>
<resultMap id="getSpecListParam" class="SotInterfaceVO">
<result property="shipToOrgId" column="SHIP_TO_ORG_ID" columnIndex="1" />
<result property="location" column="LOCATION" columnIndex="2" />
<result property="barcode" column="BARCODE" columnIndex="3" />
</resultMap>
<procedure id="sotIFDAO.getSpecList" resultMap="getSpecListParam" parameterMap="getSpecList">
{call LIS.SOT_SEARCH_SPEC(?, ?)}
</procedure>
나. 스토어프로시저 내용
CREATE OR REPLACE PROCEDURE LSOT_SEARCH_SPEC (
p_ship_to_org_id IN NUMBER
, o_cursor OUT SYS_REFCURSOR
) IS
v_message VARCHAR2(4000);
BEGIN
OPEN o_cursor FOR
SELECT DISTINCT ship_to_org_id
, location
, barcode
FROM ( SELECT ship_to_org_id AS ship_to_org_id
:
;
END SOT_SEARCH_SPEC;
프로시저는 틀린부분이 없습니다. 확인 다 했습니다.
다. VO
public class SotInterfaceVO extends ComDefaultVO{
// 공통
private String outResult;
private String outMessage;
private Object outCursor;
// 로그인
private String userId;
private String userPw;
private Integer shipToSiteUseId;
private String shipToLocation;
// 가맹점 목록 조회
private Integer areaCode;
// 거래명세서 목록 조회
private Integer storeID;
private Integer shipToOrgId;
private String location;
private String barcode;
:
:
getter, setter메소드 다 생성되어 있습니다.
질문내용
1. Oracle에서 out 타입이 SYS_REFCURSOR일 때 VO를 이용해서 처리하고 싶습니다. 가능한가요?
가. o_cursor가 Object 타입으로 VO에 설정했는데 어떤 객체로 선언을 해야 합니까?
2. VO를 이용하여 프로시저 SYS_REFCURSOR로 반환하는 예제가 없나요?
3. CallableStatement를 사용하지 않고 list()로 처리할 방법이 없나요?
감사합니다.
가. SqlMap.xml 내용
<!-- 거래명세서 목록조회 프로시저 -->
<parameterMap id="getSpecList" class="SotInterfaceVO">
<parameter property="p_ship_org_id" jdbcType="NUMERIC" javaType="int" mode="IN" />
<parameter property="o_cursor" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" />
</parameterMap>
<resultMap id="getSpecListParam" class="SotInterfaceVO">
<result property="shipToOrgId" column="SHIP_TO_ORG_ID" columnIndex="1" />
<result property="location" column="LOCATION" columnIndex="2" />
<result property="barcode" column="BARCODE" columnIndex="3" />
</resultMap>
<procedure id="sotIFDAO.getSpecList" resultMap="getSpecListParam" parameterMap="getSpecList">
{call LIS.SOT_SEARCH_SPEC(?, ?)}
</procedure>
나. 스토어프로시저 내용
CREATE OR REPLACE PROCEDURE LSOT_SEARCH_SPEC (
p_ship_to_org_id IN NUMBER
, o_cursor OUT SYS_REFCURSOR
) IS
v_message VARCHAR2(4000);
BEGIN
OPEN o_cursor FOR
SELECT DISTINCT ship_to_org_id
, location
, barcode
FROM ( SELECT ship_to_org_id AS ship_to_org_id
:
;
END SOT_SEARCH_SPEC;
프로시저는 틀린부분이 없습니다. 확인 다 했습니다.
다. VO
public class SotInterfaceVO extends ComDefaultVO{
// 공통
private String outResult;
private String outMessage;
private Object outCursor;
// 로그인
private String userId;
private String userPw;
private Integer shipToSiteUseId;
private String shipToLocation;
// 가맹점 목록 조회
private Integer areaCode;
// 거래명세서 목록 조회
private Integer storeID;
private Integer shipToOrgId;
private String location;
private String barcode;
:
:
getter, setter메소드 다 생성되어 있습니다.
질문내용
1. Oracle에서 out 타입이 SYS_REFCURSOR일 때 VO를 이용해서 처리하고 싶습니다. 가능한가요?
가. o_cursor가 Object 타입으로 VO에 설정했는데 어떤 객체로 선언을 해야 합니까?
2. VO를 이용하여 프로시저 SYS_REFCURSOR로 반환하는 예제가 없나요?
3. CallableStatement를 사용하지 않고 list()로 처리할 방법이 없나요?
감사합니다.
A
안녕하세요. 정은교님.
현재 오류는 SotInterfaceVO 상에 o_cursor property(getter)가 없어서 발생된 오류입니다.
parameterMap 상에 지정하신 2개의 property (p_ship_org_id, o_cursor)의 경우 VO에 getter/setter를 지정하셔야 합니다.
추가로 요청하신 SYS_REFCURSOR 사용 부분에 대한 별도의 예제가 없으면, 되도록 특정 DBMS에 종속적인 기능은 배제하는 것이 좋으실 것 같습니다. (사용하신 procedure 부분은 일반 query로 변환 가능할 것으로 판단)
그럼, 즐거운 하루되십시오.
감사합니다.
현재 오류는 SotInterfaceVO 상에 o_cursor property(getter)가 없어서 발생된 오류입니다.
parameterMap 상에 지정하신 2개의 property (p_ship_org_id, o_cursor)의 경우 VO에 getter/setter를 지정하셔야 합니다.
추가로 요청하신 SYS_REFCURSOR 사용 부분에 대한 별도의 예제가 없으면, 되도록 특정 DBMS에 종속적인 기능은 배제하는 것이 좋으실 것 같습니다. (사용하신 procedure 부분은 일반 query로 변환 가능할 것으로 판단)
그럼, 즐거운 하루되십시오.
감사합니다.