커서(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
이런식으로 커서문 사용하여 행별로 다른 값을 더 해준 예시이다.
커서문은 행 단위로 작업을 하는 방식으로 진행이 되기때문에 데이터가 많아 질수록 속도가 느려지는 것을 피하지 못한다. 그렇기에 커서문은 최대한 지양하는 것이 좋으며, 예제와 같이 특수하게 행 별로 작업을 해야할 것이 있을때만 사용을 해야 한다.
반응형
'Database > RDBMS' 카테고리의 다른 글
[Database] 자료형 Varchar와 nVarchar의 차이는? (개념/ 예제) (1) | 2022.07.05 |
---|---|
[MSSQL] 작은 따옴표를 치환하는 방법 (쌍 따옴표 변환 / set quoted_identifier) (3) | 2022.04.19 |
[MSSQL] 서브쿼리(SubQuery)란 무엇일까? / 특징 / 종류 / 예제 (0) | 2021.11.28 |
[MSSQL] INSERT문의 기본적인 3가지 사용법 (0) | 2021.11.26 |
[MSSQL] DBCC CHECKIDENT란 무엇일까? (0) | 2021.11.23 |
댓글