Especificación: | CLI de DB2 1.1 | ODBC 1.0 | ISO CLI |
SQLDescribeCol() devuelve un conjunto de información descriptiva de uso habitual (nombre, tipo, precisión, escala, posibilidad de contener nulos) referente a la columna indicada del conjunto resultante generado por una consulta.
Se debe invocar SQLPrepare() o SQLExecDirect() antes de invocar esta función.
Generalmente esta función se invoca antes de una función de enlace de columna (SQLBindCol()) para determinar los atributos de una columna antes de enlazarla a una variable de aplicación.
Sintaxis
SQLRETURN SQLDescribeCol ( SQLHSTMT StatementHandle, /* hstmt */ SQLUSMALLINT ColumnNumber, /* icol */ SQLCHAR *FAR ColumnName, /* szColName */ SQLSMALLINT BufferLength, /* cbColNameMax */ SQLSMALLINT *FAR NameLengthPtr, /* pcbColName */ SQLSMALLINT *FAR DataTypePtr, /* pfSqlType */ SQLUINTEGER *FAR ColumnSizePtr, /* pcbColDef */ SQLSMALLINT *FAR DecimalDigitsPtr, /* pibScale */ SQLSMALLINT *FAR NullablePtr); /* pfNullable */
Argumentos de la función
Tabla 38. Argumentos de SQLDescribeCol
Tipo de datos | Argumento | Uso | Descripción |
---|---|---|---|
SQLHSTMT | StatementHandle | entrada | Descriptor de contexto de sentencia. |
SQLUSMALLINT | ColumnNumber | entrada | Número de la columna que se debe describir. Las columnas están numeradas secuencialmente, de izquierda a derecha, comenzando en 1. |
SQLCHAR * | ColumnName | salida | Puntero que apunta a un almacenamiento intermedio de nombres de columna. Este puntero se establece en NULL si no se puede determinar el nombre de la columna. |
SQLSMALLINT | BufferLength | entrada | Tamaño del almacenamiento intermedio de ColumnName. |
SQLSMALLINT * | NameLengthPtr | salida | Bytes disponibles para devolver para el argumento ColumnName. El nombre de columna (ColumnName) se trunca a BufferLength - 1 bytes si NameLengthPtr es mayor o igual que BufferLength. |
SQLSMALLINT * | DataTypePtr | salida | Tipo básico de datos SQL de la columna. |
SQLUINTEGER * | ColumnSizePtr | salida | Precisión de la columna tal como está definida en la base de datos. |
SQLSMALLINT * | DecimalDigitsPtr | salida | Escala de la columna tal como está definida en la base de datos (sólo es aplicable a SQL_DECIMAL). |
SQLSMALLINT * | NullablePtr | salida | Indica si la columna puede contener nulos. Cualquiera:
|
Uso
Las columnas se identifican mediante un número, que se asigna secuencialmente de izquierda a derecha, y se pueden describir en cualquier orden. Los números de columna comienzan en el 1.
Si se especifica un puntero nulo para cualquiera de los argumentos de puntero, CLI de DB2 considera que la información no es necesaria para la aplicación y no se devuelve nada.
Códigos de retorno
Diagnósticos
Si SQLDescribeCol() devuelve SQL_ERROR o
SQL_SUCCESS_WITH_INFO, se puede obtener uno de los SQLSTATE
siguientes al invocar la función SQLError().
Tabla 39. SQLSTATE de SQLDescribeCol
SQLSTATE | Descripción | Explicación |
---|---|---|
01004 | Datos truncados. | El nombre de columna devuelto en el argumento ColumnName es más largo que el valor especificado en el argumento BufferLength. El argumento NameLengthPtr contiene la longitud del nombre de columna completo. (La función devuelve SQL_SUCCESS_WITH_INFO.) |
07005 | La sentencia no devolvió un conjunto resultante. | La sentencia asociada al descriptor de sentencia (StatementHandle) no devolvió un conjunto resultante. No había ninguna columna para describir. (Invoque primero SQLNumResultCols() para determinar si hay alguna fila en el conjunto resultante.) |
07009 | Índice descriptor no válido. | El valor especificado para ColumnNumber es menor o igual que 0. El valor especificado para el argumento ColumnNumber es mayor que el número de columnas del conjunto resultante. |
40003 08S01 | Error en el enlace de comunicaciones. | El enlace de comunicaciones entre la aplicación y la fuente de datos se interrumpió antes de finalizar la función. |
58004 | Error inesperado del sistema. | Error no recuperable del sistema. |
HY001 | Error de asignación de memoria. | CLI de DB2 no puede asignar la memoria necesaria para ejecutar o finalizar la función. |
HY002 | Número de columna no válido. | El valor especificado para el argumento ColumnNumber es menor que 1 o el valor especificado para el argumento ColumnNumber es mayor que el número de columnas del conjunto resultante. |
HY090 | Longitud no válida de la serie de caracteres o del almacenamiento intermedio. | La longitud especificada en el argumento BufferLength es menor que 1. |
HY010 | Error de secuencia de función. | Se llama a la función antes de llamar a SQLPrepare() o SQLExecDirect() para el descriptor de sentencia (StatementHandle). |
HY013 | Error inesperado de gestión de la memoria. | CLI de DB2 no puede acceder a la memoria necesaria para ejecutar o finalizar la función. |
HYC00 | Controlador no apropiado. | CLI de DB2 no reconoce el tipo de datos SQL de la columna ColumnNumber. |
Restricciones
DB2 Everyplace sólo da soporte a los siguientes tipos de datos definidos por ODBC:
Consulta relacionada