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 |