본문 바로가기

프로그래밍/MS-SQL

MSSQL 커서(CURSOR) 사용법

MSSQL에서는 커서라는것이 존재하는데, 테이블의 데이터를 커서에 담고, 한개의 행단위로 읽어주는 기능을 한다.

이름 (NAME) 나이 (AGE) 성별 (SEX)
박지성 36 남자
이영표 38 남자
손흥민 28 남자
기성용 32 남자

위와 같은 데이터 테이블이 존재 한다면, 정방향으로 읽었을 때 박지성->이영표->손흥민->기성용 순서로 데이터테이블의 행 정보를 읽어낼 수 있다. 

 

독자의 경우에는, 반복적인 배치작업을 할때 주로 사용한다.

 

그렇다면 사용방법에 대해 설명하도록 하겠다.

 

1. 대상 테이블생성 및 데이터삽입 (이 부분은 대상 테이블이 없을때만 해당)

2. 커서에 DB테이블 담기 및 반복작업 수행

 

1. 대상 테이블 생성 및 데이터삽입

DB테이블 생성

CREATE TABLE SOCCER_PLAYER
(
    "ID"    int             NOT NULL    IDENTITY, 
    "NAME"  nvarchar(50)    NULL, 
    "AGE"   int             NULL, 
    "SEX"   nvarchar(10)    NULL, 
    CONSTRAINT PK_SOCCER_PLAYER PRIMARY KEY (ID)
)

MSSQL 구문을 이용하여 'SOCCER_PLAYER'라고 하는 DB테이블을 생성하였고, 컬럼에는 기본키, 이름, 나이, 성별 컬럼항목을 추가하였다.

 

데이터삽입

INSERT INTO SOCCER_PLAYER(NAME, AGE, SEX) VALUES('박지성',36, '남자')
INSERT INTO SOCCER_PLAYER(NAME, AGE, SEX) VALUES('이영표',38, '남자')
INSERT INTO SOCCER_PLAYER(NAME, AGE, SEX) VALUES('손흥민',28, '남자')
INSERT INTO SOCCER_PLAYER(NAME, AGE, SEX) VALUES('기성용',32, '남자')

INSERT 구문을 이용하여, 데이터를 삽입하였다. 여기서 ID(기본키)는 1씩 자동증가 설정되어있으므로 넣어주지 않아도 된다. 

 

DB 결과셋

2. 커서에 DB테이블 담기 및 반복작업 수행

-- 한개 ROW정보를 담을 변수 선언
DECLARE @P_NAME		VARCHAR(100)
DECLARE @P_AGE		INT
DECLARE @P_SEX		VARCHAR(10)

-- 1. 커서 사용 선언
DECLARE SOCCER_CURSOR CURSOR FOR
SELECT
	 NAME
	,AGE
	,SEX
FROM SOCCER_PLAYER

-- 2. 커서 반복문 돌리기
OPEN SOCCER_CURSOR      --커서 사용을 위해 오픈
FETCH NEXT FROM SOCCER_CURSOR INTO @P_NAME,@P_AGE, @P_SEX

--커서를이용해 한개 행씩 읽음 
WHILE @@FETCH_STATUS = 0
BEGIN

	--반복 작업 수행
	PRINT('이름: ' + @P_NAME)
	
	FETCH NEXT FROM SOCCER_CURSOR INTO @P_NAME,@P_AGE, @P_SEX
END

--커서 닫고 초기화
CLOSE SOCCER_CURSOR
DEALLOCATE SOCCER_CURSOR

커서는 한개의 Row(행)단위로 데이터를 읽는다고 했으므로, 한개 Row정보를 담을 변수를 선언한다.

커서(CURSOR) 사용 선언을 하고 SELECT한 테이블을 커서에 담아준다. (DECLARE 커서이름 CURSOR FOR)

 

커서(CURSOR)를 통해 반복작업을 수행한다. 그리고 마지막으로 사용한 커서는 반드시 닫아주고 초기화 해주어야 한다.