Programming/SQL

[ORACLE] 커서(Cursor)에 대한 설명

몽땅마니아(MDD) 2022. 3. 6. 17:56

커서(cursor)

 SELECT문 또는 데이터 조작어 같은 SQL문을 실행했을 때 해당 SQL문을 처리하는 정보를 저장한 메모리 공간

 결과 행이 몇 개이든 상관 없이 사용가능하다는 점에서 SELECT INTO과 차이

 

명시적 커서 (explicit cursor)

 사용자가 직접 커서를 선언하고 사용하는 커서로 조회되는 행이 여러 개일 경우 효용성 극대화

 

명시적 커서 사용 단계

단계 명칭 설명

1단계 커서 선언
(CURSOR IS 커서이름 IS sql문)
사용할 커서를 SQL문과 함께 선언
2단계 커서 열기 (OPEN) 커서에 선언된 SQL실행되어 저장
실행한 SQL문에 영향을 받는 행을 active set 이라 함.
3단계 커서에서 읽어온 데이터 사용
(FETCH)
실행된 SQL문의 결과 행 정보를 하나씩 읽어 작업 수행, LOOP문 활용 가능
4단계 커서 닫기
(CLOSE 커서이름)
커서 종료

명시적 커서의 선언문

DECLARE
CURSOR 커서이름 IS SQL문; --커서 선언(DECLARAION)
BEGIN
OPEN 커서이름; --커서 열기(OPEN)
FETCH 커서이름 INTO 변수 --커서로부터 읽어온 데이터사용(FETCH)
CLOSE 커서이름; --커서 닫기(CLOSE)
END;

 

사용 가능한 명시적 커서 속성

속성 설명
커서이름%NOTFOUND FETCH문을 통해 추출된 행이 없으면 true, 있으면 false 반환
커서이름%FOUND FETCH문을 통해 추출된 행이 있으면 true, 없으면 false 반환
커서이름%ROWCOUNT 현재까지 추출된 행 수 반환
커서이름%ISOPEN 커서가 열려있으면 true, 닫혀 있으면 false 반환

 

묵시적 커서 (implicit cursor)

 별다른 선언 없이 SQL문을 사용했을 때 오라클에서 자동으로 선언되는 커서
 사용자가 OPEN,FETCH, CLOSE를 지정하지 않음.

 

사용 가능한 묵시적 커서 속성

속성 설명
SQL%NOTFOUND FETCH문을 통해 추출된 행이 없으면 true, 있으면 false 반환
SQL%FOUND FETCH문을 통해 추출된 행이 있으면 true, 없으면 false 반환
SQL%ROWCOUNT 현재까지 추출된 행 수 반환
SQL%ISOPEN 커서가 열려있으면 true, 닫혀 있으면 false 반환

 

 

SELECT INTO 

조회되는 데이터가 단 하나의 행일 때 사용 가능한 방식으로 명시한 각 열의 결과 값을 변수에 대입해줌
명시한 열과 INTO 절에 명시한 변수의 개수와 자료형이 일치해야 함.

-- 조회되는 데이터가 단 하나의 행일 경우에만 사용 가능
SELECT 열1, 열2, 열3,... INTO 변수1, 변수2, 변수3,...
FROM ...