Функция SQLGetTypeInfo

Соответствия
Представлена версия: соответствие стандартам ODBC 1.0: ISO 92

Сводка
SQLGetTypeInfo возвращает сведения о типах данных, поддерживаемых источником данных. Драйвер возвращает сведения в виде результирующий набор SQL. Типы данных предназначены для использования в инструкциях языка определения данных (DDL).

Внимание

Приложения должны использовать имена типов, возвращаемые в столбце TYPE_NAME результирующий набор SQLGetTypeInfo в инструкциях ALTER TABLE и CREATE TABLE . SQLGetTypeInfo может возвращать несколько строк с одинаковым значением в столбце DATA_TYPE.

Синтаксис

  
SQLRETURN SQLGetTypeInfo(  
     SQLHSTMT      StatementHandle,  
     SQLSMALLINT   DataType);  

Аргументы

ОператорHandle
[Входные данные] Дескриптор инструкции для результирующий набор.

DataType
[Входные данные] Тип данных SQL. Это должно быть одно из значений в разделе "Типы данных SQL" приложения D: Типы данных или тип данных SQL для конкретного драйвера. SQL_ALL_TYPES указывает, что следует возвращать сведения обо всех типах данных.

Возвраты

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR или SQL_INVALID_HANDLE.

Диагностика

Когда SQLGetTypeInfo возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE можно получить путем вызова SQLGetDiagRec с помощью HandleType SQL_HANDLE_STMT и handle of StatementHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращаются SQLGetTypeInfo и объясняются каждый из них в контексте этой функции. Нотация "(DM)" предшествует описаниям SQLSTATEs, возвращаемым диспетчером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.

SQLSTATE Error Description
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
01S02 Изменено значение параметра Указанный атрибут инструкции был недопустим из-за условий работы реализации, поэтому аналогичное значение временно заменено. (Вызов SQLGetStmtAttr для определения временно замененного значения.) Значение замены допустимо для оператора StatementHandle , пока курсор не будет закрыт. Атрибуты инструкции, которые можно изменить: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT и SQL_ATTR_SIMULATE_CURSOR. (Функция возвращает 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 Ошибка выделения памяти Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции.
HY004 Недопустимый тип данных SQL Значение, указанное для аргумента DataType , не было допустимым идентификатором типа данных ODBC SQL, а также идентификатором типа данных для конкретного драйвера.
HY008 Операция отменена Асинхронная обработка была включена для ОператораHandle, после чего функция была вызвана и до завершения выполнения sqlCancel или SQLCancelHandle была вызвана на ОператорHandle. Затем функция снова была вызвана на ОператорHandle.

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

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

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

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos были вызваны для ОператораHandle и возвращены SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
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) Драйвер, соответствующий ОператорHandle , не поддерживает функцию.
IM017 Опрос отключен в асинхронном режиме уведомлений При использовании модели уведомлений опрос отключается.
IM018 SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции с этим дескриптором. Если предыдущий вызов функции дескриптора возвращает SQL_STILL_EXECUTING и если включен режим уведомлений, sqlCompleteAsync должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции.

Комментарии

SQLGetTypeInfo возвращает результаты в виде стандартного результирующий набор, упорядоченный по DATA_TYPE, а затем насколько тесно тип данных сопоставляется с соответствующим типом данных ODBC SQL. Типы данных, определенные источником данных, имеют приоритет над пользовательскими типами данных. Следовательно, порядок сортировки не обязательно согласован, но может быть обобщен как DATA_TYPE сначала, за которым следует TYPE_NAME, оба возрастающих. Например, предположим, что в источнике данных определены типы данных INTEGER и COUNTER, где функция COUNTER выполняет автоматическое увеличение, а также определяется определяемый пользователем тип данных WHOLENUM. Они будут возвращены в порядке INTEGER, WHOLENUM и COUNTER, так как WHOLENUM тесно сопоставляется с типом данных ODBC SQL SQL_INTEGER, а автоматически добавочный тип данных, несмотря на то, что поддерживается источником данных, не сопоставляется с типом данных ODBC SQL. Сведения об использовании этой информации см . в инструкциях DDL.

Если аргумент DataType указывает тип данных, допустимый для версии ODBC, поддерживаемой драйвером, но не поддерживается драйвером, он вернет пустой результирующий набор.

Заметка

Дополнительные сведения об общем использовании, аргументах и возвращаемых данных функций каталога ODBC см. в разделе "Функции каталога".

Следующие столбцы были переименованы для ODBC 3.x. Изменения имени столбца не влияют на обратную совместимость, так как приложения привязываются по номеру столбца.

Столбец ODBC 2.0 ODBC 3.Столбец x
PRECISION COLUMN_SIZE
MONEY FIXED_PREC_SCALE
AUTO_INCREMENT AUTO_UNIQUE_VALUE

Следующие столбцы были добавлены в набор результатов, возвращенный SQLGetTypeInfo для ODBC 3.x:

  • SQL_DATA_TYPE

  • INTERVAL_PRECISION

  • SQL_DATETIME_SUB

  • NUM_PREC_RADIX

В следующей таблице перечислены столбцы в результирующем наборе. Дополнительные столбцы за пределами столбца 19 (INTERVAL_PRECISION) можно определить драйвером. Приложение должно получить доступ к столбцам для конкретного драйвера, отсчитывая от конца результирующего набора, а не указывая явное порядковое положение. Дополнительные сведения см. в разделе "Данные, возвращаемые функциями каталога".

Заметка

SQLGetTypeInfo может не возвращать все типы данных. Например, драйвер может не возвращать определяемые пользователем типы данных. Приложения могут использовать любой допустимый тип данных независимо от того, возвращается ли он SQLGetTypeInfo. Типы данных, возвращаемые SQLGetTypeInfo , поддерживаются источником данных. Они предназначены для использования в инструкциях языка определения данных (DDL). Драйверы могут возвращать данные результирующих наборов, используя типы данных, отличные от типов, возвращаемых SQLGetTypeInfo. При создании результирующий набор для функции каталога драйвер может использовать тип данных, который не поддерживается источником данных.

Столбец Column

Номер
Тип данных Комментарии
TYPE_NAME (ODBC 2.0) 1 Varchar не NULL Имя типа данных, зависящей от источника данных; например, CHAR(), VARCHAR(), MONEY, LONG VARBINARY или CHAR () ДЛЯ БИТОВЫХ ДАННЫХ. Приложения должны использовать это имя в инструкциях CREATE TABLE и ALTER TABLE .
DATA_TYPE (ODBC 2.0) 2 Smallint, не NULL Тип данных SQL. Это может быть тип данных ODBC SQL или тип данных SQL для конкретного драйвера. Для типов данных datetime или интервала этот столбец возвращает краткий тип данных (например, SQL_TYPE_TIME или SQL_INTERVAL_YEAR_TO_MONTH). Список допустимых типов данных ODBC SQL см . в разделе "Типы данных SQL" в приложении D: Типы данных. Сведения о типах данных SQL для конкретного драйвера см. в документации по драйверу.
COLUMN_SIZE (ODBC 2.0) 3 Целое Максимальный размер столбца, поддерживаемый сервером для этого типа данных. Для числовых данных это максимальная точность. Для строковых данных это длина символов. Для типов данных datetime это длина символов строкового представления (при условии максимально допустимой точности компонента дробных секунд). Значение NULL возвращается для типов данных, в которых размер столбца неприменимо. Для типов данных интервала это число символов в символьном представлении литерала интервала (как определено начальной точностью интервала; см . раздел "Длина типа данных интервала" в приложении D: Типы данных).

Дополнительные сведения о размере столбца см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных.
LITERAL_PREFIX (ODBC 2.0) 4 Varchar Символы или символы, используемые для префикса литерала; например, одна кавычка (') для типов символьных данных или 0x для двоичных типов данных; Значение NULL возвращается для типов данных, в которых не применяется префикс литерала.
LITERAL_SUFFIX (ODBC 2.0) 5 Varchar Символы или символы, используемые для завершения литерала; например, одна кавычка (') для типов символьных данных; Значение NULL возвращается для типов данных, в которых литеральный суффикс неприменимо.
CREATE_PARAMS (ODBC 2.0) 6 Varchar Список ключевых слов, разделенных запятыми, соответствующий каждому параметру, который приложение может указывать в скобках при использовании имени, возвращаемого в поле TYPE_NAME. Ключевые слова в списке могут быть следующими: длина, точность или масштабирование. Они отображаются в том порядке, в который требуется использовать синтаксис. Например, CREATE_PARAMS для DECIMAL будет иметь значение "точность,масштабирование"; CREATE_PARAMS для VARCHAR будет равно "длине". Значение NULL возвращается, если для определения типа данных отсутствуют параметры; Например, INTEGER.

Драйвер предоставляет CREATE_PARAMS текст на языке страны или региона, где он используется.
NULLABLE (ODBC 2.0) 7 Smallint, не NULL Принимает ли тип данных значение NULL:

SQL_NO_NULLS, если тип данных не принимает значения NULL.

SQL_NULLABLE, если тип данных принимает значения NULL.

SQL_NULLABLE_UNKNOWN, если столбец не принимает значения NULL.
CASE_SENSITIVE (ODBC 2.0) 8 Smallint, не NULL Учитывается ли тип данных символов в параметрах сортировки и сравнениях:

SQL_TRUE, если тип данных является символьным типом данных и учитывает регистр.

SQL_FALSE, если тип данных не является символьным типом данных или не учитывает регистр.
SEARCHABLE (ODBC 2.0) 9 Smallint, не NULL Как тип данных используется в предложении WHERE :

SQL_PRED_NONE, если столбец не может использоваться в предложении WHERE . (Это то же самое, что и значение SQL_UNSEARCHABLE в ODBC 2.x.)

SQL_PRED_CHAR, если столбец можно использовать в предложении WHERE , но только с предикатом LIKE . (Это то же самое, что и значение SQL_LIKE_ONLY в ODBC 2.x.)

SQL_PRED_BASIC, если столбец можно использовать в предложении WHERE со всеми операторами сравнения, кроме LIKE (сравнение, квантифицированное сравнение, МЕЖДУ, DISTINCT, IN, MATCH и UNIQUE). (Это то же самое, что и значение SQL_ALL_EXCEPT_LIKE в ODBC 2.x.)

SQL_SEARCHABLE, если столбец можно использовать в предложении WHERE с любым оператором сравнения.
UNSIGNED_ATTRIBUTE (ODBC 2.0) 10 Smallint Указывает, является ли тип данных неподписанным:

SQL_TRUE, если тип данных не указан.

SQL_FALSE, если тип данных подписан.

Значение NULL возвращается, если атрибут не применим к типу данных или типу данных не является числовым.
FIXED_PREC_SCALE (ODBC 2.0) 11 Smallint, не NULL Имеет ли тип данных предопределенную фиксированную точность и масштаб (которые относятся к источнику данных), например тип данных денег:

SQL_TRUE, если она имеет предопределенную фиксированную точность и масштаб.

SQL_FALSE, если она не имеет предопределенной фиксированной точности и масштабирования.
AUTO_UNIQUE_VALUE (ODBC 2.0) 12 Smallint Указывает, является ли тип данных автоматически увеличиваться:

SQL_TRUE, если тип данных автоматически увеличивается.

SQL_FALSE, если тип данных не увеличивается автоматически.

Значение NULL возвращается, если атрибут не применим к типу данных или типу данных не является числовым.

Приложение может вставлять значения в столбец с этим атрибутом, но обычно не может обновлять значения в столбце.

При вставке в столбец автоматического увеличения вставляется уникальное значение в столбец во время вставки. Приращение не определено, но зависит от источника данных. Приложение не должно предполагать, что столбец автоматического увеличения начинается в любой точке или увеличивается по любому конкретному значению.
LOCAL_TYPE_NAME (ODBC 2.0) 13 Varchar Локализованная версия имени типа данных, которое зависит от источника данных. Если локализованное имя не поддерживается источником данных, возвращается значение NULL. Это имя предназначено только для отображения, например в диалоговых окнах.
MINIMUM_SCALE (ODBC 2.0) 14 Smallint Минимальный масштаб типа данных в источнике данных. Если тип данных имеет фиксированный масштаб, это значение содержится и в столбце MINIMUM_SCALE, и в столбце MAXIMUM_SCALE. Например, столбец SQL_TYPE_TIMESTAMP может иметь фиксированный масштаб для дробных секунд. Для типов данных, к которым понятие масштаба не применимо, возвращается значение NULL. Дополнительные сведения см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных.
MAXIMUM_SCALE (ODBC 2.0) 15 Smallint Максимальный масштаб типа данных в источнике данных. Для типов данных, к которым понятие масштаба не применимо, возвращается значение NULL. Если максимальный масштаб не определен отдельно в источнике данных, но вместо этого определяется как максимальная точность, этот столбец содержит то же значение, что и столбец COLUMN_SIZE. Дополнительные сведения см. в разделе "Размер столбца", "Десятичные цифры", " Длина октета" и "Размер отображения" в приложении D: Типы данных.
SQL_DATA_TYPE (ODBC 3.0) 16 Smallint NOT NULL Значение типа данных SQL, как оно отображается в поле SQL_DESC_TYPE дескриптора. Этот столбец совпадает с столбцом DATA_TYPE, за исключением типов данных интервала и даты и времени.

Для типов данных интервала и datetime поле SQL_DATA_TYPE в результирующем наборе возвращает SQL_INTERVAL или SQL_DATETIME, а поле SQL_DATETIME_SUB возвращает подкод для определенного интервала или типа данных datetime. (См. раздел Приложение D. Типы данных.)
SQL_DATETIME_SUB (ODBC 3.0) 17 Smallint Если значение SQL_DATA_TYPE SQL_DATETIME или SQL_INTERVAL, этот столбец содержит вложенный код datetime/interval. Для типов данных, отличных от даты и интервала, это поле равно NULL.

Для типов данных интервала или даты и времени поле SQL_DATA_TYPE в результирующем наборе возвращает SQL_INTERVAL или SQL_DATETIME, а поле SQL_DATETIME_SUB возвращает подкод для определенного интервала или типа данных datetime. (См. раздел Приложение D. Типы данных.)
NUM_PREC_RADIX (ODBC 3.0) 18 Целое Если тип данных является приблизительным числовым типом, этот столбец содержит значение 2, указывающее, что COLUMN_SIZE указывает количество битов. Для точных числовых типов этот столбец содержит значение 10, указывающее, что COLUMN_SIZE задает число десятичных цифр. В противном случае этот столбец содержит значение NULL.
INTERVAL_PRECISION (ODBC 3.0) 19 Smallint Если тип данных является типом данных интервала, этот столбец содержит значение начальной точности интервала. (См. раздел Точность типа данных интервала в приложении D: Типы данных.) В противном случае этот столбец имеет значение NULL.

Сведения о атрибутах могут применяться к типам данных или определенным столбцам в результирующем наборе. SQLGetTypeInfo возвращает сведения об атрибутах, связанных с типами данных; SQLColAttribute возвращает сведения о атрибутах, связанных с столбцами в результирующем наборе.

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

См. также

Справочник по API ODBC
Файлы заголовков ODBC