C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle/기본]21. 명시적 커서 작성 본문
● 커서
오라클 서버는 SQL 문장을 실행하고 처리한 정보를 저장하기 위해 Private SQL 영역이라 불리는 작업 영역을 사용한다.
Private SQL 영역에 이름을 붙이고 그것의 저장된 정보를 액세스하기 위해 PL/SQL커서를 사용할 수 있다.
- 암시적 커서 : 모든 DML과 PL/SQL SELECT 문장에 대해 선언된다.
- 명시적 커서 : 프로그래머에 의해 선언되고 이름 붙여진다.
커서는 PL/SQL에 내장된 일종의 포인터이며, 데이터베이스 쿼리와 레코드들의 세트를 얻는 작업, 그리고 결과셋의 행들을 하나씩 얻는 작업에 이용될 수 있다. 즉, 커서는 데이터에 대한 프로그래밍적인 접근을 가능하게 해준다.
- 질의에 의해 식별된 행은 active set이라 불리고, 인출(fetch)가능하다.
리턴된 행의 집합은 result set 이라 한다.
- FETCH 문장의 역할
☞ 1. active set에서 다음 행으로 포인터를 움직인다.
☞ 2. 현재 행에 대한 정보를 출력 PL/SQL 변수로 읽어들인다.
☞ 3. 포인터가 active set의 끝에 위치하게 되면 커서는 FOR LOOP를 빠져나간다.
[암시적 커서]
● 커서 FOR 루프
DECLARE
CURSOR c1 IS
SELECT empno, ename
FROM emp;
BEGIN
FOR emp_record IN c1 LOOP
-- implicit open and implicit fetch occur
IF emp_record.empno = 7839 THEN
...
END LOOP; --implicit close occurs
END;
더 이상 남겨진 것이 없을 때 까지 종업원을 하나씩 읽어 들입니다.
- 커서 FOR 루프문은 OPEN, FETCH, CLOSE가 자동이다.
● 서브쿼리를 사용한 커서 FOR 루프
BEGIN
FOR emp_record IN (SELECT empno, ename
FROM emp) LOOP
-- implicit open and implicit fetch occur
IF emp_record.empno = 7839 THEN
...
END LOOP; --implicit close occurs
END;
커서를 선언할 필요가 없다.
'Programming > Oracle 공부' 카테고리의 다른 글
[Oracle/기본]23. 예외 처리 (0) | 2017.05.31 |
---|---|
[Oracle/기본]22. 고급 명시적 커서 개념 (0) | 2017.05.31 |
[Oracle/기본]20. 조합 데이터 형과 작업 (0) | 2017.05.31 |
[Oracle/기본]19. 제어 구조 작성 (0) | 2017.05.31 |
[Oracle/기본]18. 오라클 서버와 대화 (0) | 2017.05.31 |