ORACLE - 임시테이블을 사용하지 않고 데이터 만들기 문의 0 3 2,050

by 방랑자 [PL/SQL] [2022.12.09 10:34:07]


안녕하세요.
임시테이블을 사용하지 않고 동일한 결과를 만들수 있는지 질문드립니다.

 

     V_END_SEQ NUMBER(2);
     V_ST_SEQ  NUMBER(2);

 CURSOR C1 IS 
         SELECT '7' FROM DUAL ;

             --> 결과 : 숫자를 반환 : EX) 7


                
     CURSOR C2 IS 
         SELECT '1' FROM DUAL ;

           --> 숫자를 반환 : EX) 1
                
     type  array_t is varray(40) of varchar2(100);
     array array_t := array_t(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);  --> 숫자안에 포함될 경우의 수 지정 최대 20               
               
BEGIN

    V_SQL :=' TRUNCATE TABLE TMP_TABLE ';
    EXECUTE IMMEDIATE V_SQL;
    -- 임시테이블을 클리어    


    OPEN C1; OPEN C2; -- 1 과 7
    
    LOOP 
    
    FETCH C1 INTO V_END_SEQ ; FETCH C2 INTO V_ST_SEQ ;
        
    EXIT WHEN C1%NOTFOUND;

     for i in V_ST_SEQ..V_END_SEQ loop -- 1에서 7까지의 반복
       V_SQL :='INSERT INTO TMP_TABLE SELECT '||array(i)||' FROM DUAL';
       EXECUTE IMMEDIATE V_SQL;
       COMMIT;
     end loop;
    
      -- 결과 TMP컬럼  : 

--- TBXZZC099  : TMP ---

1

2

3

4

5

6

7

----- 

위와 같이 임시 테이블 없이.. 연속하는 숫자의 값을 구하고 싶습니다.

감사합니다. ㅜㅜ 

수고하세요  

 

 

 

by pajama [2022.12.09 10:53:00]

계층쿼리로 가능합니다~

select level from dual connect by level < 8


by 마농 [2022.12.09 10:54:50]
SELECT s + LEVEL - 1 seq
  FROM (SELECT 1 s, 7 e FROM dual)
 CONNECT BY LEVEL <= e - s + 1
;
http://gurubee.net/article/55635

 


by 방랑자 [2022.12.09 11:25:55]

정말 감사드립니다. ㅠㅠ 

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