눈부시도록 아름다운 그래서 바라볼 수 없는

잘정리된 글 - 출처 : http://blog.kjslab.com/20#comment11231388


커서의 내용을 미리 정의 해 놓고 사용하는 방법.

1
2
3
4
5
6
7
8
9
DECLARE
  CURSOR C_LIST IS
    SELECT MY_ID FROM MY_TABLE WHERE 조건;
BEGIN
 
  FOR I_ID IN C_LIST LOOP
    DBMS_OUTPUT.put_line(I_ID);
  END LOOP;
END;

비추천 

커서의 내용을 정할 때 select 문제 동적으로 parameter가 넘어가야 할 경우 사용이 불가능 하다. 왜냐하면 BEGIN 전에 정의하기 때문이다.



커서 변수를 미리 만들어 놓고 불러서 사용하는 방법.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE
    I_ID   VARCHAR2(100);       -- 변수 정의               
  C_LIST SYS_REFCURSOR;     -- 커서 정의
BEGIN
  OPEN C_LIST FOR
  SELECT MY_ID  
    FROM MY_TABLE
    WHERE 조건;
  LOOP                  -- LOOP 돌기.
      FETCH C_LIST
      INTO  I_ID;           --  하나씩 변수에 넣기.
      EXIT WHEN C_LIST%NOTFOUND;    -- 더이상 없으면 끝내기.
      DBMS_OUTPUT.put_line(I_ID);    --  출력
  END LOOP;
  CLOSE C_LIST;
END;
재사용성이 있어서 나름 괜찮음. 
커서를 정의 한 뒤 그 때 그 때 커서의 내용을 채우는 방법이다.




동적으로 커서를 생성해서 사용하는 방법
1
2
3
4
5
6
7
8
9
DECLARE
 
BEGIN
 
  FOR C_LIST IN (SELECT MY_ID FROM MY_TABLE WHERE 조건)
  LOOP
    DBMS_OUTPUT.put_line(C_LIST.I_ID);
  END LOOP;
END;
강추~!!

커서를 미리 정의 할 필요도 없고, 변수를 미리 만들어 놓을 필요도 없다.


저작자 표시 비영리
신고
Posted by 휘루걸음
TAG


티스토리 툴바