* MSSQL Cursor(커서) 란?
- 일반적으로 Sql 문 사용 시 결과에 대해서 집합(Table 형태)으로 반환을 합니다.
커서는 이러한 결과 집합을 한 행씩 처리 할 수 있도록 합니다.
1. Cursor(커서) 생성 하기
-- Cursor 생성 구문 --
DECLARE test_cursor [ INSENSITIVE ] [ SCROLL ] CURSOR FOR SELECT * FROM temptables
OPEN test_cursor
FETCH NEXT FROM test_cursor
CLOSE test_cursor
DEALLOCATE test_cursor
- 위의 SQL 문을 한줄 씩 살펴 보겠습니다.
+ DECLARE test_cursor CURSOR FOR SELECT * FROM temptables
-> DECLARE 으로 CURSOR 을 선언하는 부분 입니다.
여기서 FOR 구문 뒤에 CURSOR 에 삽입 시켜줄 SELECT 구문을 적용하면 됩니다.
+ OPEN test_cursor
-> 생성된 test_cursor 을 사용하기 위해 OPEN 을 시켜줍니다.
OPEN 은 SELECT 결과 집합을 채우는 역할을 합니다.
* 커서는 사용전에 OPEN 을 해주어야 합니다!
+ FETCH NEXT FROM test_cursor
-> 커서 의 값을 한줄 씩 읽어 옵니다.
FETCH 는 CURSOR 가 가지고 있는 결과 집합에서 행을 반환 합니다.
+ CLOSE test_cursor
-> OPEN 된 커서를 닫아 줍니다.
* 커서와 연결 된 결과 집합을 해제 합니다.
+ DEALLOCATE test_cursor
-> 커서가 제거 됩니다. ( 커서 에서 사용된 리소스를 해제합니다. )
쉽게 말하면,
CURSOR FOR 'QUERY' [커서 생성] -> OPEN [커서 사용준비] -> FETCH [커서 사용]
-> CLOSE [커서 사용해제] -> DEALLOCATE [커서 삭제] 를 해주시면 됩니다.
2. Cursor(커서) 주요 명령문 및 Cursor(커서) 관리 Stored Procedure
-- 커서 명령문 --
- FETCH NEXT
: 현재 행 바로 다음의 결과 행을 반환합니다.
커서에 대해 FETCH NEXT가 첫 번째 인출인 경우에는 결과 집합의 첫 번째 행을 반환합니다.
- FETCH PRIOR
: 현재 행 바로 앞의 결과 행을 반환합니다.
커서에 대해 FETCH PRIOR가 첫 번째 인출인 경우에는 행이 반환되지 않으며 커서는 첫 번째 행 앞에 위치하게 됩니다.
- FETCH FIRST
: 커서의 첫 번째 행을 반환합니다.
- FETCH LAST
: 커서의 마지막 행을 반환합니다.
-- 커서 관리 Stored Procedure --
- sp_cursor_list
: 커서 목록과 그 특성을 반환합니다.
- sp_describe_cursor
: 정방향, 스크롤 커서 등의 커서 특성을 설명합니다.
- sp_describe_cursor_columns
: 결과 집합에서 열의 특성을 설명합니다.
- sp_describe_cursor_tables
: 액세스되는 기본 테이블을 설명합니다.
출처: http://infodbbase.tistory.com/34 [Sharing programming information.]