Compartir a través de


Función SQLGetTypeInfo

Conformidad
Versión introducida: Cumplimiento de estándares ODBC 1.0: ISO 92

Resumen
SQLGetTypeInfo devuelve información sobre los tipos de datos admitidos por el origen de datos. El controlador devuelve la información en forma de conjunto de resultados de SQL. Los tipos de datos están diseñados para su uso en instrucciones DDL (Lenguaje de definición de datos).

Importante

Las aplicaciones deben usar los nombres de tipo devueltos en la columna TYPE_NAME del conjunto de resultados SQLGetTypeInfo en las instrucciones ALTER TABLE y CREATE TABLE . SQLGetTypeInfo puede devolver más de una fila con el mismo valor en la columna DATA_TYPE.

Sintaxis

  
SQLRETURN SQLGetTypeInfo(  
     SQLHSTMT      StatementHandle,  
     SQLSMALLINT   DataType);  

Argumentos

StatementHandle
[Entrada] Identificador de instrucción para el conjunto de resultados.

DataType
[Entrada] Tipo de datos SQL. Debe ser uno de los valores de la sección Tipos de datos SQL del Apéndice D: Tipos de datos o un tipo de datos SQL específico del controlador. SQL_ALL_TYPES especifica que se debe devolver información sobre todos los tipos de datos.

Devoluciones

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnóstico

Cuando SQLGetTypeInfo devuelve SQL_ERROR o SQL_SUCCESS_WITH_INFO, se puede obtener un valor SQLSTATE asociado llamando a SQLGetDiagRec con un HandleType de SQL_HANDLE_STMT y un identificador de StatementHandle. En la tabla siguiente se enumeran los valores SQLSTATE devueltos normalmente por SQLGetTypeInfo y se explica cada uno en el contexto de esta función; la notación "(DM)" precede a las descripciones de SQLSTATEs devueltas por el Administrador de controladores. El código de retorno asociado a cada valor SQLSTATE es SQL_ERROR, a menos que se indique lo contrario.

SQLSTATE Error Descripción
01000 Advertencia general Mensaje informativo específico del controlador. (Function devuelve SQL_SUCCESS_WITH_INFO).
01S02 Valor de opción cambiado Un atributo de instrucción especificado no era válido debido a las condiciones de trabajo de implementación, por lo que se sustituyó temporalmente un valor similar. (Llame a SQLGetStmtAttr para determinar el valor sustituido temporalmente). El valor de sustituto es válido para StatementHandle hasta que se cierra el cursor. Los atributos de instrucción que se pueden cambiar son: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT y SQL_ATTR_SIMULATE_CURSOR. (Function devuelve SQL_SUCCESS_WITH_INFO).
08S01 Error de vínculo de comunicación Se produjo un error en el vínculo de comunicación entre el controlador y el origen de datos al que se conectó el controlador antes de que la función completara el procesamiento.
24000 Estado de cursor no válido Se ha abierto un cursor en StatementHandle y se ha llamado a SQLFetch o SQLFetchScroll . El Administrador de controladores devuelve este error si SQLFetch o SQLFetchScroll no ha devuelto SQL_NO_DATA y el controlador devuelve si SQLFetch o SQLFetchScroll ha devuelto SQL_NO_DATA.

Se ha abierto un conjunto de resultados en StatementHandle, pero no se ha llamado a SQLFetch o SQLFetchScroll .
40001 Error de serialización La transacción se revierte debido a un interbloqueo de recursos con otra transacción.
40003 Finalización de instrucciones desconocida No se pudo determinar la conexión asociada durante la ejecución de esta función y el estado de la transacción.
HY000 Error general Se produjo un error para el que no había ningún SQLSTATE específico y para el que no se definió SQLSTATE específico de la implementación. El mensaje de error devuelto por SQLGetDiagRec en el búfer *MessageText describe el error y su causa.
HY001 Error de asignación de memoria El controlador no pudo asignar memoria necesaria para admitir la ejecución o finalización de la función.
HY004 Tipo de datos SQL no válido El valor especificado para el argumento DataType no era un identificador de tipo de datos ODBC SQL válido ni un identificador de tipo de datos específico del controlador admitido por el controlador.
HY008 Operación cancelada Se habilitó el procesamiento asincrónico para StatementHandle, a continuación, se llamó a la función y, antes de completar la ejecución, se llamó a SQLCancel o SQLCancelHandle en statementHandle. A continuación, se llamó a la función de nuevo en StatementHandle.

Se llamó a la función y, antes de completar la ejecución, se llamó a SQLCancel o SQLCancelHandle desde un subproceso diferente en una aplicación multiproceso.
HY010 Error de secuencia de función (DM) Se llamó a una función de ejecución asincrónica para el identificador de conexión asociado a StatementHandle. Esta función asincrónica todavía se estaba ejecutando cuando se llamó a la función SQLGetTypeInfo .

(DM) SQLExecute, SQLExecDirect o SQLMoreResults se llamó a para statementHandle y devolvió SQL_PARAM_DATA_AVAILABLE. Se llamó a esta función antes de recuperar los datos para todos los parámetros transmitidos.

(DM) Se llamó a una función de ejecución asincrónica (no esta) para StatementHandle y todavía se estaba ejecutando cuando se llamó a esta función.

(DM) se llamó a SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos para statementHandle y devolvió SQL_NEED_DATA. Se llamó a esta función antes de enviar datos para todos los parámetros o columnas de datos en ejecución.
HY013 Error de administración de memoria No se pudo procesar la llamada de función porque no se pudo tener acceso a los objetos de memoria subyacentes, posiblemente debido a condiciones de memoria baja.
HY117 La conexión se suspende debido al estado de transacción desconocido. Solo se permiten funciones de desconexión y de solo lectura. (DM) Para obtener más información sobre el estado suspendido, vea Función SQLEndTran.
HYC00 Característica opcional no implementada La combinación de la configuración actual de los atributos de instrucción SQL_ATTR_CONCURRENCY y SQL_ATTR_CURSOR_TYPE no era compatible con el controlador o el origen de datos.

El atributo de instrucción SQL_ATTR_USE_BOOKMARKS se estableció en SQL_UB_VARIABLE y el atributo de instrucción SQL_ATTR_CURSOR_TYPE se estableció en un tipo de cursor para el que el controlador no admite marcadores.
HYT00 Tiempo de espera agotado El período de tiempo de espera de la consulta expiró antes de que el origen de datos devolva el conjunto de resultados. El período de tiempo de espera se establece a través de SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Se ha agotado el tiempo de espera de la conexión. El período de tiempo de espera de conexión expiró antes de que el origen de datos responda a la solicitud. El período de tiempo de espera de conexión se establece a través de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 El controlador no admite esta función (DM) El controlador correspondiente a StatementHandle no admite la función .
IM017 El sondeo está deshabilitado en modo de notificación asincrónica Cada vez que se usa el modelo de notificación, el sondeo está deshabilitado.
IM018 No se ha llamado a SQLCompleteAsync para completar la operación asincrónica anterior en este identificador. Si la llamada de función anterior en el identificador devuelve SQL_STILL_EXECUTING y si el modo de notificación está habilitado, se debe llamar a SQLCompleteAsync en el identificador para realizar el procesamiento posterior y completar la operación.

Comentarios

SQLGetTypeInfo devuelve los resultados como un conjunto de resultados estándar, ordenado por DATA_TYPE y, a continuación, por la estrecha relación entre los tipos de datos se asignan al tipo de datos SQL ODBC correspondiente. Los tipos de datos definidos por el origen de datos tienen prioridad sobre los tipos de datos definidos por el usuario. Por lo tanto, el criterio de ordenación no es necesariamente coherente, pero se puede generalizar como DATA_TYPE primero, seguido de TYPE_NAME, ambos ascendentes. Por ejemplo, supongamos que un origen de datos define los tipos de datos INTEGER y COUNTER, donde COUNTER es incremento automático y que también se ha definido un tipo de datos definido por el usuario WHOLENUM. Estos se devolverían en el orden INTEGER, WHOLENUM y COUNTER, porque WHOLENUM se asigna estrechamente al tipo de datos SQL ODBC SQL_INTEGER, mientras que el tipo de datos de incremento automático, aunque sea compatible con el origen de datos, no se asigna estrechamente a un tipo de datos ODBC SQL. Para obtener información sobre cómo se puede usar esta información, vea Instrucciones DDL.

Si el argumento DataType especifica un tipo de datos que es válido para la versión de ODBC compatible con el controlador, pero no es compatible con el controlador, devolverá un conjunto de resultados vacío.

Nota

Para obtener más información sobre el uso general, los argumentos y los datos devueltos de las funciones de catálogo ODBC, vea Funciones de catálogo.

Se ha cambiado el nombre de las columnas siguientes para ODBC 3. x. Los cambios en el nombre de columna no afectan a la compatibilidad con versiones anteriores porque las aplicaciones se enlazan por número de columna.

Columna ODBC 2.0 ODBC 3. columna x
PRECISION COLUMN_SIZE
MONEY FIXED_PREC_SCALE
AUTO_INCREMENT AUTO_UNIQUE_VALUE

Las columnas siguientes se han agregado al conjunto de resultados devuelto por SQLGetTypeInfo para ODBC 3. x:

  • SQL_DATA_TYPE

  • INTERVAL_PRECISION

  • SQL_DATETIME_SUB

  • NUM_PREC_RADIX

En la tabla siguiente se enumeran las columnas del conjunto de resultados. El controlador puede definir columnas adicionales más allá de la columna 19 (INTERVAL_PRECISION). Una aplicación debe obtener acceso a columnas específicas del controlador contando desde el final del conjunto de resultados en lugar de especificar una posición ordinal explícita. Para obtener más información, vea Datos devueltos por funciones de catálogo.

Nota

Es posible que SQLGetTypeInfo no devuelva todos los tipos de datos. Por ejemplo, un controlador podría no devolver tipos de datos definidos por el usuario. Las aplicaciones pueden usar cualquier tipo de datos válido, independientemente de si SQLGetTypeInfo lo devuelve. Los tipos de datos devueltos por SQLGetTypeInfo son los admitidos por el origen de datos. Están diseñados para su uso en instrucciones DDL (Lenguaje de definición de datos). Los controladores pueden devolver datos del conjunto de resultados mediante tipos de datos distintos de los tipos devueltos por SQLGetTypeInfo. Al crear el conjunto de resultados para una función de catálogo, el controlador puede usar un tipo de datos que no sea compatible con el origen de datos.

Nombre de la columna Columna

number
Tipo de datos Comentarios
TYPE_NAME (ODBC 2.0) 1 Varchar no NULL Nombre del tipo de datos dependiente del origen de datos; por ejemplo, "CHAR()", "VARCHAR()", "MONEY", "LONG VARBINARY" o "CHAR ( ) FOR BIT DATA". Las aplicaciones deben usar este nombre en las instrucciones CREATE TABLE y ALTER TABLE .
DATA_TYPE (ODBC 2.0) 2 Smallint no NULL Tipo de datos SQL. Puede ser un tipo de datos SQL ODBC o un tipo de datos SQL específico del controlador. Para los tipos de datos datetime o interval, esta columna devuelve el tipo de datos conciso (como SQL_TYPE_TIME o SQL_INTERVAL_YEAR_TO_MONTH). Para obtener una lista de los tipos de datos DE SQL ODBC válidos, vea Tipos de datos SQL en el Apéndice D: Tipos de datos. Para información sobre los tipos de datos SQL específicos del controlador, consulte la documentación del controlador.
COLUMN_SIZE (ODBC 2.0) 3 Entero Tamaño máximo de columna que admite el servidor para este tipo de datos. Para los datos numéricos, esta es la precisión máxima. Para los datos de cadena, esta es la longitud en caracteres. Para los tipos de datos datetime, esta es la longitud en caracteres de la representación de cadena (suponiendo la precisión máxima permitida del componente fracciones de segundos). Se devuelve NULL para los tipos de datos en los que el tamaño de columna no es aplicable. En el caso de los tipos de datos de intervalo, este es el número de caracteres de la representación de caracteres del literal de intervalo (según lo definido por la precisión inicial del intervalo; vea Longitud del tipo de datos de intervalo en el Apéndice D: Tipos de datos).

Para obtener más información sobre el tamaño de columna, vea Tamaño de columna , Dígitos decimales, Longitud del octeto de transferencia y Tamaño de presentación en el Apéndice D: Tipos de datos.
LITERAL_PREFIX (ODBC 2.0) 4 Varchar Carácter o caracteres usados para prefijar un literal; por ejemplo, una comilla simple (') para los tipos de datos de caracteres o 0x para los tipos de datos binarios; Null se devuelve para los tipos de datos en los que no se aplica un prefijo literal.
LITERAL_SUFFIX (ODBC 2.0) 5 Varchar Carácter o caracteres usados para finalizar un literal; por ejemplo, una comilla simple (') para los tipos de datos de caracteres; Se devuelve NULL para los tipos de datos en los que no se aplica un sufijo literal.
CREATE_PARAMS (ODBC 2.0) 6 Varchar Lista de palabras clave, separadas por comas, correspondientes a cada parámetro que la aplicación puede especificar entre paréntesis al usar el nombre que se devuelve en el campo TYPE_NAME. Las palabras clave de la lista pueden ser cualquiera de las siguientes: longitud, precisión o escala. Aparecen en el orden en que la sintaxis requiere que se usen. Por ejemplo, CREATE_PARAMS para DECIMAL sería "precisión, escala"; CREATE_PARAMS para VARCHAR sería igual a "length". Se devuelve NULL si no hay parámetros para la definición del tipo de datos; por ejemplo, INTEGER.

El controlador proporciona el CREATE_PARAMS texto en el idioma del país o región donde se usa.
NULLABLE (ODBC 2.0) 7 Smallint no NULL Si el tipo de datos acepta un valor NULL:

SQL_NO_NULLS si el tipo de datos no acepta valores NULL.

SQL_NULLABLE si el tipo de datos acepta valores NULL.

SQL_NULLABLE_UNKNOWN si no se sabe si la columna acepta valores NULL.
CASE_SENSITIVE (ODBC 2.0) 8 Smallint no NULL Si un tipo de datos de caracteres distingue mayúsculas de minúsculas en intercalaciones y comparaciones:

SQL_TRUE si el tipo de datos es un tipo de datos de caracteres y distingue mayúsculas de minúsculas.

SQL_FALSE si el tipo de datos no es un tipo de datos de caracteres o no distingue mayúsculas de minúsculas.
SEARCHABLE (ODBC 2.0) 9 Smallint no NULL Cómo se usa el tipo de datos en una cláusula WHERE :

SQL_PRED_NONE si la columna no se puede usar en una cláusula WHERE . (Este es el mismo que el valor de SQL_UNSEARCHABLE en ODBC 2. x.)

SQL_PRED_CHAR si la columna se puede usar en una cláusula WHERE , pero solo con el predicado LIKE . (Este es el mismo que el valor de SQL_LIKE_ONLY en ODBC 2. x.)

SQL_PRED_BASIC si la columna se puede usar en una cláusula WHERE con todos los operadores de comparación excepto LIKE (comparación, comparación cuantificada, BETWEEN, DISTINCT, IN, MATCH y UNIQUE). (Este es el mismo que el valor de SQL_ALL_EXCEPT_LIKE en ODBC 2. x.)

SQL_SEARCHABLE si la columna se puede usar en una cláusula WHERE con cualquier operador de comparación.
UNSIGNED_ATTRIBUTE (ODBC 2.0) 10 Smallint Si el tipo de datos no tiene signo:

SQL_TRUE si el tipo de datos no está firmado.

SQL_FALSE si el tipo de datos está firmado.

Se devuelve NULL si el atributo no es aplicable al tipo de datos o el tipo de datos no es numérico.
FIXED_PREC_SCALE (ODBC 2.0) 11 Smallint no NULL Si el tipo de datos tiene precisión y escala fija predefinidas (que son específicas del origen de datos), como un tipo de datos money:

SQL_TRUE si tiene precisión y escala fija predefinidas.

SQL_FALSE si no tiene precisión y escala fija predefinidas.
AUTO_UNIQUE_VALUE (ODBC 2.0) 12 Smallint Si el tipo de datos es la creación automática:

SQL_TRUE si el tipo de datos es la creación automática.

SQL_FALSE si el tipo de datos no es la creación automática.

Se devuelve NULL si el atributo no es aplicable al tipo de datos o el tipo de datos no es numérico.

Una aplicación puede insertar valores en una columna que tenga este atributo, pero normalmente no puede actualizar los valores de la columna.

Cuando se realiza una inserción en una columna de incremento automático, se inserta un valor único en la columna en tiempo de inserción. El incremento no está definido, pero es específico del origen de datos. Una aplicación no debe suponer que una columna de incremento automático se inicia en cualquier punto o incremento determinado por cualquier valor determinado.
LOCAL_TYPE_NAME (ODBC 2.0) 13 Varchar Versión traducida del nombre del tipo de datos, dependiente del origen de datos. Se devuelve NULL si el origen de datos no admite un nombre traducido. Este nombre está pensado solo para mostrarse, como en cuadros de diálogo.
MINIMUM_SCALE (ODBC 2.0) 14 Smallint Escala mínima del tipo de datos en el origen de datos. Si un tipo de datos tiene una escala fija, las columnas MINIMUM_SCALE y MAXIMUM_SCALE contienen este valor. Por ejemplo, una columna de SQL_TYPE_TIMESTAMP podría tener una escala fija durante fracciones de segundos. Se devuelve NULL cuando no se puede aplicar la escala. Para obtener más información, vea Tamaño de columna, Dígitos decimales, Longitud del octeto de transferencia y Tamaño de presentación en el Apéndice D: Tipos de datos.
MAXIMUM_SCALE (ODBC 2.0) 15 Smallint Escala máxima del tipo de datos en el origen de datos. Se devuelve NULL cuando no se puede aplicar la escala. Si la escala máxima no se define por separado en el origen de datos, sino que se define para que sea igual que la precisión máxima, esta columna contiene el mismo valor que la columna COLUMN_SIZE. Para obtener más información, vea Tamaño de columna, Dígitos decimales, Longitud del octeto de transferencia y Tamaño de presentación en el Apéndice D: Tipos de datos.
SQL_DATA_TYPE (ODBC 3.0) 16 Smallint NOT NULL Valor del tipo de datos SQL tal y como aparece en el campo SQL_DESC_TYPE del descriptor. Esta columna es la misma que la columna DATA_TYPE, excepto para los tipos de datos interval y datetime.

En el caso de los tipos de datos interval y datetime, el campo SQL_DATA_TYPE del conjunto de resultados devolverá SQL_INTERVAL o SQL_DATETIME, y el campo SQL_DATETIME_SUB devolverá el subcódigo para el tipo de datos datetime o intervalo específico. (Consulte el Apéndice D: Tipos de datos).
SQL_DATETIME_SUB (ODBC 3.0) 17 Smallint Cuando el valor de SQL_DATA_TYPE es SQL_DATETIME o SQL_INTERVAL, esta columna contiene el subcódigo datetime/interval. Para los tipos de datos distintos de datetime e interval, este campo es NULL.

Para los tipos de datos interval o datetime, el campo SQL_DATA_TYPE del conjunto de resultados devolverá SQL_INTERVAL o SQL_DATETIME, y el campo SQL_DATETIME_SUB devolverá el subcódigo para el tipo de datos datetime o intervalo específico. (Consulte el Apéndice D: Tipos de datos).
NUM_PREC_RADIX (ODBC 3.0) 18 Entero Si el tipo de datos es un tipo numérico aproximado, esta columna contiene el valor 2 para indicar que COLUMN_SIZE especifica un número de bits. Para los tipos numéricos exactos, esta columna contiene el valor 10 para indicar que COLUMN_SIZE especifica un número de dígitos decimales. De lo contrario, esta columna es NULL.
INTERVAL_PRECISION (ODBC 3.0) 19 Smallint Si el tipo de datos es un tipo de datos interval, esta columna contiene el valor de la precisión inicial del intervalo. (Vea Precisión del tipo de datos interval en el Apéndice D: Tipos de datos). De lo contrario, esta columna es NULL.

La información de atributo se puede aplicar a tipos de datos o a columnas específicas de un conjunto de resultados. SQLGetTypeInfo devuelve información sobre los atributos asociados a los tipos de datos; SQLColAttribute devuelve información sobre los atributos asociados a las columnas de un conjunto de resultados.

Para información acerca de Vea
Enlace de un búfer a una columna de un conjunto de resultados SQLBindCol (función)
Cancelación del procesamiento de instrucciones Función SQLCancel
Devolver información sobre una columna en un conjunto de resultados Función SQLColAttribute
Capturar un bloque de datos o desplazarse por un conjunto de resultados Función SQLFetchScroll
Capturar una sola fila o un bloque de datos en una dirección de solo avance Función SQLFetch
Devolver información sobre un controlador o un origen de datos Función SQLGetInfo

Consulte también

Referencia de API ODBC
Archivos de encabezado de ODBC