커서(Cursor)란?
행 단위 작업을 추가로 제어해야 할 경우 사용되는 기능입니다.
행 단위 작업이란 예를들면 특정 테이블에서 SELECT한 Email 별로 작업을 해야 하는 경우를 말합니다.
즉 Email 별로 특정 값을 변경 시킬 때, 반복으로 노가다 할 필요 없이 한번에 처리하는 쿼리를 만들 수 있습니다. 커서를 이용해서 말이죠
커서 선언
--커서 생성
DECLARE CursorEmail CURSOR
FOR SELECT Email from tblUserTable where IsDelete = 'False'
커서 열기
--커서 열기
Open CursorEmail;
불러온 데이터를 이용한 작업
-- 맨처음 결과 데이터로 이동
Fetch Next From CursorEmail Into @email
WHILE(@@FETCH_STATUS <> -1)
BEGIN;
--원하는 작업 수행
--다음 결과 데이터로 이동
Fetch Next From CursorEmail Into @email;
END;
커서 닫기
Close CursorEmail;
Deallocate CursorEmail;
위에 일련의 과정을 통하여 커서기능을 사용 할 수 있습니다.
하지만 많은 데이터를 처리 할 경우 SQL서버에 많은 부하를 줄 수 있으므로 잘 사용해야 합니다.
이 포스트에서는 너무 간략히 설명하고 있는데, 자세하게 알고 싶으면 아래 블로그를 방문해보길 바랍니다.
[커서 - 수까락의 프로그래밍 이야기](http://egloos.zum.com/sweeper/v/3028155)
간단한 예제
--값을 담아놓을 임시 변수 생성
DECLARE @email VARCHAR(100)
DECLARE @idx INT
SET @idx = 0
DECLARE CursorEmail CURSOR
FOR SELECT Email from tblUserTable where IsDelete = 'False'
Open CursorEmail;
Fetch Next From CursorEmail Into @email
While(@@FETCH_STATUS <> -1)
Begin;
--Idx 1씩 증가
SET @idx = @idx + 1
--업데이트 수행
UPDATE tblUserTable
SET groupIdx = @idx
WHERE IsDelete = 'False' AND Email = @email
Fetch Next From CursorEmail Into @email;
End;
Close CursorEmail;
Deallocate CursorEmail;