커서(CUrsor)사용법에 대해 알아보겠습니다.
커서란?
Select한 결과를 행 단위로 반복 작업을 해야할 때 사용하는 방법으로, For문 또는 While 문 처럼 반복 수행이 가능합니다. 특정 테이블의 튜플들에 접근하여 하나씩 처리할 수 있는 기능을 가지고 있습니다.
즉, select 한 데이터의 Row를 하나씩 가지고 와서 데이터를 처리하는 방식이라고 생각하면 되는데요,
주로 배치작업을 할 때 사용하며, 속도가 느리기 때문에 필요한 경우에만 사용하는 것이 좋습니다.
단계 | 의미 | 설명 |
DECLARE | 커서 선언 | 커서 정의(선언) 및 생성하는 명령문 |
OPEN | 커서 열기 | SELECT한 결과의 첫번째 튜플을 가르키도록 설정하는 명령문 |
FETCH | 커서 이동 | [기존에 가르키던 SELECT한 결과의 튜플]의 다음 튜플을 가르키도록 설정하는 명령문 (1 -> 2, 2 -> 3, 3 -> 4.... ) |
CLOSE | 커서 닫기 | SELECT한 결과에 대한 처리 후 커서를 닫는 명령문 |
DEALLOCATE | 커서 해제 | 커서를 닫은 후 할당된 메모리를 해제하는 명령문 |
[예제]
Cursor를 이용하여 emp_member 테이블의 age 컬럼 값에 +1씩 해보기
--------------------------------------------------------------------------------------
DECLARE @NAME varchar(50)
--커서 선언
DECLARE cur CURSOR FOR --cur 라는 이름의 커서를 선언하여,
SELECT user_name FROM emp_member --emp_member라는 테이블을 select한다.
--커서 오픈
OPEN cur
FETCH NEXT FROM cur INTO @NAME --select했을 때의 이름값을 변수에 넣는다.
--커서를 이용해서 한 Row씩 읽으면서 AGE에 +1을 계산한다.
WHILE (@@FETCH_STATUS = 0)
BEGIN
UPDATE emp_member
SET age = age + 1
WHERE user_name = @NAME
FETCH NEXT FROM cur INTO @NAME --select한 행의 다음 행으로 넘어간다.
END
--커서 종료
CLOSE cur
DEALLOCATE cur
'공부 (IT) > IT관련_DB' 카테고리의 다른 글
[MSSQL] 날짜 변환표 (0) | 2021.08.27 |
---|---|
[MSSQL] lock 걸린 쿼리 확인 및 해제 (0) | 2021.08.23 |
[MSSQL] char nchar / varchar nvarchar 차이점 (0) | 2021.06.16 |
[MSSQL] 데이터 타입 변환 (0) | 2021.06.01 |
[MSSQL] 인스턴스 / DB명 / 서버명 확인하기 (0) | 2021.05.11 |
댓글