for문과 다이나믹쿼리 into문 조합 0 0 2,320

by 삼만돌이 [SQL Query] for [2015.05.08 10:34:20]


받아오는 값에 따라서 into문의 수를 조절하고 싶은데요 방법이 없을까요..
찾아봐도 해답이 잘 안나오네요.
하단이 현재 만든 쿼리인데요, v_count수에 따라 select절을 조절은 했는데.. 문제는 into문의 변수가 문제네요..
갯수가 다르면 에러를 발생하니.. ㅠㅠ 어떻게 해결법이 없을까요..

oracle 버전은 10g입니다.

 

  V_COUNT := TO_NUMBER(P_COUNT);
    V_SQL := 'select ';   
   
    FOR i IN 1..V_COUNT LOOP          
   
           IF i = V_COUNT THEN
                V_SQL := ' max(decode(seq, ' || i || ',layer_column_eng)) aa' || i || '';
           ELSE
                V_SQL := ' max(decode(seq, ' || i || ',layer_column_eng)) aa' || i || ',';          
           END IF;
                                
    END LOOP;
                   
    V_SQL := V_SQL || ' from ( select rownum seq, layer_column_eng from CUSTOM_CONTROL_LOCAL where LAYER_NM = ''' || P_LAYERNM || ''')' ;

    execute immediate V_SQL into V_COLUMN1, V_COLUMN2, V_COLUMN3, V_COLUMN4, V_COLUMN5, V_COLUMN6, V_COLUMN7
    , V_COLUMN7, V_COLUMN8, V_COLUMN9, V_COLUMN10, V_COLUMN11, V_COLUMN12, V_COLUMN13, V_COLUMN14, V_COLUMN15, V_COLUMN16
    , V_COLUMN17, V_COLUMN18, V_COLUMN19, V_COLUMN20, V_COLUMN21, V_COLUMN22, V_COLUMN23, V_COLUMN24, V_COLUMN25;

  

//이부분은 위에 부분이 해결되면 위에 for문처럼 수정할 예정입니다.
    V_MAIN_SQL := ' select ';
    V_MAIN_SQL := V_MAIN_SQL || V_COLUMN1 || ',' || V_COLUMN2 || ',' || V_COLUMN3 ;
    V_MAIN_SQL := V_MAIN_SQL || ' from ' || P_LAYERNM || '';
    V_MAIN_SQL := V_MAIN_SQL || '  where keys = '14110'' ';

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