다음을 통해 공유


SQLStatistics 함수

SQLStatistics 는 단일 테이블 및 테이블과 연결된 인덱스에 대한 통계 목록을 검색합니다. 드라이버는 결과 집합으로 정보를 반환합니다.

준수

도입된 버전: ODBC 1.0 표준 준수: ISO 92

문법

SQLRETURN SQLStatistics(
     SQLHSTMT        StatementHandle ,
     SQLCHAR *       CatalogName ,
     SQLSMALLINT     NameLength1 ,
     SQLCHAR *       SchemaName ,
     SQLSMALLINT     NameLength2 ,
     SQLCHAR *       TableName ,
     SQLSMALLINT     NameLength3 ,
     SQLUSMALLINT    Unique ,
     SQLUSMALLINT    Reserved);

Arguments

StatementHandle

[입력] 문 핸들입니다.

CatalogName

[입력] 카탈로그 이름입니다. 드라이버가 다른 DBMS에서 데이터를 검색하는 경우와 같이 일부 테이블에 대해 카탈로그를 지원하지만 다른 테이블에 대해서는 지원하지 않는 경우 빈 문자열("")은 카탈로그가 없는 테이블을 나타냅니다. CatalogName 은 문자열 검색 패턴을 포함할 수 없습니다.

문 특성이 SQL_ATTR_METADATA_ID 설정된 SQL_TRUE경우 CatalogName 은 식별자로 처리되고 해당 대/소문자는 중요하지 않습니다. 이 인수인 SQL_FALSE경우 CatalogName 은 일반적인 인수이며 문자 그대로 처리되며 해당 사례는 중요합니다. 자세한 내용은 카탈로그 함수의 인수를 참조하세요.

NameLength1

[입력] CatalogName 문자의 길이입니다.

스키마 이름

[입력] 스키마 이름입니다. 드라이버가 다른 DBMS에서 데이터를 검색하는 경우와 같이 드라이버가 일부 테이블에 대한 스키마를 지원하지만 다른 테이블에 대해서는 지원하지 않는 경우 빈 문자열("")은 스키마가 없는 테이블을 나타냅니다. SchemaName 은 문자열 검색 패턴을 포함할 수 없습니다.

문 특성이 SQL_ATTR_METADATA_ID 설정된 SQL_TRUE경우 SchemaName 은 식별자로 처리되고 해당 대/소문자는 중요하지 않습니다. 이 인수인 SQL_FALSE경우 SchemaName 은 일반적인 인수이며 문자 그대로 처리되며 대/소문자도 중요합니다.

NameLength2

[입력] SchemaName 문자의 길이입니다.

테이블 이름

[입력] 테이블 이름입니다. 이 인수는 null 포인터일 수 없습니다. TableName 은 문자열 검색 패턴을 포함할 수 없습니다.

문 특성이 SQL_ATTR_METADATA_ID 설정된 SQL_TRUE경우 TableName 은 식별자로 처리되고 해당 대/소문자는 중요하지 않습니다. 이 인수인 SQL_FALSE경우 TableName 은 일반적인 인수이며 문자 그대로 처리되며 해당 대/소문자를 중요하게 만듭니다.

NameLength3

[입력] TableName 문자의 길이입니다.

독특한

[입력] 인덱스 유형: SQL_INDEX_UNIQUE 또는 SQL_INDEX_ALL.

Reserved

[입력] 결과 집합의 CARDINALITY 열 및 PAGES 중요도를 나타냅니다. 다음 옵션은 열 및 PAGES 열의 반환에 CARDINALITY 만 영향을 줍니다. 인덱스 정보는 반환되지 않더라도 PAGESCARDINALITY 반환됩니다.

SQL_ENSURE 는 드라이버가 무조건 통계를 검색할 것을 요청합니다. (Open Group 표준을 준수하고 ODBC 확장을 지원하지 않는 드라이버는 지원할 SQL_ENSURE수 없습니다.)

SQL_QUICK 는 드라이버 CARDINALITYPAGES 가 서버에서 쉽게 사용할 수 있는 경우에만 검색할 것을 요청합니다. 이 경우 드라이버는 값이 최신인지 확인하지 않습니다. (Open Group 표준으로 작성된 애플리케이션은 항상 ODBC 3.x 규격 드라이버에서 동작을 가져옵니다SQL_QUICK.)

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR또는 SQL_INVALID_HANDLE.

Diagnostics

SQLStatistics 반환 SQL_ERROR 하거나SQL_SUCCESS_WITH_INFO, HandleType 및 HandleofSQL_HANDLE_STMTStatementHandle을 사용하여 호출 SQLGetDiagRec 하여 연결된 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 일반적으로 반환되는 값을 나열 SQLSTATE 하고 이 함수의 컨텍스트에서 각각에 대해 설명합니다. 표기법 (DM) 은 드라이버 관리자가 반환한 각 SQLSTATE 값에 대한 설명 앞에 나와 SQLStatistics 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR다음과 같습니다.

SQLSTATE 오류 Description
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 .를 반환합니다 SQL_SUCCESS_WITH_INFO.
08S01 통신 링크 실패 드라이버와 드라이버가 연결된 데이터 원본 간의 통신 링크는 함수가 처리를 완료하기 전에 실패했습니다.
24000 커서 상태가 잘못되었습니다. StatementHandle에서 커서가 열려 있거나 SQLFetchSQLFetchScroll 호출되었습니다. 이 오류는 드라이버 관리자가 반환하거나 SQLFetchScroll 반환하지 않은 경우 SQLFetch 반환 SQL_NO_DATA 되며, 반환되거나 반환된 경우 SQLFetchSQLFetchScroll 드라이버에서 반환SQL_NO_DATA됩니다.

StatementHandle에서 커서가 열려 있었지만 SQLFetchSQLFetchScroll 호출되지 않았습니다.
40001 Serialization 실패 다른 트랜잭션과의 리소스 교착 상태 때문에 트랜잭션이 롤백되었습니다.
40003 문 완성을 알 수 없음 이 함수를 실행하는 동안 연결된 연결이 실패했으며 트랜잭션 상태를 확인할 수 없습니다.
HY000 일반 오류 특정 SQLSTATE 항목이 없고 구현별 SQLSTATE 이 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼에서 반환된 SQLGetDiagRec 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY008 작업이 취소됨 StatementHandle에 대해 비동기 처리를 사용하도록 설정했습니다. 함수가 호출되고 실행이 완료되기 전에 StatementHandleSQLCancelSQLCancelHandle 에서 호출된 다음 StatementHandle에서 함수가 다시 호출되었습니다.

함수가 호출되고 실행을 SQLCancel 완료하기 전에 다중 SQLCancelHandle 스레드 애플리케이션의 다른 스레드에서 StatementHandle 에서 호출되었습니다.
HY009 null 포인터를 잘못 사용했습니다. TableName 인수가 null 포인터였습니다.

문 특성이 SQL_ATTR_METADATA_ID 설정된 경우 SQL_TRUECatalogName 인수는 null 포인터이고 SQL_CATALOG_NAMEInfoType은 카탈로그 이름이 지원됨을 반환합니다.

(DM) SQL_ATTR_METADATA_ID 문 특성이 설정 SQL_TRUE되었고 SchemaName 인수가 null 포인터였습니다.
HY010 함수 시퀀스 오류 (DM) StatementHandle과 연결된 연결 핸들에 대해 비동기적으로 실행되는 함수가 호출되었습니다. 이 비동기 함수는 함수가 호출되었을 때 SQLStatistics 계속 실행되었습니다.

(DM) SQLExecute또는 SQLExecDirectSQLMoreResultsStatementHandle에 대해 호출되고 반환되었습니다SQL_PARAM_DATA_AVAILABLE. 이 함수는 모든 스트리밍된 매개 변수에 대해 데이터를 검색하기 전에 호출되었습니다.

(DM) 이 함수가 아닌 비동기 실행 함수가 StatementHandle 에 대해 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다.

(DM) SQLExecute, SQLExecDirect또는 SQLBulkOperationsSQLSetPosStatementHandle에 대해 호출되고 반환되었습니다SQL_NEED_DATA. 이 함수는 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없어 함수 호출을 처리할 수 없습니다.
HY090 잘못된 문자열 또는 버퍼 길이 (DM) 이름 길이 인수 중 하나의 값이 0보다 작지만 같지 SQL_NTS는 않습니다.

이름 길이 인수 중 하나의 값이 해당 이름의 최대 길이 값을 초과했습니다.
HY100 고유성 옵션 유형이 범위를 벗어났습니다. (DM) 잘못된 고유 값이 지정되었습니다.
HY101 정확도 옵션 유형이 범위를 벗어났습니다. (DM) 잘못된 예약 값이 지정되었습니다.
HY117 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조하세요.
HYC00 선택적 기능이 구현되지 않음 카탈로그가 지정되었으며 드라이버 또는 데이터 원본은 카탈로그를 지원하지 않습니다.

스키마가 지정되었으며 드라이버 또는 데이터 원본은 스키마를 지원하지 않습니다.

현재 설정과 SQL_ATTR_CURSOR_TYPE 문 특성의 SQL_ATTR_CONCURRENCY 조합은 드라이버 또는 데이터 원본에서 지원되지 않았습니다.

문 특성이 SQL_ATTR_USE_BOOKMARKS 설정 SQL_UB_VARIABLE되었고 SQL_ATTR_CURSOR_TYPE 문 특성이 드라이버가 책갈피를 지원하지 않는 커서 유형으로 설정되었습니다.
HYT00 시간 제한 만료됨 데이터 원본이 요청된 결과 집합을 반환하기 전에 쿼리 제한 시간이 만료되었습니다. 제한 시간은 다음SQL_ATTR_QUERY_TIMEOUT을 통해 SQLSetStmtAttr설정됩니다.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 다음SQL_ATTR_CONNECTION_TIMEOUT을 통해 SQLSetConnectAttr설정됩니다.
IM001 드라이버는 이 함수를 지원하지 않습니다. (DM) StatementHandle 과 연결된 드라이버는 함수를 지원하지 않습니다.
IM017 비동기 알림 모드에서 폴링을 사용할 수 없습니다. 알림 모델을 사용할 때마다 폴링이 비활성화됩니다.
IM018 SQLCompleteAsync 이 핸들에서 이전 비동기 작업을 완료하기 위해 호출되지 않았습니다. 핸들의 이전 함수 호출이 반환 SQL_STILL_EXECUTING 되고 알림 모드가 활성화된 SQLCompleteAsync 경우 핸들에서 호출하여 사후 처리를 수행하고 작업을 완료해야 합니다.

코멘트

SQLStatistics는 단일 테이블에 대한 정보를 표준 결과 집합으로 반환하고, 순서는 NON_UNIQUE, TYPE, INDEX_QUALIFIERINDEX_NAMEORDINAL_POSITION.로 정렬합니다. 결과 집합은 각 인덱스에 대한 정보와 테이블에 대한 통계 정보( CARDINALITY 결과 집합의 열 및 PAGES 열)를 결합합니다. 이 정보를 사용하는 방법에 대한 자세한 내용은 카탈로그 데이터 사용을 참조하세요.

애플리케이션은 , , 및 열의 TABLE_CAT실제 길이를 결정하기 위해 , SQL_MAX_SCHEMA_NAME_LENSQL_MAX_COLUMN_NAME_LENSQL_MAX_TABLE_NAME_LEN옵션을 사용하여 SQL_MAX_CATALOG_NAME_LEN호출 SQLGetInfo 할 수 있습니다.COLUMN_NAMETABLE_NAMETABLE_SCHEM

비고

ODBC 카탈로그 함수의 일반 사용, 인수 및 반환된 데이터에 대한 자세한 내용은 카탈로그 함수를 참조하세요.

ODBC 3.x의 경우 다음 열의 이름이 바뀌었습니다. 애플리케이션이 열 번호로 바인딩되므로 열 이름 변경은 이전 버전과의 호환성에 영향을 주지 않습니다.

ODBC 2.0 열 ODBC 3.x
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM
SEQ_IN_INDEX ORDINAL_POSITION
COLLATION ASC_OR_DESC

다음 표에서는 결과 집합의 열을 나열합니다. 드라이버에서 열 13(FILTER_CONDITION)을 초과하는 추가 열을 정의할 수 있습니다. 애플리케이션은 명시적 서수 위치를 지정하는 대신 결과 집합의 끝에서 카운트다운하여 드라이버별 열에 액세스할 수 있어야 합니다. 자세한 내용은 카탈로그 함수에서 반환된 데이터를 참조하세요.

열 이름 열 번호 데이터 형식 코멘트
TABLE_CAT (ODBC 1.0) 1 varchar 통계 또는 인덱스가 적용되는 테이블의 카탈로그 이름입니다. NULL 데이터 원본에 적용할 수 없으면 입니다. 드라이버가 다른 DBMS에서 데이터를 검색하는 경우와 같이 일부 테이블에 대해 카탈로그를 지원하지만 다른 테이블에 대해서는 지원하지 않는 경우 카탈로그가 없는 테이블에 대해 빈 문자열("")을 반환합니다.
TABLE_SCHEM (ODBC 1.0) 2 varchar 통계 또는 인덱스가 적용되는 테이블의 스키마 이름입니다. NULL 데이터 원본에 적용할 수 없으면 입니다. 드라이버가 다른 DBMS에서 데이터를 검색하는 경우와 같이 일부 테이블에 대한 스키마를 지원하지만 다른 테이블에 대해서는 지원하지 않는 경우 스키마가 없는 테이블에 대해 빈 문자열("")을 반환합니다.
TABLE_NAME (ODBC 1.0) 3 varchar not NULL 통계 또는 인덱스가 적용되는 테이블의 테이블 이름입니다.
NON_UNIQUE (ODBC 1.0) 4 smallint 인덱스가 중복 값을 허용하지 않는지 여부를 나타냅니다.

인덱스 값이 고유하지 않을 수 있으면 입니다.

SQL_FALSE 인덱스 값이 고유해야 하면 입니다.

NULL가 반환됩니다(있는 SQL_TABLE_STAT경우TYPE).
INDEX_QUALIFIER (ODBC 1.0) 5 varchar 인덱스 이름을 DROP INDEXNULL 한정하는 데 사용되는 식별자는 데이터 원본에서 인덱스 한정자를 지원하지 않거나 인덱스인 경우 TYPE 반환됩니다SQL_TABLE_STAT. 이 열에 null이 아닌 값이 반환되면 문에서 DROP INDEX 인덱스 이름을 한정하는 데 사용해야 합니다. 그렇지 않으면 TABLE_SCHEM 인덱스 이름을 한정하는 데 사용해야 합니다.
INDEX_NAME (ODBC 1.0) 6 varchar 인덱스 이름; NULL 가 반환됩니다(있는 SQL_TABLE_STAT경우TYPE).
TYPE (ODBC 1.0) 7 smallint not NULL 반환되는 정보 유형:

SQL_TABLE_STAT는 테이블(또는 PAGES 열)에 대한 통계를 CARDINALITY 나타냅니다.

SQL_INDEX_BTREE 는 B-트리 인덱스입니다.

SQL_INDEX_CLUSTERED 는 클러스터형 인덱스임을 나타냅니다.

SQL_INDEX_CONTENT 는 콘텐츠 인덱스입니다.

SQL_INDEX_HASHED 는 해시된 인덱스입니다.

SQL_INDEX_OTHER 는 다른 유형의 인덱스입니다.
ORDINAL_POSITION (ODBC 1.0) 8 smallint 인덱스의 열 시퀀스 번호(1부터 시작) NULL 가 반환됩니다(있는 SQL_TABLE_STAT경우TYPE).
COLUMN_NAME (ODBC 1.0) 9 varchar 열 이름. 열이 식과 같은 SALARY + BENEFITS식을 기반으로 하는 경우 식이 반환되고 식을 확인할 수 없으면 빈 문자열이 반환됩니다. NULL가 반환됩니다(있는 SQL_TABLE_STAT경우TYPE).
ASC_OR_DESC (ODBC 1.0) 10 char(1) 열에 대한 정렬 시퀀스: 오름차순의 경우 "A", 내림차순의 경우 "D"입니다. NULL 는 열 정렬 시퀀스가 데이터 원본에서 지원되지 않거나 있는 경우 TYPE 반환됩니다 SQL_TABLE_STAT.
CARDINALITY (ODBC 1.0) 11 integer 테이블 또는 인덱스의 카디널리티; 테이블의 행 수(있는 경우TYPE) - 인덱스의 고유 값(없는 SQL_TABLE_STATNULL 경우TYPE)이며, 데이터 원본에서 값을 사용할 수 없는 경우 반환SQL_TABLE_STAT됩니다.
PAGES (ODBC 1.0) 12 integer 인덱스 또는 테이블을 저장하는 데 사용되는 페이지 수입니다. 테이블의 페이지 수(있는 SQL_TABLE_STAT경우TYPE) 및 인덱스의 페이지 수입니다(없는 NULLSQL_TABLE_STAT경우TYPE). 데이터 원본에서 값을 사용할 수 없거나 데이터 원본에 적용되지 않는 경우 반환됩니다.
FILTER_CONDITION (ODBC 2.0) 13 varchar 인덱스가 필터링된 인덱스인 경우 필터 조건(예: SALARY > 30000필터 조건을 확인할 수 없는 경우)이 빈 문자열입니다.

NULL 인덱스가 필터링된 인덱스가 아니면 인덱스가 필터링된 인덱 TYPESQL_TABLE_STAT스인지 여부를 확인할 수 없습니다.

결과 집합의 행이 테이블에 해당하는 경우 드라이버는 설정 및 SQL_TABLE_STAT 설정NON_UNIQUETYPE, , INDEX_QUALIFIERINDEX_NAME, COLUMN_NAMEORDINAL_POSITIONASC_OR_DESC 합니다.NULL 데이터 원본에서 사용할 수 없거나 PAGES 사용할 수 없는 경우 CARDINALITY 드라이버는 이를 .로 NULL설정합니다.

코드 예제

유사한 함수의 코드 예제는 SQLColumns 함수를 참조하세요.

추가 정보 조항
결과 집합의 열에 버퍼 바인딩 SQLBindCol 함수
문 처리 취소 SQLCancel 함수
단일 행 또는 데이터 블록을 정방향으로 페치합니다. SQLFetch 함수
데이터 블록을 가져오거나 결과 집합을 스크롤합니다. SQLFetchScroll 함수
외세 키의 열 반환 SQLForeignKeys 함수
기본 키의 열 반환 SQLPrimaryKeys 함수