Database/RDBMS

[MSSQL] Cursor문이란? (사용 방법 / 사용 이유 / 특징 정리)

JeongKyun 2022. 1. 14.

 

커서(Cursor)란?

데이터 작업을 할 때 테이블에서 집합 단위가 아닌 행 단위로 처리를 해야할 때 사용하는 방식을 말한다. 보통 DML(SELECT, UPDATE, DELETE, INSERT)등으로 이뤄지며, 아래의 예시를 통해 확인해보자.

 


 

커서 특징 / 구조

특징

  • 집합이 아닌 행 단위로 작업을 수행하기때문에 속도가 느리다.
  • 프로그램에서 비유하면, 컬렉션을 루프를 돌려 한 인덱스 별로 처리하는 것과 같다고 보면 된다.

 


 

사용 방법

 

예제 시나리오

: "PEOPLE" 테이블에서 한 행마다 나이(age)를 1, 2, 3씩 커서문을 사용하여 증가시켜보자.

 

1. 테이블 생성

CREATE TABLE PEOPLE(
NAME VARCHAR(10),
AGE INT,
)

INSERT INTO PEOPLE(NAME,AGE)VALUES('안정균',23)
INSERT INTO PEOPLE(NAME,AGE)VALUES('김산하',25)
INSERT INTO PEOPLE(NAME,AGE)VALUES('이승현',28)

조회 결과

 

2. 커서문 진행

declare 
@index int,
@name varchar(10),
@age int

set @index = 0;

/* 커서 선언 */
declare cur 

/* 조회하고자 하는 select문 선언 */
cursor for select name, age from PEOPLE

/* 커서 오픈 */
open cur

/* 커서의 첫번째 행을 가지고 온다. */
fetch next from cur into @name,@age

/* 커서의 마지막 행이 될 때까지 반복작업을 실행하는 부분 (작업하고자 하는 내용을 아래 입력) */
while @@FETCH_STATUS = 0

/* 작업하고자 하는 내용 Begin */

begin
set @index = @index +1;

update PEOPLE
	set age = age + @index 
		where name = @name
        
/* 작업하고자 하는 내용 END */

/* 커서의 다음 행을 가지고 온다. */
fetch next from cur into @name, @age
End

/* 커서 닫기 */
close cur

/* 커서 참조 제거 */
deallocate cur

조회 결과

 


 

설명

위의 결과를 보면

1행은 +1

2행은 +2

3행은 +3

이런식으로 커서문 사용하여 행별로 다른 값을 더 해준 예시이다.

 

커서문은 행 단위로 작업을 하는 방식으로 진행이 되기때문에 데이터가 많아 질수록 속도가 느려지는 것을 피하지 못한다. 그렇기에 커서문은 최대한 지양하는 것이 좋으며, 예제와 같이 특수하게 행 별로 작업을 해야할 것이 있을때만 사용을 해야 한다.

 

반응형

댓글

💲 많이 본 글