1) return cursor가 있는 패키지(package) , procedure(프로시저)를 생성한다

2) 프리시저 실행 시 REFCURSOR 변수(var)를 하나 선언하여 실행하면 결과 값이 조회된다.



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

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 전에 정의하기 때문이다.


2. 커서 변수를 미리 만들어 놓고 불러서 사용하는 방법.

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;

재사용성이 있어서 나름 괜찮음. 

커서를 정의 한 뒤 그 때 그 때 커서의 내용을 채우는 방법이다.


3. 동적으로 커서를 생성해서 사용하는 방법

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;

강추~!!

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


'Story > Eunchae' 카테고리의 다른 글

나비 친구  (0) 2017.05.29
엉덩이랑 같이 먹음 ㅋㅋㅋㅋ  (0) 2017.05.26
풀칠 잘해요~  (0) 2017.05.24
비누방울  (0) 2017.05.23
달팽이 만들기  (0) 2017.05.22

'Story > SiHu' 카테고리의 다른 글

모래놀이  (0) 2017.05.26
생태공원  (0) 2017.05.26
지렁이??  (0) 2017.05.24
동화책  (0) 2017.05.23
여름?? ㅋㅋ  (0) 2017.05.19

+ Recent posts