Поделиться через


Функция 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

ОператорHandle

[Входные данные] Дескриптор инструкции.

Имя каталога

[Входные данные] Имя каталога. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют каталогов. Имя каталога не может содержать шаблон поиска строк.

Если для атрибута SQL_ATTR_METADATA_ID инструкции задано SQL_TRUEзначение, CatalogName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, CatalogName является обычным аргументом, он обрабатывается буквально, и его дело является значительным. Дополнительные сведения см. в разделе "Аргументы" в функциях каталога.

NameLength1

[Входные данные] Длина символов catalogName.

SchemaName

[Входные данные] Имя схемы. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют схем. SchemaName не может содержать шаблон поиска строк.

Если для атрибута SQL_ATTR_METADATA_ID инструкции задано SQL_TRUEзначение, SchemaName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSEтак, SchemaName является обычным аргументом, он обрабатывается буквально, и его дело является значительным.

NameLength2

[Входные данные] Длина в символах SchemaName.

TableName

[Входные данные] Имя таблицы. Этот аргумент не может быть указателем null. Имя таблицы не может содержать шаблон поиска строк.

SQL_ATTR_METADATA_ID Если для атрибута инструкции задано SQL_TRUEзначение, TableName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, TableName является обычным аргументом, он обрабатывается буквально, и его дело является значительным.

NameLength3

[Входные данные] Длина в символах TableName.

Уникальный

[Входные данные] Тип индекса: SQL_INDEX_UNIQUE или SQL_INDEX_ALL.

Reserved

[Входные данные] Указывает важность CARDINALITY и PAGES столбцы в результирующем наборе. Следующие параметры влияют только на возврат CARDINALITY и PAGES только столбцы; сведения о индексе возвращаются, даже если CARDINALITY и PAGES не возвращаются.

SQL_ENSURE запрашивает, что драйвер безусловно извлекает статистику. (Драйверы, которые соответствуют только стандарту Open Group и не поддерживают расширения ODBC, не смогут поддерживать SQL_ENSURE.)

SQL_QUICK запрашивает, что драйвер извлекает CARDINALITY и PAGES только в том случае, если он будет легко доступен с сервера. В этом случае драйвер не гарантирует, что значения являются текущими. (Приложения, записываемые в стандарт Open Group, всегда получают SQL_QUICK поведение от драйверов, совместимых с ODBC 3.x.).

Возвраты

SQL_SUCCESS, , SQL_SUCCESS_WITH_INFO, SQL_ERRORSQL_STILL_EXECUTINGили SQL_INVALID_HANDLE.

Diagnostics

При SQLStatistics возврате SQL_ERROR или SQL_SUCCESS_WITH_INFOсвязанном SQLSTATE значении можно получить путем вызова SQLGetDiagRechandleType и SQL_HANDLE_STMTдескриптораоператораHandle. В следующей таблице перечислены SQLSTATE значения, которые обычно возвращаются SQLStatistics и объясняются каждым из них в контексте этой функции. Нотация (DM) предшествует описаниям каждого SQLSTATE , возвращенного диспетчером драйверов. Возвращаемый код, связанный с каждым SQLSTATE значением, если SQL_ERRORне указано иное.

SQLSTATE Ошибка Description
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
08S01 Сбой связи Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции.
24000 Недопустимое состояние курсора Курсор был открыт на ОператорHandle и SQLFetchSQLFetchScroll был вызван. Эта ошибка возвращается диспетчером драйверов, если SQLFetch или он не вернулся и SQLFetchScroll возвращается SQL_NO_DATA драйвером, если SQLFetch он SQLFetchScroll или вернулся SQL_NO_DATA.

Курсор был открыт на ОператорHandle, но SQLFetchSQLFetchScroll не был вызван.
40001 Сбой сериализации Транзакция была откатена из-за взаимоблокировки ресурсов с другой транзакцией.
40003 Неизвестное завершение инструкции Связанное подключение завершилось сбоем во время выполнения этой функции, и состояние транзакции невозможно определить.
HY000 Общая ошибка Произошла ошибка, для которой не было конкретного SQLSTATE и для которого не определена конкретная SQLSTATE реализация. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину.
HY001 Ошибка выделения памяти Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции.
HY008 Операция отменена Асинхронная обработка была включена для ОператораHandle. Функция была вызвана и до завершения выполнения SQLCancel или SQLCancelHandle была вызвана в StatementHandle, а затем функция была вызвана еще раз на ОператорHandle.

Функция была вызвана и до завершения выполнения SQLCancel или SQLCancelHandle была вызвана в StatementHandle из другого потока в многопотоковом приложении.
HY009 Недопустимое использование указателя NULL Аргумент TableName был пустым указателем.

Для SQL_ATTR_METADATA_ID атрибута инструкции задано SQL_TRUEзначение , аргумент CatalogName был пустым указателем, а SQL_CATALOG_NAMEInfoType возвращает поддерживаемые имена каталогов.

(DM) Атрибут SQL_ATTR_METADATA_ID инструкции был задан SQL_TRUE, и аргумент SchemaName был пустым указателем.
HY010 Ошибка последовательности функций (DM) Асинхронно выполняющаяся функция была вызвана для дескриптора соединения, связанного с ОператоромHandle. Эта асинхронная функция по-прежнему выполнялась при вызове SQLStatistics функции.

(DM) SQLExecuteSQLExecDirectили SQLMoreResults был вызван для оператора StatementHandle и возвращенSQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров.

(DM) асинхронно выполняющаяся функция (не эта) была вызвана для StatementHandle и по-прежнему выполнялась при вызове этой функции.

(DM) SQLExecute, SQLExecDirectSQLBulkOperationsили SQLSetPos был вызван для ОператораHandle и возвращенSQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
HY090 Недопустимая длина строки или буфера (DM) Значение одного из аргументов длины имени было меньше 0, но не равно SQL_NTS.

Значение одного из аргументов длины имени превысило максимальное значение длины соответствующего имени.
HY100 Тип параметра Uniqueness вне диапазона (DM) Указано недопустимое уникальное значение.
HY101 Тип параметра точности вне диапазона (DM) Указано недопустимое зарезервированное значение.
HY117 Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function.
HYC00 Необязательный компонент не реализован Был указан каталог, а драйвер или источник данных не поддерживает каталоги.

Указана схема, а драйвер или источник данных не поддерживает схемы.

Сочетание текущих параметров атрибутов SQL_ATTR_CONCURRENCY инструкции SQL_ATTR_CURSOR_TYPE не поддерживается драйвером или источником данных.

Для SQL_ATTR_USE_BOOKMARKS атрибута инструкции задано SQL_UB_VARIABLEзначение , и SQL_ATTR_CURSOR_TYPE атрибут инструкции был задан для типа курсора, для которого драйвер не поддерживает закладки.
HYT00 Истекло время ожидания Срок ожидания запроса истек до того, как источник данных вернул запрошенный результирующий набор. Период времени ожидания задается через SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Время ожидания для подключения истекло Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Драйвер не поддерживает эту функцию (DM) Драйвер, связанный с оператором StatementHandle , не поддерживает функцию.
IM017 Опрос отключен в асинхронном режиме уведомлений При использовании модели уведомлений опрос отключается.
IM018 SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции в этом дескрипторе. Если предыдущий вызов функции возвращает SQL_STILL_EXECUTING дескриптор и включен режим уведомлений, SQLCompleteAsync необходимо вызвать дескриптор после обработки и завершить операцию.

Comments

SQLStatisticsвозвращает сведения о одной таблице в виде стандартного результирующий набор, упорядоченный по NON_UNIQUE, , TYPEиINDEX_NAMEINDEX_QUALIFIERORDINAL_POSITION. Результирующий набор объединяет статистические данные (в CARDINALITY столбцах PAGES результирующего набора) для таблицы с информацией о каждом индексе. Сведения об использовании этих сведений см. в разделе "Использование данных каталога".

Чтобы определить фактическую длину столбцов , и столбцовTABLE_CAT, приложение может вызываться SQLGetInfo с SQL_MAX_TABLE_NAME_LENSQL_MAX_SCHEMA_NAME_LENSQL_MAX_CATALOG_NAME_LENпомощью параметров , и SQL_MAX_COLUMN_NAME_LEN параметров.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) можно определить драйвером. Приложение должно получить доступ к столбцам для конкретного драйвера, отсчитывая от конца результирующего набора вместо указания явной порядковой позиции. Дополнительные сведения см. в разделе "Данные, возвращаемые функциями каталога".

Имя столбца Номер столбца Тип данных Comments
TABLE_CAT (ODBC 1.0) 1 varchar Имя каталога таблицы, к которой применяется статистика или индекс; NULL Значение , если применимо к источнику данных. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют каталогов.
TABLE_SCHEM (ODBC 1.0) 2 varchar Имя схемы таблицы, к которой применяется статистика или индекс; NULL Значение , если применимо к источнику данных. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют схем.
TABLE_NAME (ODBC 1.0) 3 varchar не NULL Имя таблицы, к которой применяется статистика или индекс.
NON_UNIQUE (ODBC 1.0) 4 smallint Указывает, не допускает ли индекс повторяющиеся значения:

SQL_TRUE Значение индекса, если значения индекса могут быть неуниканы.

SQL_FALSE Значение ,если значения индекса должны быть уникальными.

NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT.
INDEX_QUALIFIER (ODBC 1.0) 5 varchar Идентификатор, используемый для определения имени индекса, выполняющего действие DROP INDEX; NULL возвращается, если квалификатор индекса не поддерживается источником данных или TYPE имеет значение SQL_TABLE_STAT. Если значение, отличное от NULL, возвращается в этом столбце, оно должно использоваться для определения имени индекса в DROP INDEX инструкции; в противном случае TABLE_SCHEM следует использовать для определения имени индекса.
INDEX_NAME (ODBC 1.0) 6 varchar Имя индекса; NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT.
TYPE (ODBC 1.0) 7 smallint не NULL Тип возвращаемых сведений:

SQL_TABLE_STAT указывает статистику таблицы (в столбце CARDINALITY или PAGES столбце).

SQL_INDEX_BTREE указывает индекс B-Tree.

SQL_INDEX_CLUSTERED указывает кластеризованный индекс.

SQL_INDEX_CONTENT указывает индекс содержимого.

SQL_INDEX_HASHED указывает хэшированные индексы.

SQL_INDEX_OTHER указывает другой тип индекса.
ORDINAL_POSITION (ODBC 1.0) 8 smallint Порядковый номер столбца в индексе (начиная с 1); NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT.
COLUMN_NAME (ODBC 1.0) 9 varchar Имя столбца. Если столбец основан на выражении, например SALARY + BENEFITS, возвращается выражение; если выражение не удается определить, возвращается пустая строка. NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT.
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_STATзначение; число уникальных значений в индексе, если это не SQL_TABLE_STATтак; NULL возвращается, если TYPE значение недоступно из источника данных.
PAGES (ODBC 1.0) 12 integer Количество страниц, используемых для хранения индекса или таблицы; число страниц таблицы, если TYPE имеет SQL_TABLE_STATзначение; число страниц для индекса, если TYPE это не SQL_TABLE_STATтак; NULL возвращается, если значение недоступно из источника данных или если оно не применимо к источнику данных.
FILTER_CONDITION (ODBC 2.0) 13 varchar Если индекс является отфильтрованным индексом, это условие фильтра, например SALARY > 30000, если условие фильтра не может быть определено, это пустая строка.

NULL Если индекс не является отфильтрованным индексом, он не может быть определен, является ли индекс отфильтрованным или TYPE является SQL_TABLE_STAT.

Если строка в результирующем наборе соответствует таблице, драйвер устанавливает и задает TYPESQL_TABLE_STATNON_UNIQUE, , INDEX_QUALIFIER, INDEX_NAMEASC_OR_DESCORDINAL_POSITIONCOLUMN_NAMENULLа также . Если CARDINALITY или PAGES они недоступны из источника данных, драйвер устанавливает для них значение NULL.

Пример кода

Пример кода аналогичной функции см. в статье SQLColumns Function.

Сведения Article
Привязка буфера к столбцу в результирующем наборе Функция SQLBindCol
Отмена обработки инструкций Функция SQLCancel
Получение одной строки или блока данных в направлении только для пересылки. Функция SQLFetch
Получение блока данных или прокрутка результирующий набор Функция SQLFetchScroll
Возврат столбцов внешних ключей Функция SQLForeignKeys
Возврат столбцов первичного ключа Функция SQLPrimaryKeys