SQLFetchScroll(커서 라이브러리)

Important

이 기능은 이후 Windows 버전에서 제공될 예정입니다. 새 개발 작업에서 이 기능을 사용하지 말고 현재 이 기능을 사용하는 애플리케이션을 수정할 계획입니다. 드라이버의 커서 기능을 사용하는 것이 좋습니다.

이 항목에서는 커서 라이브러리에서 SQLFetchScroll 함수의 사용에 대해 설명합니다. SQLFetchScroll에 대한 일반적인 내용은 SQLFetchScroll 함수를 참조하세요.

커서 라이브러리는 드라이버에서 SQLFetch를 반복적으로 호출하여 SQLFetchScroll을 구현합니다. 드라이버에서 검색한 데이터를 애플리케이션에서 제공하는 행 집합 버퍼로 전송합니다. 또한 메모리 및 디스크 파일에 데이터를 캐시합니다. 애플리케이션이 새 행 집합을 요청하면 커서 라이브러리는 드라이버(이전에 페치되지 않은 경우) 또는 캐시(이전에 가져온 경우)에서 필요에 따라 검색합니다. 마지막으로 커서 라이브러리는 캐시된 데이터의 상태를 유지하고 이 정보를 행 상태 배열의 애플리케이션에 반환합니다.

커서 라이브러리를 사용하는 경우 SQLFetchScroll에 대한 호출을 SQLFetch 또는 SQLExtendedFetch에 대한 호출과 혼합할 수 없습니다.

커서 라이브러리를 사용하는 경우 ODBC 2에 대해 SQLFetchScroll 에 대한 호출이 모두 지원됩니다.x 및 ODBC 3.x 드라이버.

행 집합 버퍼

커서 라이브러리는 다음과 같은 경우 애플리케이션에서 제공하는 행 집합 버퍼로의 데이터 전송을 최적화합니다.

  • 애플리케이션은 행 단위 바인딩을 사용합니다.

  • 애플리케이션에서 데이터 행을 보유하도록 선언하는 구조의 필드 간에 사용되지 않는 바이트는 없습니다.

  • SQLFetch 또는 SQLFetchScroll열의 길이/표시기를 반환하는 필드는 해당 열의 버퍼를 따르고 다음 열의 버퍼 앞에 옵니다. 이러한 필드는 선택 사항입니다.

애플리케이션이 새 행 집합을 요청하면 커서 라이브러리는 필요에 따라 캐시 및 드라이버에서 데이터를 검색합니다. 새 행 집합과 이전 행 집합이 겹치는 경우 커서 라이브러리는 행 집합 버퍼의 겹치는 섹션에서 데이터를 다시 사용하여 성능을 최적화할 수 있습니다. 따라서 새 행 집합과 이전 행 집합이 겹치고 변경 내용이 행 집합 버퍼의 겹치는 섹션에 있지 않으면 행 집합 버퍼에 대한 저장되지 않은 변경 내용이 손실됩니다. 변경 내용을 저장하기 위해 애플리케이션은 위치가 지정된 업데이트 문을 제출합니다.

애플리케이션이 fetchOrientation 인수가 SQL_FETCH_RELATIVE 설정되고 FetchOffset 인수가 0으로 설정된 SQLFetchScroll 을 호출할 때 커서 라이브러리는 항상 캐시의 데이터로 행 집합 버퍼를 새로 고칩니다.

커서 라이브러리는 커서가 열려 있는 동안 행 집합 크기를 변경하기 위해 SQL_ATTR_ROW_ARRAY_SIZE 특성이 있는 SQLSetStmtAttr 호출을 지원합니다. 새 행 집합 크기는 다음에 SQLFetchScroll이 호출될 때 적용됩니다.

결과 집합 멤버 자격

커서 라이브러리는 애플리케이션이 요청할 때만 드라이버에서 데이터를 검색합니다. 데이터 원본 및 SQL_CONCURRENCY 문 특성의 설정에 따라 다음과 같은 결과가 발생합니다.

  • 커서 라이브러리에서 검색한 데이터는 문이 실행될 때 사용 가능한 데이터와 다를 수 있습니다. 예를 들어 커서를 연 후 현재 커서 위치 이외의 지점에 삽입된 행을 일부 드라이버에서 검색할 수 있습니다.

  • 결과 집합의 데이터는 커서 라이브러리의 데이터 원본에 의해 잠기므로 다른 사용자가 사용할 수 없습니다.

커서 라이브러리가 데이터 행을 캐시한 후에는 기본 데이터 원본에서 해당 행의 변경 내용을 검색할 수 없습니다(동일한 커서의 캐시에서 작동하는 위치가 지정된 업데이트 및 삭제 제외). 이는 SQLFetchScroll 호출의 경우 커서 라이브러리가 데이터 원본의 데이터를 다시 수집하지 않으므로 발생합니다. 대신 캐시에서 데이터를 다시 설정합니다.

스크롤

커서 라이브러리는 SQLFetchScroll에서 다음 인출 형식을 지원합니다.

커서 유형 페치 형식
전달 전용 SQL_FETCH_NEXT
정적 SQL_FETCH_NEXT

SQL_FETCH_PRIOR

SQL_FETCH_FIRST

SQL_FETCH_LAST

SQL_FETCH_RELATIVE

SQL_FETCH_ABSOLUTE

SQL_FETCH_BOOKMARK

오류

SQLFetchScroll이 호출되고 SQLFetch 호출 중 하나가 SQL_ERROR 반환하면 커서 라이브러리가 다음과 같이 진행됩니다. 이러한 단계를 완료한 후 커서 라이브러리는 처리를 계속합니다.

  1. SQLGetDiagRec를 호출하여 드라이버에서 오류 정보를 가져오고 이를 드라이버 관리자의 진단 레코드로 게시합니다.

  2. 진단 레코드의 SQL_DIAG_ROW_NUMBER 필드를 적절한 값으로 설정합니다.

  3. 진단 레코드의 SQL_DIAG_COLUMN_NUMBER 필드를 해당하는 경우 적절한 값으로 설정합니다. 그렇지 않으면 0으로 설정합니다.

  4. 행 상태 배열의 오류 행 값을 SQL_ROW_ERROR 설정합니다.

커서 라이브러리가 SQLFetchScroll 구현에서 SQLFetch를 여러 번 호출한 후 SQLFetch 호출 중 하나에서 반환된 오류 또는 경고는 진단 레코드에 있으며 SQLGetDiagRec 호출을 통해 검색할 수 있습니다. 데이터를 가져올 때 잘린 경우 잘린 데이터는 이제 커서 라이브러리의 캐시에 상주합니다. 잘린 데이터가 있는 행으로 스크롤하기 위해 SQLFetchScroll에 대한 후속 호출은 잘린 데이터를 반환하며, 커서 라이브러리의 캐시에서 데이터를 가져오기 때문에 경고가 발생하지 않습니다. 버퍼에서 반환된 데이터가 잘렸는지 여부를 확인할 수 있도록 반환되는 데이터의 길이를 추적하려면 애플리케이션이 길이/표시기 버퍼를 바인딩해야 합니다.

책갈피 작업

커서 라이브러리는 SQL_FETCH_BOOKMARK FetchOrientation을 사용하여 SQLFetchScroll 호출을 지원합니다. 또한 책갈피 작업에서 사용할 수 있는 FetchOffset 인수의 오프셋 지정도 지원합니다. 커서 라이브러리에서 지원하는 유일한 책갈피 작업입니다. 커서 라이브러리는 SQLBulkOperations 호출 지원하지 않습니다.

애플리케이션이 SQL_ATTR_USE_BOOKMARKS 문 특성을 설정하고 책갈피 열에 바인딩된 경우 커서 라이브러리는 고정 길이 책갈피를 생성하고 애플리케이션에 반환합니다. 커서 라이브러리는 사용하는 책갈피를 만들고 유지 관리합니다. 데이터 원본에서 유지 관리되는 책갈피를 사용하지 않습니다. 데이터 원본에서 이미 가져온 데이터 블록을 검색하기 위해 SQLFetchScroll이 호출되면 커서 라이브러리 캐시에서 데이터를 검색합니다. 따라서 SQL_FETCH_BOOKMARK FetchOrientation사용하여 SQLFetchScroll 호출에 사용되는 책갈피를 커서 라이브러리에서 만들고 유지 관리해야 합니다.

다른 함수와의 상호 작용

애플리케이션은 배치된 업데이트 또는 삭제 문을 준비하거나 실행하기 전에 SQLFetch 또는 SQLFetchScroll을 호출해야 합니다.