PL/SQL 커서란?
SQL의 커서는 크게 묵시적커서(Implicit Cursor)와 명시적커서(Explicit Cursor)로 나뉜다.
묵시적 커서는 필요한 경우 오라클이 자동적으로 선언하여 사용한 후 자동적으로 정리한다
우리가 자주 사용하는 SELECT문, UPDATE문, INSERT문, DELECT문 등이 실행될 때는 묵시적커서가 선언된다.
묵시적 커서는 하나만 실행되었다가 종료하므로 여러 행을 작업해야 한다면 묵시컥 커서는 사용할 수 없다.
묵시적 커서의 속성
SQL%ROWCOUNT : 해당 커서에서 실행한 총 행의 개수
SQL%FOUND : 커서 안에 수행할 데이터가 있다면 TRUE, 없다면 FALSE 반환
SQL%NOTFOUND : 커서 안에 수행할 데이터가 없을 경우 TRUE, 있다면 FALSE 반환
SQL%ISOPEN : 메모리에 OPEN 되어 있다면 TRUE, 그렇지 않다면 FALSE
명시적 커서는 사용자가 직접 선언하여 생성한 후 사용하는 SQL 커서로 주로 여러개의 행을 처리할 경우 사용한다.
명시적 커서는 묵시적 커서와는 다르게 동시에 여러개가 선언되어 사용될 수 있다.
명시적 커서의 속성
커서이름%ROWCOUNT : 데이터의 총 행의 수를 가지는 속성. 마지막에 처리된 행이 몇번째인지 반환해준다
커서이름%FOUND : 읽혀진 행이 있을 경우 TRUE, 아닐 경우 FALSE
커서 이름%NOTFOUND : 더이상 가져올 게 없을 때 사용하는 것으로,
읽혀진 행이 없을 때 TRUE, 있을 때 FALSE (많으 사용하니 알아두자)
커서 이름 %ISOPEN : 명시적 커서가 메모리에 선언되어 있을 때 TRUE, 아닐 경우 FALSE
명시적 데이터를 처리하는 단계
1. 명시적 커서 선언 Declear
2. 명시적 커서 열기 Open
3. 데이터를 읽어서 변수로 할당하기 Fetch
4. 명시적 커서 닫기 Close
위에 사진을 보면 우선 4~7행까지가 커서를 선언하는 문장이다.
(CURSOR 커서명 IS 서브쿼리 ) : 커서 선언
9행은 커서 Open -> (Open 커서이름)
11행은 커서 Fetch -> (Fetch 커서이름 INTO 변수)
15행은 커서 Close -> (Close 커서이름)
Cursor For Loop 문 활용
문제) STUDENT 테이블에서 DEPTNO1=101인 사원들의 DEPTNO1과 NAME을 출력하시오
여러개의 데이터를 수행하기 위해 반복문을 사용하는 것이다
변수의 선언, 커서열기, 커서 내의 레코드 자동읽기, 커서닫기 등을 오라클이 자동으로 수행하게된다
For 레코드이름 IN 커서이름 LOOP
.
.
END LOOP; // 루프문을 빠져나갈때 저동적으로 커서가 CLOSE된다
N
묵시적 커서를 사용하여 TOO_MANY_ROWS라는 예외를 발생시킨다
즉 예외처리하는 EXCEPTION 를 통하여 예외처리 실행시키고
WHEN을 통해 해당 조건에 맞는 결과값을 출력한다.
'Data Base' 카테고리의 다른 글
Oracle) PL/SQL 개념 (0) | 2018.07.10 |
---|---|
Oracle) 다중행 Sub Query (0) | 2018.05.04 |
Oracle) 단일행 Sub Query (0) | 2018.05.04 |
Oracle) MAX/MIN 함수, RANK 함수 (0) | 2018.05.04 |
Oracle) DECODE 함수 , TO_CHAR 함수 , CASE문 (0) | 2018.04.09 |