오라클 커서 재활용? 0 3 5,949

by 손님 [PL/SQL] 커서 [2010.05.07 11:21:10]



안녕하세요

 

혹시 오라클 커서를 재활용하는 방법은 없는 것인가요?

 

커서를 여러게 선언하고

본문에서 하나하나 열어야 하나요.

커서의 타입?은 다 똑같은데..

뭐 좋은 방법 없을까요???

아래는 예제..


프로시저 어쩌구 시작~!

 

CURSOR CURSOR_INSERT IS

SELECT 어쩌구 FROM 저쩌구;

 

CUR_INSERT  CURSOR_INSERT%ROWTYPE;

 

CURSOR CURSOR_INSERT2 IS

SELECT 어쩌구 FROM 으쌰으쌰;

 

CUR_INSERT2  CURSOR_INSERT2%ROWTYPE;

 

CURSOR CURSOR_INSERT3 IS

SELECT 어쩌구 FROM 어잌후.

 

CUR_INSERT3  CURSOR_INSERT3%ROWTYPE;

 

..

생략..

..

...   --요렇케 커서를 조낸 만들고

BEGIN

  --하나하나 다 열어서 모두 동일한 테이블인 결과테이블에 넣음..

   OPEN CURSOR_INSERT;

LOOP

   FETCH CURSOR_INSERT INTO CUR_INSERT;

   EXIT WHEN CURSOR_INSERT%NOTFOUND;

 

   BEGIN

 

   INSERT INTO 결과테이블 VALUES(저쩌구 꺄아꺄악)

   commit;

 

    EXCEPTION

  WHEN OTHERS THEN

 NULL;

 

   END;

END LOOP;

   CLOSE CURSOR_INSERT;

 

   OPEN CURSOR_INSERT2;

LOOP

   FETCH CURSOR_INSERT2 INTO CUR_INSERT2;

   EXIT WHEN CURSOR_INSERT2%NOTFOUND;

 

   BEGIN

 

   INSERT INTO 결과테이블 VALUES(저쩌구 으앙 커서)

   commit;

 

    EXCEPTION

  WHEN OTHERS THEN

 NULL;

 

   END;

END LOOP;

   CLOSE CURSOR_INSERT2;

 

  OPEN CURSOR_INSERT3;

LOOP

   FETCH CURSOR_INSERT3 INTO CUR_INSERT3;

   EXIT WHEN CURSOR_INSERT3%NOTFOUND;

 

   BEGIN

 

   INSERT INTO 결과테이블 VALUES(저쩌구 올레)

   commit;

 

    EXCEPTION

  WHEN OTHERS THEN

 NULL;

 

   END;

END LOOP;

   CLOSE CURSOR_INSERT3;

 

...

...

  생략..

...

END;

by 꼬랑지 [2010.05.07 12:58:49]
구글 가셔서 [동적 sql] 혹은 [ref cursor] 혹은 [파라미터 커서]로 검색해 보세요. 예전에 한번 REF CURSOR 형 타입 선언해 놓고 조회할 테이블과 칼럼을 파라미터로 받아서 여러번 사용하는 예제를 본 적이 있는데 찾지 못하겟네요

by 1 [2010.05.07 23:09:49]
10g 이상이라면 INSERT ALL 구문도 참고해 보세요~~

by 마농 [2010.05.10 09:08:32]
Union All 로 쿼리를 하나로 합치세요.
그러면 커서 하나로 되겠네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입