CURSOR를 사용하면 ROW 단위로 읽어서 쿼리를 수행할 수 있다.
(FOR 문을 사용해서 LIST를 한 건씩 불러 사용하는 것과 같다.)
여러 데이터를 INSERT 하거나 UPDATE 하는 경우가 생겨 사용하게 되었는데 PERFORMENCE는 느릴 수 있으나 유용하게 사용할 수 있는 기능이다.
DECLARE를 사용해서 사용할 변수를 선언할 수 있다.
DECLARE @name varchar(20),
@age varchar(20),
DECLARE {커서 이름} CURSOR FOR {SELECT ...}
DECLARE TEST_CURSOR CURSOR FOR
SELECT name, age
FROM PERSON
위에 PERSON 테이블에서 불러온 name, age가 아래 @name, @age에 ROW 단위로 입력된다.
-- CURSOR OPEN
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
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