커서(Cursor)에 대한 요약 정리 General Tech.2008/03/11 10:24
커서란?
- 데이터 처리는 집합단위로 이루어지기도 하지만 조건에 따라서는 행 단위로 처리하기도 한다.
- 행 단위의 데이터 처리시 커서를 사용한다.
커서의 장점
- 데이터를 행 단위로 처리할 수 있음.
커서의 단점
- 데이터 처리 속도가 느려짐.(SQL문에 비해 느림)
1.1 커서의 종류
- 서버커서(Server Cursor), 클라이언트 커서(Client Cursor)
서버커서(Server Cursor)
- T-SQL 커서와 API 커서로 나뉨
T-SQL 커서 란?
- 결과 집합을 만드는 T-SQL스크립트, 트리거, 저장 프로시저에서 사용
- 변수로 한 열을 할당받는다.(변수의 크기는 열의 데이터 타입과 데이터를 모두 받을 수 있을 만큼 선언)
API 커서란?
- OLEDB, ODBC, ADO를 이용하여 SQL 문의 결과 집합에서 커서 매핑.
클라이언트 커서란?
- ODBC에서 지원하는 커서, 결과 집합을 클라이언트 캐쉬에 저장(읽기전용)
1.2 커서의 작업
- DECLARE를 이용한 커서 선언
- OPEN을 이용한 커서 열기
- FETCH를 이용한 데이터 불러오기
- CLOSE를 이용한 커서 닫기
- DEALLOCATE를 사용ㅇ한 커서 선언 제거
1.3 커서의 ANSI 문법
- Declare 커서 이름 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR SELECT 구문
[ FOR { READONLY | UPDATE [ OF 컬럼명 [......N]] } ]
- INSENSITIVE : 커서에서 사용할 데이터를 임시로 복사해 주는 커서를 정의
커서에서 정의된 데이터는 tempDB에 저장됨.
잠금이 생김, 동시성 저하.
- SCROLL : 모든 인출 옵션 사용이 가능
인출 옵션(FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE)
인출 옵션이란? 데이터를 불러올 행을 이동하는 방식
- SELECT 구문 : 일반적인 select 구문 형식을 따름
- READ ONLY : 커서를 통한 데이터 변경 및 삭제를 방지, DELETE, UPDATE 기능을 무시.
1.4 커서의 T-SQL 문법
- DECLARE 커서 이름 CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARING ]
FOR SELECT 구문
[ FOR UPDATE [ OF 컬럼명 [ ,......N]]]
- LOCAL: 커서의 범위를 로컬로 지정(로컬변수)
- GLOBAL: 커서의 범위를 전역을 지정(전역변수)
- FORWARD_ONLY: "전진만 있되 후퇴는 없도다.", 유일한 명령 옵션은 FETCH_NEXT
- SCROLL: 모든 인출 옵션(FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE)를 사용하도록 지정
- STATIC: 수정이 안됨(임시커서)
- KEYSET: 커서에 포함되는 행과 멤버와 순서가 고정되도록 지정.
- DYNAMIC: 인출할 때 마다 행의 데이터 값과 순서, 멤버가 변경됨, 동적 커서
- FAST_FORWARD: 성능 최적화가 설정된 FORWARD_ONLY, READ_ONLY 커서를 지정.
- READ_ONLY: 데이터에 대한 변경 및 삭제 방지, UPDATE, DELETE 구문의 WHERE CURRENT OF 절에서 이키를 사용할 수 없음
- SCROLL_LOCKS: 위치 지정 업데이트나 삭제가 성공하도록 지정
-- Declare 구문지정
DECLARE YearPlan_Cur CURSOR FOR
SELECT CustCode, WkCnt, DeptCode, Week, Day, SMethodYN, DaN
FROM RM_YearPlan
WHERE WkCnt = '1'
-- OPEN 구문
OPEN YearPlan_Cur
-- FETCH 구문
FETCH NEXT FROM YearPlan_Cur
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM YearPlan_Cur
END
-- CLOSE 구문
CLOSE YearPlan_Cur
-- 커서 해제
DEALLOCATE YearPlan_Cur
'General Tech.' 카테고리의 다른 글
| Windows 7과 관련된 동영상 입니다. (0) | 2008/04/11 |
|---|---|
| Velocity (0) | 2008/03/20 |
| 커서(Cursor)에 대한 요약 정리 (0) | 2008/03/11 |
| Google Analytics Interface Tutorial (0) | 2008/02/22 |
| Semantic Web Interface (0) | 2008/02/20 |
| 인터럽트 사이클 (0) | 2008/02/19 |
