Oracle PL/SQL 강좌
FOR문에서 커서 사용(Cursor FOR Loops) 15 12 99,999+

by 구루비 CURSOR FOR LOOPS EXPLICIT CURSOR PL/SQL CURSOR [2002.01.20]


  FOR문을 사용하면 커서의 OPEN, FETCH, CLOSE가 자동 발생하므로 따로 기술할 필요가 없고, 레코드 이름도 자동 선언되므로 따로 선언할 필요가 없다.

FOR문에서 커서 사용 문법

FOR문에서 커서 사용 예제

 
SQL> CREATE OR REPLACE PROCEDURE ForCursor_Test
     IS

        -- Cursor 선언
        CURSOR dept_sum IS
        SELECT b.dname, COUNT(a.empno) cnt, SUM(a.sal) salary
        FROM emp a, dept b
        WHERE a.deptno = b.deptno
        GROUP BY b.dname;

     BEGIN

       -- Cursor를 FOR문에서 실행시킨다
       FOR emp_list IN dept_sum LOOP
          DBMS_OUTPUT.PUT_LINE('부서명 : ' || emp_list.dname);
          DBMS_OUTPUT.PUT_LINE('사원수 : ' || emp_list.cnt);
          DBMS_OUTPUT.PUT_LINE('급여합계 : ' || emp_list.salary);
       END LOOP;

     EXCEPTION
       WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');

   END;
   /

-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용
SQL> SET SERVEROUTPUT ON ; 

-- 실행
SQL> EXECUTE ForCursor_Test;
부서명 : ACCOUNTING
사원수 : 3
급여합계 : 8750
부서명 : RESEARCH
사원수 : 6
급여합계 : 10875
부서명 : SALES
사원수 : 6
급여합계 : 9305
    

- 강좌 URL : http://www.gurubee.net/lecture/1065

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 김남열 [2006.11.20 11:38:53]
좋은 자료 감사 ^^*

by bb [2006.12.11 10:43:05]
근데 데이터 길이가 길어지면

*
1행에 오류:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: "SYS.DBMS_OUTPUT", 줄 91에서
ORA-06512: "SYS.DBMS_OUTPUT", 줄 58에서
ORA-06512: "ANYCAR.FORCURSOR_TEST", 줄 82에서
ORA-06512: 줄 1에서


라고 메세지가 나옵니다. 어떻게 해야 하나요?

by 마농 [2006.12.15 14:40:13]
set serveroutput on size 1000000

by 김윤경 [2007.11.09 11:28:50]
For문에서 커서 어려웠는데 쉽게 설명해 주셔서 감사해요^^;

by 써니 [2008.04.13 18:54:16]
exec dbms_output.enable('90000000000');

by 최세민 [2008.06.10 16:59:35]
FOR emp_list IN LOOP 에서 IN 뒤에 dept_sum 가 빠졌네요.

FOR emp_list IN dept_sum LOOP 로 고쳐 주심 될듯

by 김영일 [2008.09.24 14:01:17]
cursor 선언시 outer join 을 사용가능한가요?

by 호호 [2009.04.27 21:46:11]
FOR emp_list IN dept_sum LOOP!!!

by MIN [2009.09.22 21:09:50]
for(){
if(){
continue;
}
aaaa;
bbbbb;
}

continue; 같은 기능을 하려면 어떻게 해야하죠?

by 김정식 [2010.04.18 23:52:23]
HTML이 잘못 작성되어서 예제 프로시저에서 오류가 발생하였네요..
수정하였습니다.

by 성정환 [2013.01.30 15:46:20]
강좌 잘 보고 갑니다. 감사합니다.

by aram [2015.01.12 19:23:55]

FOR LOOP 에서는 %NOUFOUND 등의 속성이 안 먹히나요ㅠ?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입