Compartir a través de


Conversión de datos mediante el proveedor ODBC para DB2

El diseño de las API odbc es similar a otras API de ISAM. Las API se basan en el identificador. Después de abrir un archivo, la aplicación puede determinar el tamaño del búfer necesario para almacenar una fila, usar las API de cursores para mover y, además, recuperar una o más filas de datos mediante el enlace de nivel de fila.

Los datos se convierten en tipos de datos SQL predeterminados, tal como se define en ODBC. En la tabla siguiente se enumeran estas conversiones.

Tipo de datos DB2 Tipo de datos SQL predeterminado Expuesto como tipo nativo en SQLGetTypeInfo Comentarios
BIGINT Un entero de 8 bytes.

Este tipo de dato es compatible con DB2 UDB únicamente.
BLOB Un objeto binario grande (BLOB) es una cadena de longitud variable que puede tener hasta 2 GB de longitud. Su finalidad principal es almacenar datos binarios.

El controlador ODBC para DB2 no admite este tipo de datos.
CHAR (BIT) SQL_BINARY No Cadena de caracteres de longitud fija (solo de doble byte).
CHAR (SBCS) SQL_CHAR Una cadena de caracteres SBCS de longitud fija.
CHAR (MIXED) SQL_CHAR No Cadena de caracteres mixto de longitud fija (single y double byte).
CLOB Un objeto grande de caracteres (CLOB) es una cadena de longitud variable que puede tener hasta 2 GB de longitud. El CLOB se usa para almacenar datos de juegos de caracteres grandes de un byte. El CLOB se considera una cadena de caracteres.

El controlador ODBC para DB2 no admite este tipo de datos.
DATE SQL_TYPE_DATE Una cadena de fecha de 10 bytes.

Este tipo de datos se convierte en un SQL_DATE para su uso por ODBC.
DBCLOB Un objeto grande de Double-Byte carácter (DBCLOB) es una cadena de longitud variable de caracteres de doble byte que puede tener hasta 2 gigabytes de longitud (1.073.741.823 caracteres de doble byte). DbCLOB se usa para almacenar datos grandes de juego de caracteres de doble byte. Un DBCLOB se considera una cadena gráfica.

No es compatible con ODBC Driver for DB2.
DECIMAL SQL_DECIMAL Un número decimal agrupado.
DOUBLE SQL_DOUBLE Un número de punto flotante de doble precisión de 8 bytes.
FLOAT SQL_FLOAT Un número de punto flotante de doble precisión de 8 bytes. Este tipo de dato es el mismo que DOUBLE.
GRAPHIC (DBCS) SQL_CHAR No Cadena gráfica de longitud fija que consta de una secuencia de datos de cadena de caracteres de doble byte (solo DBCS).
INTEGER SQL_INTEGER Entero de 4 bytes con una precisión de 10 dígitos que van desde -2.147.463.648 hasta +2.147.483.647.
LONG VARCHAR (BIT) SQL_BINARY No Cadena de caracteres de longitud variable (solo de doble byte).
LONG VARCHAR (SBCS) SQL_CHAR No Cadena de caracteres SBCS de longitud variable.
LONG VARCHAR (MIXED) SQL_CHAR No Cadena de caracteres mixtos de longitud variable (single y double byte).
LONG VARGRAPHIC (DBCS) SQL_LONGVARCHAR No Cadena gráfica de longitud variable que consta de una secuencia de datos de cadena de caracteres de doble byte (solo DBCS).
SMALLINT SQL_SMALLINT SMALLINT (entero pequeño) es un entero de dos bytes con una precisión de 5 dígitos que oscilan entre -32.768 y +32.767.
REAL SQL_REAL Un número de punto flotante de precisión simple de 4 bytes.
TIME SQL_TYPE_TIME Una cadena de tiempo de 8 bytes.

Al usar objetos de datos ActiveX para devolver datos desde tipos de datos DB2 TIME, ADO devuelve un valor DATETIME.
TIMESTAMP SQL_TYPE_TIMESTAMP Una cadena de 26 bytes que representa la fecha, la hora y los microsegundos.
VARCHAR (BIT) SQL_BINARY No Cadena de caracteres de longitud variable (solo de doble byte).
VARCHAR (SBCS) SQL_CHAR Una cadena de caracteres de longitud variable.
VARCHAR (MIXED) SQL_CHAR No Cadena de caracteres mixta de longitud variable (single y double bye).
VARGRAPHIC (DBCS) SQL_VARCHAR No Cadena gráfica de longitud variable que consta de una secuencia de datos de cadena de caracteres de doble byte (solo DBCS).

No todas las plataformas y versiones de DB2 admiten todos los tipos de datos a los que se hace referencia anteriormente. Consulte su referencia de IBM SQL para conocer el destino y la plataforma y la versión específicos de DB2.

El controlador ODBC para DB2 expone solo los tipos de datos DB2 seleccionados como tipos nativos en la función de catálogo ODBC GetTypeInfo. Por ejemplo, el controlador no expone los tipos LONG CHARACTER o VARYING LONG CHARACTER. En su lugar, estos tipos se exponen como CHARACTER y VARYING CHARACTER respectivamente. Además, el controlador expone CHARACTER FOR SBCS DATA, CHARACTER FOR MIXED DATA y CHARACTER FOR BIT DATA como CHARACTER. El controlador expone VARYING CHARACTER FOR SBCS DATA, VARYING CHARACTER FOR MIXED DATA y VARYING CHARACTER FOR BIT DATA como VARYING CHARACTER. Sin embargo, ODBC Driver for DB2 devuelve estos tipos de datos LONG y VARYING LONG si se lee una tabla con estos tipos de datos. Por ejemplo, al leer una tabla con una cadena de caracteres variable de longitud superior a 254 bytes, ODBC Driver for DB2 devuelve un LONG VARCHAR.

La longitud máxima de los tipos de datos de cadena de caracteres y gráficos DB2 depende de la plataforma y la versión de DB2. Por ejemplo, un tipo CHAR en DB2 para z/OS V5R1 tiene una longitud máxima de 254 bytes, mientras que un tipo CHAR en DB2/400 V4R4 tiene una longitud máxima de 32 766 bytes.

Se admiten conversiones de datos de un tipo numérico grande a un tipo numérico pequeño (de DOUBLE a SINGLE y de INT a SMALLINT, por ejemplo), sin embargo, se pueden producir errores de truncamiento y conversión que no notificará el controlador ODBC para DB2.

Con el controlador ODBC para DB2, ciertas conversiones de cadenas de EBCDIC a ASCII y, a continuación, vuelven a EBCDIC son asimétricas y pueden dar lugar a cadenas que son diferentes del original. La especificación EBCDIC contiene ordinales para los que no existen caracteres definidos. El controlador ODBC para DB2 traduce todos estos caracteres no definidos al carácter de signo de interrogación ("?"). Por lo tanto, cuando las cadenas ASCII que contienen estos caracteres se convierten de nuevo en EBCDIC, estos caracteres no definidos se reemplazan por signos de interrogación. A fin de proteger las cadenas EBCDIC que contienen caracteres no definidos, estos campos se deben etiquetar como cadenas binarias y la aplicación debe asignarlos.

Las conversiones de caracteres ANSI a EBCDIC afectadas incluyen lo siguiente:

Valor de carácter (decimal) Valor de carácter (hexadecimal) Código ANSI, página 1252 Carácter EBCDIC tras la conversión a CCSID 37
128 0x80 No se usa ?
130 0x82 Comilla simple baja ?
131 0x83 F latina con gancho ?
132 0x84 Comilla doble baja ?
133 0x85 Puntos suspensivos ?
134 0x86 Cruz ?
135 0x87 Cruz doble ?
136 0x88 Por mil ?
137 0x89 S con acento circunflejo ?
138 0x8A Corchete angular izquierdo ?
139 0x8B Ligadura OE ?
140 0x8C No se usa ?
142 0x8E No se usa ?
145-156 0x91-0x9C ?
158-159 0x9E-0x9F ?