[커서란?]
행 단위 작업의 반복 작업을 가능케 하는 기능.
앞서 소개했던 WHILE문 과 같이 반복 수행이 가능하면서도 특정 테이블의 튜플들에 접근해 하나씩 처리할 수 있는 추가 기능을 갖고 있는 문법이다.
[실행 단계]
단계 |
설명 |
DECLARE (커서 선언) |
커서를 정의 및 생성하는 명령문 |
OPEN (커서 열기) |
SELECT 결과의 첫번째 튜플을 가르키도록 설정하는 명령문 |
FETCH (커서 이동) |
'기존에 가르키던 SELECT 결과의 튜플'의 다음 튜플을 가르키도록 설정하는 명령문 |
CLOSE (커서 닫기) |
SELECT 결과에 대한 처리 종류 후 커서를 닫는 명령문 |
DEALLOCATE (커서 해제) |
커서를 닫은 후 할당된 메모리를 해제하는 명령문 |
[예제]
test_Table에 있는 모든 사람의 나이에 1살을 추가하는 예제.
- test_Table에 값 삽입
INSERT INTO test_Table (No, Name, Age) VALUES (0, 'JANG', 22)
INSERT INTO test_Table (No, Name, Age) VALUES (1, 'MOON', 23)
INSERT INTO test_Table (No, Name, Age) VALUES (2, 'CHAE', 24)
INSERT INTO test_Table (No, Name, Age) VALUES (3, 'YUG', 25)
INSERT INTO test_Table (No, Name, Age) VALUES (4, 'YOON', 26)
- 반복문에서 사용할 변수 @Age 선언
DECLARE @Age;
- Cur 라는 이름의 커서 생성
DECLARE Cur CURSOR FOR
- Cur라는 커서로 test_Table의 첫번째 Row를 가르키고 그 Row에서 Age값을 가져오겠다.
SELECT Age FROM test_Table
- 커서 열기
OPEN Cur
- 커서가 가르키는 위치를 test_Table의 첫번째 Row로 이동해서 가져온 Age값을 @Age에 넣겠다.
FETCH NEXT FROM Cur INTO @Age;
- 반복문 시작
- @@FETCH_STATUS 는 커서가 제대로 값을 가져왔을시 0을 마지막 Row일시 -1을 반환함.
WHILE (@@FETCH_STATUS =0)
BEGIN
- @Age에 1을 더한다.
SET @Age += 1;
- 커서가 가르키고 있는 Row에 해당하는 Age컬럼의 값을 @Age로 변경한다.
UPDATE test_Table SET Age = @Age WHERE CURRENT OF Cur
- 커서를 다음 Row로 이동시키고 가져온 Age값을 @Age에 넣겠다.
FETCH NEXT FROM Cur INTO @Age;
END
- 커서 닫기
CLOSE Cur;
- 커서에 할당된 메모리 해제
DEALLOCATE Cur;
- test_Table에 있는 모든 행의 Age에 +1이 되었는지 확인.
SELECT * FROM test_Table;
반응형
'DB > MS-SQL' 카테고리의 다른 글
[MSSQL] 컬럼 데이터타입 추가, 수정, 삭제 (0) | 2020.09.21 |
---|---|
[MSSQL] 집계 함수(GROUP BY, HAVING) (0) | 2020.07.27 |
[MSSQL] 반복문(WHILE) 사용법 (0) | 2020.05.24 |
[MSSQL] 문자열 치환하기(REPLACE, STUFF) (0) | 2020.05.12 |
[MSSQL] 문자열 자르기(SUBSTRING, LEFT, RIGHT) (0) | 2020.05.12 |