본문 바로가기

SQL

[PL/SQL] CURSOR

CURSOR

  • 커서는 Oracle 서버에서 할당한 메모리 영역에 대한 포인터이다.

 

  • 커서의 종류에는 묵시적 커서, 명시적 커서가 있다.

 

  • 묵시적 커서: 오라클 내부에서 자동으로 생성되어 SQL문장이 실행될때마다 자동으로 만들어져 실행되는 커서이다.

 

  • 명시적 커서: 사용자가 직접 정의해서 사용하는 커서이다.
CURSOR 커서이름 (변수 ..) 
IS
SELECT .... 

CURSOR 후에 커서이름을 설정하고 PL/SQL문에 변수를 지정한다.

그 이후 기본적인 SELECT문을 사용한다.

 

또한 시작할때는 OPEN 커서명 으로 실행하며  사용한 후에는 CLOSE 커서명 으로 커서를 닫는다.

 

예제 : CURSOR를 사용하여 EMP테이블과 DEPT 테이블을 조인시키기

EMP 테이블
DEPT 테이블

 

 

-- 명시적 CURSOR로 했다.

CREATE OR REPLACE PROCEDURE CURSOREMP
IS
    VEMP EMP%ROWTYPE; --EMPNO|ENAME|SAL.....
    VDEPT DEPT%ROWTYPE;
    
    CURSOR EPC IS SELECT E.EMPNO,E.ENAME,E.SAL,E.JOB,E.HIREDATE,D.DNAME,D.LOC
    FROM EMP E,DEPT D --JAVA로 치면 클래스 정의
    WHERE E.DEPTNO = D.DEPTNO;
BEGIN
OPEN EPC;
    LOOP
        FETCH EPC INTO VEMP.EMPNO,VEMP.ENAME,VEMP.SAL,VEMP.JOB,VEMP.HIREDATE,VDEPT.DNAME,VDEPT.LOC; --FETCH
        DBMS_OUTPUT.put_line(VEMP.EMPNO || ' ' || VEMP.ENAME || ' ' || VEMP.SAL || ' ' || VDEPT.DNAME  || ' ' ||VDEPT.LOC);
        IF EPC%NOTFOUND THEN EXIT ;
        END IF;
    END LOOP;
CLOSE EPC;
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('ERROR MESSAGE' || SQLERRM);
END CURSOREMP;

실행 결과

'SQL' 카테고리의 다른 글

[PL/SQL] FOR  (0) 2021.08.10
[PL/SQL] RECORD  (0) 2021.08.06
[PL/SQL]IF, CASE  (0) 2021.08.06
[PL/SQL] DML(INSERT, UPDATE ,DELETE ) 연습  (0) 2021.08.05
[PL/SQL] 개념, 기본문법  (0) 2021.08.05