커서 (CURSOR)
- 메모, 편집 프로그램에 커서가 깜빡이는 것을 볼수 있다. 같은 개념이다.
- 행 단위 작업을 효율적으로 하기 위한 방식으로 테이블에서 여러개의 행을 조회한 후 쿼리의 결과를 한행씩 처리하는 방식
- SELECT한 결과(행집합)를 반복 작업해줘야 할 경우 유용하게 사용 가능 한 방식
- 조회결과를 한 ROW씩 작업해줘야 할 때, 사용할 수 있다.
특징
1. 커서는 내장 SQL문의 수행 결과로 반환될 수 있는 복수의 튜플들을 접근 할 수 있도록 해주는 개념
2. 커서는 질의 수행 결과로 반환되는 첫번째 튜플에 대한 포인터로 생각할 수 있다.
3. 커서를 사용하여 질의 결과로 반환 될 수 있는 튜플들(ROWS)을 한번에 하나씩 차례대로 처리할 수 있다.
명령어
DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는 명령
OPEN : 커서가 질의 결과의 첫번째 튜플을 포인트하도록 설정하는 명령
FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령
CLOSE : 질의 수행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령
Ex)
1. PEOPLE 테이블 생성,조회 // (홍길동,김개똥 데이터 삽입해 준상태)
SELECT*FROM PEOPLE
2. 커서 선언, 오픈, 작업수행, 커서 닫고 초기화 순서로 실행.
DECLARE
@INDEX INT,
@NAME VARCHAR(100),
@AGE INT
SET @INDEX = 0; --INDEX초기화
DECLARE CUR CURSOR FOR --CUR라는 이름의 커서 선언
SELECT --쿼리 조회
NAME,
AGE
FROM PEOPLE
OPEN CUR --커서 오픈
FETCH NEXT FROM CUR INTO @NAME,@AGE --SELECT한 값을 @NAME,@AGE 변수에 넣는다.
--커서를이용해 한ROW씩 읽음
WHILE @@FETCH_STATUS = 0
BEGIN
SET @INDEX = @INDEX + 1; --INDEX증가
--SELECT 한 데이터의 행집합을 가지고 수행할 작업
UPDATE PEOPLE
SET AGE = @AGE+@INDEX --나이+ CURSOR INDEX
WHERE NAME = @NAME
FETCH NEXT FROM CUR INTO @NAME,@AGE --다음ROW로 이동
END
--커서 닫고 초기화
CLOSE CUR
DEALLOCATE CUR
3. 위의 SQL 실행 후 데이터 확인
SELECT*FROM PEOPLE
--> 홍길동의 나이는 CURSOR의 INDEX 만큼인 1이 증가 되었고,
김개똥의 나이는 CURSOR의 INDEX 만큼인 2가 증가 되었다
* 주의 - 커서로 작업하는 것은 한줄 한줄 작업하는 것이기 때문에 한번에 처리하는 것보다 퍼모먼스가 떨어질 수 있다. 남발되지 않고 필요에 의해 사용되어야 한다.
REFERENCE: https://coding-factory.tistory.com/96
'SQL > MS-SQL & SQL Server Management Studio' 카테고리의 다른 글
MS SQL 구분자로 문자열로 자르기 (0) | 2019.10.14 |
---|---|
[Ms sql] 문자열 함수 (0) | 2019.10.10 |
[MS-SQL] UNION / UNION ALL 차이 (0) | 2019.10.01 |
[MS SQL] SP 사용 로그 조회 (0) | 2019.09.25 |
[MS SQL] 다른 테이블 조인(join) 후 UPDATE (0) | 2019.09.24 |
댓글