1. 커서(CURSOR)란?
SQL Plus에서 사용자가 실행한 SQL문의 단위를 의미함. 오라클에서 수행한 모든 쿼리문은 커서 단위로 처리함.
2. 커서의 종류
1) 암시적 커서: PL/SQL의 SQL문처럼 하나의 결과를 리턴하는 경우.. 커서 선언 없이도 SQL문의 실행결과가 암시적으로 커서에 저장되므로. 이를 암시적 커서라고 함.
2) 명시적 커서: 프로그램 언어의 구조체 배열과 유사함.
* 오라클에서 커서란 시스템 글로벌 영역의 공유 풀 내에 저장공간을 사용하여 사용자가 SQL문을 실행시키면 결과 값을 저장공간에 가지고 있다가 원하는 시기에 순차적으로 FETCH 처리하여 해당 결과 셋을 프로그래밍적으로 접근할 수 있게 도와주는 기능
3. 명시적 커서
자동적으로 생성되는 커서로, 기본적으로 PL/SQL내에서 DML문이 실행될 때마다 묵시적 커서가 생성 됨
세션 내에 단 한개만 선언되므로, 동시에 여러개의 묵시적 커서가 사용될 수 없음
1) 사용 밥법
- 커서를 선언한다.
EX) CURSOR C_FCR_MST
- 커서를 오픈한다.
EX) OPEN C_FCR_MST
- 커서에 조회한 결과를 인출해 지정한다.
EX) FETCH C_FCR_MST
- 커서를 닫는다.
EX) CLOSE C_FCR_MST
EX) CURSOR C_FCR_MST IS
SELECT ~~ FROM ~ ;( 세미콜론 꼭 찍어야 돼! )
BEGIN
FOR FM_LIST IN C_FCR_MST LOOP
돌리고 싶은 DML 넣으면 됨.
OPEN C_FCR_MST;
LOOP
END LOOP;
CLOSE C_FCR_MST;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
로그같은거 저장..
END;
** CURSOR C_FCR_MST( V_CODE IN RULE.CODE%TYPE
V_CAATEGORY IN RULE.CATEGORY%TYPE ) IS
이런식으로 변수도 사용 가능.
2) 속성( 명시적 커서 속성은.. '명시적 커서명%속성변수' 로 붙여서 사용 됨)
- %ROWCOUNT: FETCH문에 의해 읽혀진 데이터의 총 건수를 가지는 속성 변수
- %FOUND: FETCH 문이 수행되었을 경우, 읽혀진(Fetch) 행이 있을 경우에는 TRUE(참) 값을 가짐
- %NOTFOUND: FETCH 문이 수행되었을 경우, 읽혀진(Fetch) 행이 없는 경우에는 TRUE(참) 값을 가짐
4. 묵시적 커서
1) 속성(SQL문의 실행된 결과를 커서 속성을 통해 제공하고 있는데, 주의할 점은 가장 마지막에 실행된 SQL문의 결과임)
- %NOTFOUND: 가장 마지막에 실행된 SQL문장이 처리한 데이터 행이 없을 경우에는 TRUE(참) 값을 가짐
- %FOUND: 가장 마지막에 실행된 SQL문장이 처리한 데이터의 행이 있을 경우 TRUE(참) 값을 가짐
- %ROWCOUNT: 가장 마지막에 실행된 SQL 문장이 처리한 데이터 행의 총 개수를 가지는 속성변수
EX) SQL%ROWCOUNT
** SELECT의 경우.. 묵시적커서는 한 건의 데이터를 처리하는 경우에만 정상적으로 작동하기 때문에..
여러 행이 SELECT 될 경우에는 명시적 커서를 사용해야 합니다.