Функция SQLStatistics
Соответствия
Представлена версия: соответствие стандартам ODBC 1.0: ISO 92
Сводка
SQLStatistics получает список статистики по одной таблице и индексам, связанным с таблицей. Драйвер возвращает сведения в виде результирующих наборов.
Синтаксис
SQLRETURN SQLStatistics(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLUSMALLINT Unique,
SQLUSMALLINT Reserved);
Аргументы
ОператорHandle
[Входные данные] Дескриптор инструкции.
Имя каталога
[Входные данные] Имя каталога. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют каталогов. CatalogName не может содержать шаблон поиска строк.
Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, Имя каталога рассматривается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, CatalogName является обычным аргументом; он обрабатывается буквально, и его дело является значительным. Дополнительные сведения см. в разделе "Аргументы" в функциях каталога.
NameLength1
[Входные данные] Длина символов *CatalogName.
Schemaname
[Входные данные] Имя схемы. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют схем. SchemaName не может содержать шаблон поиска строк.
Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, schemaName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, SchemaName является обычным аргументом; он обрабатывается буквально, и его дело является значительным.
NameLength2
[Входные данные] Длина символов *SchemaName.
TableName
[Входные данные] Имя таблицы. Этот аргумент не может быть пустым указателем. SchemaName не может содержать шаблон поиска строк.
Если для атрибута инструкции SQL_ATTR_METADATA_ID задано значение SQL_TRUE, TableName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, TableName является обычным аргументом; он обрабатывается буквально, и его дело является значительным.
NameLength3
[Входные данные] Длина символов *TableName.
Уникальный
[Входные данные] Тип индекса: SQL_INDEX_UNIQUE или SQL_INDEX_ALL.
Reserved
[Входные данные] Указывает важность столбцов CARDINALITY и PAGES в результирующем наборе. Следующие параметры влияют только на возврат столбцов КРАТНОСТИ и PAGES; Сведения об индексе возвращаются, даже если функция КРАТНОСТИ и СТРАНИЦ не возвращаются.
SQL_ENSURE запрашивает, что драйвер безусловно извлекает статистику. (Драйверы, которые соответствуют только стандарту Open Group и не поддерживают расширения ODBC, не смогут поддерживать SQL_ENSURE.)
SQL_QUICK запрашивает, чтобы драйвер извлекает КРАТНОСТЬ и СТРАНИЦы, только если они легко доступны с сервера. В этом случае драйвер не гарантирует актуальность значений. (Приложения, записываемые в стандарт Open Group, всегда будут получать SQL_QUICK поведение из ODBC 3.x-совместимые драйверы.)
Возвраты
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR или SQL_INVALID_HANDLE.
Диагностика
Когда SQLStatistics возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE можно получить путем вызова SQLGetDiagRec с помощью HandleType SQL_HANDLE_STMT и handle of StatementHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращаются SQLStatistics и объясняются каждый из них в контексте этой функции. Нотация "(DM)" предшествует описаниям SQLSTATEs, возвращаемым диспетчером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.
SQLSTATE | Error | Description |
---|---|---|
01000 | Общее предупреждение | Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.) |
08S01 | Сбой связи | Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции. |
24000 | Недопустимое состояние курсора | Курсор был открыт на операторе StatementHandle, и был вызван SQLFetch или SQLFetchScroll . Эта ошибка возвращается диспетчером драйверов, если SQLFetch или SQLFetchScroll не вернул SQL_NO_DATA и возвращается драйвером, если SQLFetch или SQLFetchScroll вернул SQL_NO_DATA. Курсор был открыт на операторе StatementHandle, но не был вызван SQLFetch или SQLFetchScroll . |
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_NAME InfoType возвращает поддерживаемые имена каталогов. (DM) Атрибут инструкции SQL_ATTR_METADATA_ID был задан как SQL_TRUE, и аргумент SchemaName был пустым указателем. |
HY010 | Ошибка последовательности функций | (DM) Асинхронно выполняющаяся функция была вызвана для дескриптора соединения, связанного с ОператоромHandle. Эта асинхронная функция по-прежнему выполнялась при вызове функции SQLStatistics . (DM) SQLExecute, SQLExecDirect или SQLMoreResults был вызван для ОператораHandle и возвращен SQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров. (DM) асинхронно выполняющаяся функция (не эта) была вызвана для StatementHandle и по-прежнему выполнялась при вызове этой функции. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations или 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 должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции. |
Комментарии
SQLStatistics возвращает сведения о одной таблице в виде стандартного результирующий набор, упорядоченный по NON_UNIQUE, TYPE, INDEX_QUALIFIER, INDEX_NAME и ORDINAL_POSITION. Результирующий набор объединяет статистические данные (в столбцах CARDINALITY и PAGES результирующего набора) для таблицы с информацией о каждом индексе. Сведения об использовании этих сведений см. в разделе "Использование данных каталога".
Чтобы определить фактическую длину столбцов TABLE_CAT, TABLE_SCHEM, TABLE_NAME и COLUMN_NAME, приложение может вызывать SQLGetInfo с параметрами SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN и SQL_MAX_COLUMN_NAME_LEN.
Заметка
Дополнительные сведения об общем использовании, аргументах и возвращаемых данных функций каталога 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, если применимо к источнику данных. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют каталогов. |
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 возвращается, если тип SQL_TABLE_STAT. |
INDEX_QUALIFIER (ODBC 1.0) | 5 | Varchar | Идентификатор, используемый для определения имени индекса, выполняющего drop INDEX; Значение NULL возвращается, если квалификатор индекса не поддерживается источником данных или если тип SQL_TABLE_STAT. Если значение, отличное от NULL, возвращается в этом столбце, оно должно использоваться для определения имени индекса в инструкции DROP INDEX ; в противном случае TABLE_SCHEM следует использовать для определения имени индекса. |
INDEX_NAME (ODBC 1.0) | 6 | Varchar | Имя индекса; Значение NULL возвращается, если тип 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 возвращается, если тип SQL_TABLE_STAT. |
COLUMN_NAME (ODBC 1.0) | 9 | Varchar | Имя столбца. Если столбец основан на выражении, например SALARY + BENEFITS, возвращается выражение; Если выражение не может быть определено, возвращается пустая строка. Значение NULL возвращается, если тип SQL_TABLE_STAT. |
ASC_OR_DESC (ODBC 1.0) | 10 | Char(1) | Последовательность сортировки для столбца: "A" для возрастания; "D" для убывания; Значение NULL возвращается, если последовательность сортировки столбцов не поддерживается источником данных или если тип SQL_TABLE_STAT. |
КРАТНОСТЬ (ODBC 1.0) | 11 | Целое | Кратность таблицы или индекса; число строк в таблице, если тип SQL_TABLE_STAT; число уникальных значений в индексе, если ТИП не SQL_TABLE_STAT; Значение NULL возвращается, если значение недоступно из источника данных. |
PAGES (ODBC 1.0) | 12 | Целое | Количество страниц, используемых для хранения индекса или таблицы; число страниц для таблицы, если тип SQL_TABLE_STAT; число страниц для индекса, если тип не SQL_TABLE_STAT; Значение NULL возвращается, если значение недоступно из источника данных или если применимо к источнику данных. |
FILTER_CONDITION (ODBC 2.0) | 13 | Varchar | Если индекс является отфильтрованным индексом, это условие фильтра, например ЗАРПЛАТА > 30000; если условие фильтра не удается определить, это пустая строка. ЗНАЧЕНИЕ NULL, если индекс не является отфильтрованным индексом, его нельзя определить, является ли индекс отфильтрованным индексом или типом SQL_TABLE_STAT. |
Если строка в результирующем наборе соответствует таблице, драйвер задает тип SQL_TABLE_STAT и задает значение NULL NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, ORDINAL_POSITION, COLUMN_NAME и ASC_OR_DESC значение NULL. Если КРАТНОСТЬ или СТРАНИЦы недоступны из источника данных, драйвер устанавливает для них значение NULL.
Пример кода
Пример кода аналогичной функции см . в разделе SQLColumns.
Связанные функции
Сведения | Раздел |
---|---|
Привязка буфера к столбцу в результирующем наборе | Функция SQLBindCol |
Отмена обработки инструкций | Функция SQLCancel |
Получение одной строки или блока данных в направлении только для пересылки. | Функция SQLFetch |
Получение блока данных или прокрутка результирующий набор | Функция SQLFetchScroll |
Возврат столбцов внешних ключей | Функция SQLForeignKeys |
Возврат столбцов первичного ключа | Функция SQLPrimaryKeys |