Oracle Type을 이용해 Procedure 처리 결과를 Record 형태로 Return하는 방법을 찾은 이후, 많이 애용( ? ) 해 왔는데요…
그간 이놈이 조금 불편했던 점 중 1가지 가 있었습니다.
불편했던 점: Type을 쓸려면, 다음과 같이 초기화를 합니다.
예) m_tbl_pricemgr_info.extend;
m_tbl_pricemgr_info(1) := ty_pricemgr_info(null,null,null,null); -- type에 속성이 4개 인 경우
그 이후, Type에 속성을 추가 하여 Compile 하면, 기존에 Type을 초기화 했던 부분을 찾아 모두 다음과 같이 수정 해 줘야 했었습니다.
예) m_tbl_pricemgr_info.extend;
m_tbl_pricemgr_info(1) := ty_pricemgr_info(null,null,null,null,null); -- type에 속성이 4개 에 1개 추가 한 경우
해당 Type을 쓴 Procedure가 5개 이면, 5개 모두 Complile 에러가 발생 하며, 해당 부분을 모두 고쳐 줘야 정상적으로 compile 됬었습니다,
이제 Type에 다음과 같이 Constructor Method를 추가 함으로써, 문제를 해 결 할 수 있습니다.
CREATE OR REPLACE TYPE TY_PRICEMGR_INFO AS OBJECT
(
GOODS_NO NUMBER,
RSRV_RT NUMBER, --적립율
rsrv_amt NUMBER, --적립금
ngs_yn VARCHAR2(1), --신상품여부
pr_txt_nm VARCHAR2(100),
constructor function TY_PRICEMGR_INFO(GOODS_NO number)
return self as result
);
create or replace type body TY_PRICEMGR_INFO is
CONSTRUCTOR FUNCTION TY_PRICEMGR_INFO(GOODS_NO number) RETURN SELF AS RESULT
AS
BEGIN
SELF.GOODS_NO := GOODS_NO;
return;
END;
end;
이렇게 Type의 헤더와 Body를 생성 하면,, 이후 부터는
예) m_tbl_pricemgr_info.extend;
m_tbl_pricemgr_info(1) := ty_pricemgr_info(null); -- type에 속성이 추가 되어도 계속 정상적으로 compile 됨
많은 도움이 되리라 확신합니다.
이상입니다….