Data Base

Oracle) PL/SQL Cursor(커서)

5_jinseok12 2018. 7. 11. 16:19
728x90

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