Функция 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 | Ошибка | Описание |
---|---|---|
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 number |
Тип данных | Комментарии |
---|---|---|---|
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 |