반응형
커서의 내용을 미리 정의 해 놓고 사용하는 방법.
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 ; |
커서를 미리 정의 할 필요도 없고, 변수를 미리 만들어 놓을 필요도 없다.