커서(데이터베이스 엔진)
관계형 데이터베이스에서의 연산은 전체 행 집합에 적용됩니다. SELECT 문에 의해 반환된 행 집합은 문의 WHERE 절 조건을 만족하는 모든 행으로 구성됩니다. SELECT 문에 의해 반환된 전체 행 집합을 결과 집합이라고 합니다. 응용 프로그램, 특히 대화형 온라인 응용 프로그램에서는 전체 결과 집합을 한 단위로 사용하므로 항상 효과적으로 작업할 수는 없습니다. 이러한 응용 프로그램에는 한 번에 한 행이나 적은 행 블록을 사용하여 작업하는 메커니즘이 필요합니다. 커서는 이러한 메커니즘을 제공하는 결과 집합에 대한 확장입니다.
커서는 다음과 같이 결과 처리를 확장합니다.
- 결과 집합의 특정 행에 위치를 정할 수 있습니다.
- 결과 집합의 현재 위치에서 한 행 또는 행 블록을 검색합니다.
- 결과 집합의 현재 위치에 있는 행 데이터를 수정할 수 있습니다.
- 결과 집합에 나타난 데이터베이스 데이터에 대해 다른 사용자가 변경한 내용을 여러 가지 수준으로 볼 수 있습니다.
- 스크립트, 저장 프로시저 및 트리거의 Transact-SQL 문에서 결과 집합의 데이터에 액세스할 수 있도록 합니다.
커서 요청
Microsoft SQL Server 2005에서는 두 가지 방법으로 커서를 요청할 수 있습니다.
- Transact-SQL
Transact-SQL 언어는 SQL-92 커서 구문을 본뜬 커서 사용 구문을 지원합니다. - 데이터베이스 API(응용 프로그래밍 인터페이스) 커서 함수
SQL Server에서는 다음과 같은 데이터베이스 API의 커서 기능을 지원합니다.- ADO(Microsoft ActiveX Data Object)
- OLE DB
- ODBC(Open Database Connectivity)
응용 프로그램에서 이러한 두 가지 커서 요청 방법을 혼합하여 사용할 수 없습니다. API를 사용하여 커서 동작을 지정한 응용 프로그램은 또한 Transact-SQL DECLARE CURSOR 문을 실행하여 Transact-SQL 커서를 요청할 수 없습니다. 모든 API 커서 특성을 기본값으로 설정한 경우에만 DECLARE CURSOR를 실행해야 합니다.
Transact-SQL 및 API 커서 모두 요청되지 않은 경우 SQL Server는 기본적으로 기본 결과 집합이라고 하는 전체 결과 집합을 응용 프로그램에 반환합니다.
커서 프로세스
Transact-SQL 커서와 API 커서는 구문이 서로 다르지만 모든 SQL Server 커서에 대해 다음과 같은 일반 프로세스를 사용합니다.
- 커서와 Transact-SQL 문의 결과 집합을 연결하고 커서 행의 업데이트 가능 여부 등 커서의 특성을 정의합니다.
- Transact-SQL 문을 실행하여 커서를 채웁니다.
- 보려는 커서의 행을 검색합니다. 커서에서 한 행이나 한 행 블록을 검색하는 작업을 인출이라고 합니다. 일련의 인출 작업을 수행하여 행을 앞으로 또는 뒤로 검색하는 것을 스크롤이라고 합니다.
- 또는 커서의 현재 위치에 있는 행에 대해 수정 작업(업데이트 또는 삭제)을 수행합니다.
- 커서를 닫습니다.