MSSQL CURSOR(커서)

garamnoh·2023년 8월 2일
1

etc.

목록 보기
6/7

CURSOR

CURSOR를 사용하면 ROW 단위로 읽어서 쿼리를 수행할 수 있다.
(FOR 문을 사용해서 LIST를 한 건씩 불러 사용하는 것과 같다.)

여러 데이터를 INSERT 하거나 UPDATE 하는 경우가 생겨 사용하게 되었는데 PERFORMENCE는 느릴 수 있으나 유용하게 사용할 수 있는 기능이다.

사용 방법

1. 변수 선언

DECLARE를 사용해서 사용할 변수를 선언할 수 있다.

DECLARE @name 	varchar(20),
		@age 	varchar(20),

2. CURSOR 선언

DECLARE {커서 이름} CURSOR FOR {SELECT ...}

DECLARE TEST_CURSOR CURSOR FOR
SELECT 	name, age
FROM 	PERSON

3. CURSOR OPEN 및 변수에 값 입력

위에 PERSON 테이블에서 불러온 name, age가 아래 @name, @age에 ROW 단위로 입력된다.

-- CURSOR OPEN
OPEN TEST_CURSOR

-- 한 행 입력
FETCH NEXT FROM TEST_CUSRSOR INTO @name, @age

4. 반복문

행이 끝날때까지 반복해서 쿼리 수행

WHILE @FETCH_STATUS = 0
BEGIN
	-- 화면에 출력해서 확인할 수 있다.
	PRINT('NAME : ' + @name)
    PRINT('AGE : ' + @age)
    
    -- 필요한 쿼리 작성
    -- 예)
    INSERT INTO STUDENT (name, age) VALUES (@name, @age)
    
    -- 다음 행 입력
    FETCH NEXT FROM TEST_CURSOR INTO @name, @age
END

5. 종료

종료 및 초기화

CLOSE TEST_CURSOR
DEALLOCATE TEST_CURSOR

종합

DECLARE @name 	varchar(20),
		@age 	varchar(20),
-- 		@param  varchar(20),        

-- SET을 사용하면 값을 세팅할 수 있음
-- SET  @param = 'test'	
        
DECLARE TEST_CURSOR CURSOR FOR
SELECT 	name, age
FROM 	PERSON

OPEN TEST_CURSOR

FETCH NEXT FROM TEST_CUSRSOR INTO @name, @age

WHILE @FETCH_STATUS = 0
BEGIN
	-- 화면에 출력해서 확인할 수 있다.
	PRINT('NAME : ' + @name)
    PRINT('AGE : ' + @age)
    
    -- 필요한 쿼리 작성
    -- 예)
    INSERT INTO STUDENT (name, age) VALUES (@name, @age)
    
    -- 다음 행 입력
    FETCH NEXT FROM TEST_CURSOR INTO @name, @age
END

CLOSE TEST_CURSOR
DEALLOCATE TEST_CURSOR

0개의 댓글