PL/SQL FOR 루프문 0 7 3,811

by 배고파 [2011.07.11 13:27:35]


안녕하세요...
아래 소스를 컴파일 하면 에러는 없는데 실행 시키면 오라클 에러가 뜨네요..
이유가 무엇인지.. 감이 안잡히네요.. 많은 조언 부탁드립니다.

    /*-------------------------------------------------
    변수 선언
    -------------------------------------------------*/
   
TYPE v_SRC_STR   IS TABLE OF TAB_1.COL1%TYPE;
TYPE v_OBJ_STR   IS TABLE OF TAB_1.COL2%TYPE;
TYPE v_VAR_NM    IS TABLE OF TAB_2.COL1%TYPE;
TYPE v_VAR_VALUE IS TABLE OF TAB_2.COL2%TYPE;   

SRC_STR   v_SRC_STR;
OBJ_STR   v_OBJ_STR;
VAR_NM    v_VAR_NM;
VAR_VALUE     v_VAR_VALUE;

i   NUMBER(4) := 0; 
j   NUMBER(4) := 0;  

    /*-------------------------------------------------
    변수 선언 (ZDQ_BATCH_RESULT)
    -------------------------------------------------*/   

    v_ERR_CODE    NUMBER;   -- 오류_코드
    v_ERR_MASSAGE    VARCHAR2(100);    -- 오류_내용
   
    -- 소스 SELECT
    CURSOR C1 IS

    SELECT COL1
, COL2
  FROM TAB_1

    -- 변수명, 변수값 SELECT
    CURSOR C2 IS
   
    SELECT COL1
, COL2
  FROM TAB_2;

BEGIN
  
   FOR SRC_LIST IN C1 LOOP
  
   DBMS_OUTPUT.PUT_LINE( 'SOURCE : ' || SUBSTR(SRC_LIST.COL1,1,12) );
   DBMS_OUTPUT.PUT_LINE( 'OBJECT : ' || SUBSTR(SRC_LIST.COL2,1,12) );
  
   i := i +1;
  
   /*-------------------------------------------------
   ORA-06531: 초기화되지 않은 모음을 참조합니다
   ORA-06512: ???
   -------------------------------------------------*/    
   SRC_STR(i) := SRC_LIST.FR_SQL_SEN;
   OBJ_STR(i) := SRC_LIST.TO_SQL_SEN;
 
  
   END LOOP;  
  
   FOR VAR_LIST IN C2 LOOP
  
   DBMS_OUTPUT.PUT_LINE( '변수명 : ' || VAR_LIST.COL1 );
   DBMS_OUTPUT.PUT_LINE( '변수값 : ' || VAR_LIST.COL2 ); 
  
   j := j +1;   
   VAR_NM(j) := VAR_LIST.BATCH_VAR_NM;
   VAR_VALUE(j) := VAR_LIST.BATCH_VAR_VALUE;

   END LOOP;  
END;

by 마농 [2011.07.11 13:56:17]
http://www.gurubee.net/lecture/1056
TYPE v_SRC_STR IS TABLE OF TAB_1.COL1%TYPE INDEX BY BINARY_INTEGER;

by 배고파 [2011.07.11 14:15:49]
아 그게 필수 였군요... 감사합니다.. 그러면 C1, C2에서 나온것을 루프로 작업 할려고 하는데요... FOR SQL_MAIN IN 1..i, 1..j LOOP 이렇게 하면 안되나요?

by 마농 [2011.07.11 17:18:46]
1..i, 1..j 를 하나의 for문에서 동시 사용은 안되겠지요.
이런건 질문거리가 안될듯 하네요. 직접해보시면 에러 날텐데요.

by 배고파 [2011.07.12 09:41:20]
네 물론 에러가 나겠죠... ㅠㅠ 그러한 방법으로 할수 있는 방법이 있나 해서 물어본거에요..

by 마농 [2011.07.12 10:07:59]
동시 루프는 코드만 봐서는 이해가 잘 안가네요.
각각 따로 루프돌리면 되는거 아닌가요?
그게 아니라 다른 특별한 형태를 원하신다면 그에 대한 설명을 해주세요.

by 배고파 [2011.07.12 13:19:50]
원하는건 테이블에 들어 있는 쿼리문을 REPLACE 시킨후 결과를 돌려 결과값을 순차적으로 INSERT 테이블에 적재 하기 위함입니다. 변수 이름과 변수명은 다른 테이블에 있구요..

by 배고파 [2011.07.12 13:21:20]
원하는 쿼리문은 작성 했으나 다른 방법이 있는지도 궁금 하네요..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입