다음을 통해 공유


ODBC 동적 커서

동적 커서는 동적입니다. 커서를 연 후 결과 집합의 멤버 자격, 순서 및 값에 대한 변경 내용을 검색할 수 있습니다. 예를 들어 동적 커서가 두 행을 페치하고 다른 애플리케이션이 해당 행 중 하나를 업데이트하고 다른 행을 삭제한다고 가정합니다. 동적 커서가 해당 행을 다시 추가하려고 하면 삭제된 행을 찾을 수 없지만 업데이트된 행에 대한 새 값을 반환합니다.

동적 커서는 자체 및 다른 사용자가 만든 모든 업데이트, 삭제 및 삽입을 검색합니다. (SQL_ATTR_TXN_ISOLATION 연결 특성에 의해 설정된 대로 트랜잭션의 격리 수준이 적용됩니다.) SQL_ATTR_ROW_STATUS_PTR 문 특성에 의해 지정된 행 상태 배열은 이러한 변경 내용을 반영하며 SQL_ROW_SUCCESS, SQL_ROW_SUCCESS_WITH_INFO, SQL_ROW_ERROR, SQL_ROW_UPDATED 및 SQL_ROW_ADDED 포함할 수 있습니다. 동적 커서가 행 집합 외부에서 삭제된 행을 반환하지 않으므로 더 이상 결과 집합에 삭제된 행이 있는지 또는 행 상태 배열에 해당 요소가 있는지 인식하지 않으므로 SQL_ROW_DELETED 반환할 수 없습니다. SQL_ROW_ADDED 행이 다른 커서에 의해 업데이트되는 경우가 아니라 SQLSetPos 호출에 의해 업데이트되는 경우에만 반환됩니다.

데이터베이스에서 동적 커서를 구현하는 한 가지 방법은 결과 집합의 멤버 자격 및 순서를 정의하는 선택적 인덱스를 만드는 것입니다. 다른 사용자가 변경할 때 인덱스가 업데이트되므로 이러한 인덱스를 기반으로 하는 커서는 모든 변경 내용에 민감합니다. 인덱스 따라 처리하여 이 인덱스로 정의된 결과 집합 내의 추가 선택을 수행할 수 있습니다.

결과 집합을 고유 키로 정렬하도록 요구하여 동적 커서를 시뮬레이션할 수 있습니다. 이러한 제한을 사용하면 커서가 행을 가져올 때마다 SELECT 문을 실행하여 페치합니다. 예를 들어 결과 집합이 다음 문으로 정의되어 있다고 가정합니다.

SELECT * FROM Customers ORDER BY Name, CustID  

이 결과 집합의 다음 행 집합을 가져오기 위해 시뮬레이션된 커서는 다음 SELECT 문의 매개 변수를 현재 행 집합의 마지막 행에 있는 값으로 설정한 다음 실행합니다.

SELECT * FROM Customers WHERE (Name > ?) AND (CustID > ?)  
   ORDER BY Name, CustID  

이 문은 두 번째 결과 집합을 만듭니다. 첫 번째 행 집합은 원래 결과 집합의 다음 행 집합입니다. 이 경우 Customers 테이블의 행 집합입니다. 커서는 이 행 집합을 애플리케이션에 반환합니다.

이러한 방식으로 구현된 동적 커서는 실제로 많은 결과 집합을 생성하므로 원래 결과 집합의 변경 내용을 검색할 수 있습니다. 애플리케이션은 이러한 보조 결과 집합의 존재를 결코 알지 못합니다. 커서가 원래 결과 집합의 변경 내용을 검색할 수 있는 것처럼 표시됩니다.