Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- springboot
- 프로그래머스
- 스프링부트
- HTML
- ascx.cs
- mysql
- PHP
- 다중기본키
- ASP
- 쿼리
- 데이터베이스
- 오라클
- 다중pk
- mssql
- VMWare
- memoryDB
- db
- 자동증가열
- 이미지엑박
- windows7
- 코딩테스트
- 람다식함수
- 트리플DES
- C#
- CrossSiteScripting
- SQL
- javascript
- oracle
- 가상머신
- 자바스크립트
Archives
- Today
- Total
개발바닥 아방수
[MSSQL] 커서 사용법 & 예제 본문
커서란?
행 단위 작업을 효율적으로 하기 위한 방식으로 테이블에서 여러 개의 행을 조회한 후 쿼리의 결과를 한 행씩 처리하는 방식입니다. SELECT 한 결과(행 집합)를 반복 작업해줘야 할 경우 유용하게 사용 가능 한 방식입니다.
커서의 특징
1. 커서는 내장 SQL 문의 수행 결과로 반환될 수 있는 복수의 튜플들을 액세스 할 수 있도록 해주는 개념입니다.
2. 커서는 질의 수행 결과로 반환되는 첫 번째 튜플에 대한 포인터로 생각할 수 있습니다.
3. 커서를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한 번에 하나씩 차례대로 처리할 수 있습니다.
커서 관련 명령어
DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는 명령입니다.
OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트 하도록 설정하는 명령입니다.
FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령입니다.
CLOSE : 질의 수행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령입니다.
커서의 실행 메커니즘
쿼리의 결과인 행 집합을 커서가 한 행씩 읽어가면서 처리하고 처리가 끝나면 커서는 다음행을 가리키게 돼요. 하지만 커서를 사용함에 따라 SQL의 성능을 떨어트리는 요인이 됩니다. 적은 데이터를 처리할 경우 그렇게 큰 차이가 나지 않겠지만 많은 데이터를 처리할 경우에는 커서 사용을 피하는 것이 좋습니다.
사용 예제
테이블 생성(MY_FRIEND)
CREATE TABLE MY_FRIEND(
NAME NVARCHAR(20),
AGE NUMERIC(3)
)
INSERT INTO MY_FRIEND(NAME,AGE)VALUES('홍길동',20)
INSERT INTO MY_FRIEND(NAME,AGE)VALUES('홍길순',25)
INSERT INTO MY_FRIEND(NAME,AGE)VALUES('김철수',22)
INSERT INTO MY_FRIEND(NAME,AGE)VALUES('김민수',27)
테이블(MY_FRIEND)을 SELECT 해서 나이를 1살 올리는 예제
--변수 선언 조회한 컬럼을 담을 변수도 선언해야한다.
DECLARE
@INDEX INT,
@NAME VARCHAR(100),
@AGE INT
SET @INDEX = 0; --INDEX초기화
DECLARE CUR CURSOR FOR --CUR라는 이름의 커서 선언
SELECT --쿼리 조회
NAME,
AGE
FROM MY_FRIEND
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 MY_FRIEND
SET AGE = @AGE+1 --나이+1
WHERE NAME = @NAME
FETCH NEXT FROM CUR INTO @NAME,@AGE --다음ROW로 이동
END
--커서 닫고 초기화
CLOSE CUR
DEALLOCATE CUR
'데이터베이스 > MS-SQL' 카테고리의 다른 글
[DB] MSSQL 자동증가열(IDENTITY)사용법 (0) | 2022.11.23 |
---|---|
[MSSQL] 클러스터 PK 인덱스와 넌 클러스터 PK 인덱스, 넌 클러스터 인덱스 기준 (0) | 2022.11.23 |