type으로 선언된 table에 row 추가하고 싶습니다. 0 4 2,231

by 또바기 [PL/SQL] type array function table [2018.06.08 18:11:55]


FUNCTION의 SQL을 작성하는 중 WHERE 조건을 조금 더 유동적으로 하고자 TABLE 타입의 OBJECT를 생성하였습니다.

 

1. 사용하고자 하는 SQL 쿼리

SELECT GUAGEDATE, SUM(SWEIGHT) AS SUM_SWEIGHT
                         FROM GUGUAGEMST A
                        WHERE GU_GBN > 0
                          AND A.GUAGEDATE BETWEEN yymm||'01' AND yymm||'31'
                          AND A.SMODE <> 'D'
                          AND A.STATUS = 'O'
                          AND (('N'= start_gbn and fheapcd like '%') 
                            or ('Y'= start_gbn and fheapcd in 
                                    (SELECT COLUMN_VALUE 
                                       FROM TABLE(starting_arr)

                                     )
                                )
                               )
                        GROUP BY GUAGEDATE

;

 

이를 사용하고자 starting_arr를 아래와 같이 선언했습니다.

starting_arr array_get_obj_table := array_get_obj_table();

 

또 array_get_obj_table 이 테이블 타입을 사용하고자 아래와 같은 object를 만들었습니다.;

create or replace type array_get_obj_table as table of varchar2(30);

 

제가 궁금한거 이 테이블을 사용하고 할 때 여러 변수를 넣는 것입니다. 

starting_arr := array_get_obj_table('2G','3G','4G','5G');

위와 같이 추가하면 4개의 ROW로 잘 만들어집니다만..

저 변수들의 추출을 ARRAY로 진행함에 따라 원하는 구문은

for i in 1..W_START_ARY.COUNT loop 
      
      starting_arr := array_get_obj_table(W_START_ARY(i));
      
    end loop; 

하는 방식으로 FOR 문을 이용해 추가하고 싶습니다. 

저 중간에 선언방식은... 엎어치기가 되고 있습니다.

추가하는 방법이 있을까 싶습니다. 

고수님들 부탁드리겠습니다. 

 

 

by 마농 [2018.06.11 09:38:13]

- 변경전 : starting_arr := array_get_obj_table(W_START_ARY(i));
- 변경후 : starting_arr(i) := W_START_ARY(i);


by 또바기 [2018.06.11 13:58:31]

감사합니다. 완벽하게 작동하고 있습니다.ㅜㅜ 2,3일을 고민했는데 감사합니다.


by 마농 [2018.06.11 14:59:36]

루프 안돌리고 바로 넣어도 될 듯 한데요.
- starting_arr := W_START_ARY;


by 또바기 [2018.06.12 09:41:24]

루프에 안돌리고 바로 넣어보니 PLS-00382 식이 잘못된 유형입니다. 라는 에러가 나네요

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입