SQL/ORACLE SQL

PL/SQL : 커서 CURSOR

HicKee 2022. 11. 11. 16:20

CURSOR 커서

 

 - SELECT 실행 경과가 여러 개의 로우 일 때 이를 처리하기 위해 사용 (결괏값이 여러 행일 경우)

 - CURSOR, OPEN, FETCH, CLOSE 4단계

 

1. DECLARE CURSOR
  - CURSOR를 선언하기 위해 DECLARE CURSOR 사용

2. OPEN CURSOR
  - 질의를 수행, 검색 조건을 충족하는 모든 행으로 구성된 결과를 생성하기 위해 CURSOR를 OPEN 합니다. 
  - CURSOR는 이제 결과 셋에서 첫 번째 행을 가리킨다 (포인터와 비슷)

3. FETCH CURSOR
  - FETCH 문은 결과 셋에서 로우 단위로 데이터를 읽어 들인다. 
  - FETCH 후에 CURSOR는 결과에서 다음 행으로 이동

4. EXIT WHEN~ CLOSE
  - 커서가 끝에 위치하게 되면 반복문을 탈출해야 함
  - 반드시 반복문을 탈출할 조건이 필요

 

사용법

DECLARE 
    CURSOR 커서명 IS 
    [SQL 명령어(SELECT)];
    [변수1]%ROWTYPE;
    --[SQL 명령어] 결과가 [변수명]에 저장된다 -- 여러개의 결과값을 저장
BEGIN
    OPEN [커서명]; --커서열기
    LOOP 
    --커서에 데이터를 하나씩 꺼내어 변수에 전달
    FETCH [커서명] INTO [변수1];
    EXIT WHEN [커서명]%NOTFOUND; --찾을 데이터가 없다면 EXIT
    DBMS_OUTPUT.PUT_LINE(EMP_BUF.ENO||':'||EMP_BUF.ENAME);
    END LOOP;
CLOSE [커서명]; --커서 종료
END;

약식으로 사용

DECLARE 
BEGIN
FOR [변수명] IN(SQL 명령어(SELECT))
LOOP
    DBMS_OUTPUT.PUT_LINE(EMP_BUF.ENO||':'||EMP_BUF.ENAME);
    END LOOP;
END;

예제

DECLARE 
    CURSOR EMP_CURSOR IS --커서 선언
    SELECT * FROM EMPLOYEE WHERE DNO =20;
    EMP_BUF EMPLOYEE%ROWTYPE;
BEGIN
    OPEN EMP_CURSOR; --커서열기
    LOOP 
    --커서에 데이터를 하나씩 꺼내어 변수에 전달
    FETCH EMP_CURSOR INTO EMP_BUF;
    EXIT WHEN EMP_CURSOR%NOTFOUND; --찾을 데이터가 없다면 EXIT
    DBMS_OUTPUT.PUT_LINE(EMP_BUF.ENO||':'||EMP_BUF.ENAME);
END LOOP;
CLOSE EMP_CURSOR; --커서 종료
END;
/

약식

DECLARE 
BEGIN
FOR EMP_BUF IN( SELECT *FROM EMPLOYEE WHERE DNO =20)
LOOP
    DBMS_OUTPUT.PUT_LINE(EMP_BUF.ENO||EMP_BUF.ENAME);
    END LOOP;
END;
/

'SQL > ORACLE SQL' 카테고리의 다른 글

FUNCTION & TRIGGER : 함수와 트리 거  (0) 2022.11.14
PROCEDURE : 프로 시저  (0) 2022.11.14
PL/SQL : 제어 문, 반복 문  (0) 2022.11.11
PL/SQL : 변수 선언  (0) 2022.11.11
VIEW : 뷰  (0) 2022.11.10