Javasql PDF
Javasql PDF
Javasql PDF
SC10-3723-00
® ™
IBM DB2 Universal Database
Guía de desarrollo de aplicaciones:
Programación de aplicaciones de cliente
Versión 8
SC10-3723-00
Antes de utilizar esta información y el producto al que da soporte, asegúrese de leer la información general incluida
en el apartado Avisos.
Este manual es la traducción del original inglés IBM DB2 Universal Database Application Development Guide:
Programming Client Applications Version 8 (SC09-4826-00).
Este documento contiene información sobre productos patentados de IBM. Se proporciona según un acuerdo de
licencia y está protegido por la ley de la propiedad intelectual. La presente publicación no incluye garantías del
producto y las declaraciones que contiene no deben interpretarse como tales.
Puede realizar pedidos de publicaciones en línea o a través del representante de IBM de su localidad.
v Para realizar pedidos de publicaciones en línea, vaya a IBM Publications Center en
www.ibm.com/shop/publications/order
v Para encontrar el representante de IBM correspondiente a su localidad, vaya a IBM Directory of Worldwide
Contacts en www.ibm.com/planetwide
Para realizar pedidos de publicaciones en márketing y ventas de DB2 de los EE.UU. o de Canadá, llame al número
1-800-IBM-4YOU (426-4968).
Cuando envía información a IBM, otorga a IBM un derecho no exclusivo para utilizar o distribuir dicha información
en la forma en que IBM considere adecuada, sin contraer por ello ninguna obligación con el remitente.
© Copyright International Business Machines Corporation 1993-2002. Reservados todos los derechos.
Contenido
Acerca de este manual . . . . . . . . xv Capítulo 2. Codificación de una aplicación
DB2 . . . . . . . . . . . . . . 31
Parte 1. Introducción . . . . . . . 1 Requisitos previos para programación . . . 32
Visión general de la codificación de
aplicaciones DB2 . . . . . . . . . . 33
Capítulo 1. Visión general de las interfaces
Programación de una aplicación autónoma 33
de programación soportadas . . . . . . 3
Creación de una sección de declaración de
DB2 Developer’s Edition . . . . . . . . 3
una aplicación autónoma. . . . . . . 34
Productos de DB2 Developer’s Edition . . 3
Declaración de variables que interactúan
Instrucciones para instalar productos DB2
con el gestor de bases de datos. . . . . 34
Developer’s Edition . . . . . . . . . 5
Declaración de variables que representan
Herramientas de DB2 Universal Database para
objetos de SQL . . . . . . . . . . 35
desarrollar aplicaciones . . . . . . . . 5
Declaración de variables del lenguaje
Interfaces de programación soportadas . . . 6
principal con el Generador de
Interfaces de programación que reciben
declaraciones db2dclgn . . . . . . . 38
soporte de DB2 . . . . . . . . . . 6
Relación de variables del lenguaje
Interfaces de programación de aplicaciones
principal con una sentencia de SQL . . . 39
de DB2 . . . . . . . . . . . . . 8
Declaración de la SQLCA para el manejo
SQL incorporado . . . . . . . . . . 9
de errores . . . . . . . . . . . . 40
Interfaz de nivel de llamada de DB2 . . . 11
Manejo de errores utilizando la sentencia
CLI de DB2 frente a SQL dinámico
WHENEVER . . . . . . . . . . . 41
incorporado . . . . . . . . . . . 13
Adición de sentencias no ejecutables a una
Java Database Connectivity (JDBC) . . . 15
aplicación . . . . . . . . . . . . 43
SQL incorporado para Java (SQLj) . . . 17
Conexión de una aplicación con una base
Objetos de datos ActiveX y Objetos de
de datos . . . . . . . . . . . . 43
datos remotos . . . . . . . . . . 17
Codificación de transacciones . . . . . 44
DBI Perl . . . . . . . . . . . . 18
Finalización de una transacción con la
Herramientas de usuario final de ODBC 18
sentencia COMMIT . . . . . . . . 45
Aplicaciones Web . . . . . . . . . . 19
Finalización de una transacción con la
Herramientas para crear aplicaciones Web 19
sentencia ROLLBACK. . . . . . . . 46
WebSphere Studio . . . . . . . . . 19
Finalización de un programa de aplicación 48
XML Extender . . . . . . . . . . 20
Finalización implícita de una transacción
Habilitación de MQSeries . . . . . . 21
en una aplicación autónoma . . . . . 48
Net.Data . . . . . . . . . . . . 21
Infraestructura de seudocódigo de
Funciones de programación . . . . . . . 22
aplicación . . . . . . . . . . . . 49
Funciones de programación de DB2 . . . 22
Recursos para crear prototipos de
Procedimientos almacenados de DB2. . . 23
sentencias de SQL . . . . . . . . . 50
Métodos y funciones definidas por el
API administrativas en SQL incorporado o
usuario de DB2 . . . . . . . . . . 24
en programas de CLI de DB2 . . . . . 52
Centro de desarrollo . . . . . . . . 25
Definición de FIPS 127-2 e ISO/ANS
Tipos definidos por el usuario (UDT) y
SQL92 . . . . . . . . . . . . . 52
objetos grandes (LOB). . . . . . . . 26
Control de valores de datos y relaciones . . 52
Rutinas de automatización de OLE . . . 28
Control de valores de datos . . . . . . 52
Funciones de tabla de OLE DB . . . . . 29
Control de valores de datos mediante tipos
Activadores de DB2 . . . . . . . . 29
de datos . . . . . . . . . . . . 53
Contenido v
Cómo guardar peticiones de SQL Sintaxis para la declaración gráfica del
procedentes de usuarios finales . . . . . 165 formato estructurado VARGRAPHIC en C
Marcadores de parámetros en programas de o C++. . . . . . . . . . . . . 194
SQL dinámico . . . . . . . . . . . 166 Sintaxis de las variables del lenguaje
Cómo proporcionar entrada de variables principal de objeto grande (LOB) en C o
a SQL dinámico mediante marcadores de C++ . . . . . . . . . . . . . 195
parámetros . . . . . . . . . . . 166 Sintaxis de las variables del lenguaje
Ejemplo de marcadores de parámetros en principal de localizador de objeto grande
un programa de SQL dinámico . . . . 167 (LOB) en C o C++ . . . . . . . . 198
Comparación entre Interfaz de nivel de Sintaxis de declaraciones de variables del
llamada (CLI) de DB2 y SQL dinámico. . . 169 lenguaje principal de referencia de
Interfaz de nivel de llamada de DB2 (CLI) archivos en C o C++ . . . . . . . . 199
frente a SQL dinámico incorporado . . . 169 Inicialización de variables del lenguaje
Ventajas de CLI de DB2 sobre SQL principal en C y C++ . . . . . . . 200
incorporado. . . . . . . . . . . 171 Expansión de macros en C . . . . . . 200
Cuándo utilizar CLI de DB2 o SQL Soporte de estructuras del lenguaje
incorporado. . . . . . . . . . . 173 principal en C y C++ . . . . . . . 201
Tablas de indicadores en C y C++ . . . 203
Capítulo 6. Programación en C y C++ . . 175 Series terminadas en nulo en C y C++ 205
Consideraciones sobre programación en Variables del lenguaje principal utilizadas
C/C++ . . . . . . . . . . . . . 176 como tipos de datos de puntero en C y
Secuencias tri-grafo para C y C++ . . . . 176 C++ . . . . . . . . . . . . . 207
Archivos de entrada y de salida para C y Miembros de datos de clase utilizados
C++ . . . . . . . . . . . . . . 176 como variables del lenguaje principal en
Archivos include . . . . . . . . . . 177 C y C++ . . . . . . . . . . . . 208
Archivos include para C y C++ . . . . 177 Operadores de calificación y de miembro
Archivos include en C y C++ . . . . . 180 en C y C++ . . . . . . . . . . . 209
Sentencias de SQL incorporado en C y C++ 182 Codificación de caracteres de varios bytes
Variables del lenguaje principal en C y C++ 183 en C y C++ . . . . . . . . . . . 210
Variables del lenguaje principal en C y Tipos de datos wchar_t y sqldbchar en C
C++ . . . . . . . . . . . . . 183 y C++ . . . . . . . . . . . . . 211
Nombres de variables del lenguaje Opción del precompilador WCHARTYPE
principal en C y C++ . . . . . . . 185 en C y C++ . . . . . . . . . . . 211
Declaraciones de variables del lenguaje Consideraciones sobre EUC en japonés o
principal en C y C++ . . . . . . . 186 chino tradicional y UCS-2 en C y C++ . . 215
Sintaxis de las variables numéricas del Sección declare de SQL con variables del
lenguaje principal en C y C++ . . . . 187 lenguaje principal para C y C++ . . . . 216
Sintaxis de las variables del lenguaje Consideraciones sobre tipos de datos para C
principal de tipo carácter fijas y y C++. . . . . . . . . . . . . . 218
terminadas en nulo en C y C++ . . . . 189 Tipos de datos SQL soportados en C y
Sintaxis de las variables del lenguaje C++ . . . . . . . . . . . . . 218
principal de tipo carácter de longitud FOR BIT DATA en C y C++ . . . . . 222
variable en C o C++ . . . . . . . . 190 Tipos de datos de C y C++ para
Variables de indicador en C y C++ . . . 191 procedimientos, funciones y métodos . . 223
Variables gráficas del lenguaje principal Variables SQLSTATE y SQLCODE en C y
en C y C++ . . . . . . . . . . . 191 C++ . . . . . . . . . . . . . . 224
Sintaxis de la declaración gráfica de
formatos gráficos de un solo gráfico y Capítulo 7. Acceso a bases de datos de
terminados en nulo en C y C++ . . . . 192 varias hebras en aplicaciones C y C++ . . 227
Contenido vii
Sintaxis de las variables del lenguaje Distribución de aplicaciones JDBC
principal de localizador de objeto grande mediante el controlador de tipo 2 . . . 297
(LOB) en FORTRAN . . . . . . . . 274 Distribución y ejecución de applets JDBC
Sintaxis de las variables del lenguaje del controlador de tipo 4 . . . . . . 297
principal de referencia de archivos en Excepciones ocasionadas por una falta de
FORTRAN . . . . . . . . . . . 275 correspondencia de archivos db2java.zip
Sección declare de SQL con variables del cuando se utiliza el controlador JDBC de
lenguaje principal para FORTRAN . . . 276 tipo 3 . . . . . . . . . . . . . 298
Tipos de datos SQL soportados en JDBC 2.1 . . . . . . . . . . . . 299
FORTRAN . . . . . . . . . . . . 276 Restricciones de la API central de JDBC
Consideraciones sobre juegos de caracteres 2.1 por parte del controlador JDBC de
de varios bytes en FORTRAN . . . . . . 278 DB2 de tipo 2 . . . . . . . . . . 299
Consideraciones sobre EUC en japonés o Restricciones de la API central JDBC 2.1
chino tradicional y UCS-2 para FORTRAN . 278 impuestas por el controlador JDBC de
Variables SQLSTATE y SQLCODE en DB2 de tipo 4 . . . . . . . . . . 300
FORTRAN . . . . . . . . . . . . 279 Soporte de la API de paquete opcional de
JDBC 2.1 por parte del controlador de
Parte 3. Java . . . . . . . . . 281 JDBC de DB2 de tipo 2 . . . . . . . 300
Soporte de la API Paquete opcional de
JDBC 2.1 por parte del controlador JDBC
Capítulo 10. Programación en Java . . . 283
de DB2 de tipo 4 . . . . . . . . . 302
Consideraciones sobre la programación en
Programación en SQLj . . . . . . . . 302
Java . . . . . . . . . . . . . . 284
Programación en SQLj . . . . . . . 302
JDBC y SQLj . . . . . . . . . . . 284
Soporte de DB2 para SQLj . . . . . . 303
Comparación entre SQLj y JDBC . . . . 284
Restricciones de DB2 en SQLj . . . . . 304
Interoperatividad entre JDBC y SQLj . . 284
Sentencias de SQL incorporado en Java 306
Sesiones compartidas entre JDBC y SQLj 285
Declaraciones y comportamiento del
Ventajas de Java sobre otros lenguajes . . . 285
iterador en SQLj . . . . . . . . . 307
Seguridad de SQL en Java . . . . . . . 286
Ejemplo de iteradores en un programa
Gestión de recursos de conexión en Java . . 286
SQLj . . . . . . . . . . . . . 308
Archivos fuente y de salida para Java . . . 287
Llamadas a rutinas en SQLj . . . . . 309
Bibliotecas de clases Java . . . . . . . 288
Ejemplo de compilación y ejecución de un
Dónde colocar clases Java . . . . . . . 288
programa SQLj. . . . . . . . . . 310
Actualización de clases Java para tiempo de
Opciones del conversor SQLj . . . . . 312
ejecución. . . . . . . . . . . . . 289
Resolución de problemas de aplicaciones
Paquetes de Java . . . . . . . . . . 290
Java . . . . . . . . . . . . . . 313
Variables del lenguaje principal en Java . . 290
Recursos de rastreo en Java . . . . . 313
Tipos de datos SQL soportados en Java . . 291
Recurso de rastreo de CLI/ODBC/JDBC 313
Componentes de habilitación de Java . . . 292
Archivos de rastreo de CLI y JDBC . . . 324
Soporte de aplicaciones y applets . . . . 292
Valores de SQLSTATE y SQLCODE en
Soporte de aplicaciones en Java con el
Java . . . . . . . . . . . . . 335
controlador de tipo 2. . . . . . . . 292
Soporte de aplicaciones y applets en Java
Capítulo 11. Aplicaciones Java que
con el controlador de tipo 4 . . . . . 293
utilizan WebSphere Application Servers . 337
Soporte de applets en Java mediante el
Servicios Web . . . . . . . . . . . 337
controlador de tipo 3. . . . . . . . 293
Arquitectura de servicios Web . . . . . 339
Programación en JDBC . . . . . . . . 294
Acceso a datos . . . . . . . . . . . 341
Codificación de aplicaciones y applets
Acceso a datos de DB2 a través de
JDBC . . . . . . . . . . . . . 294
servicios Web . . . . . . . . . . 341
Especificación JDBC . . . . . . . . 295
Ejemplo de un programa JDBC . . . . 296
Contenido ix
Tipos de aplicaciones soportados por IBM Habilitación del soporte de MTS en DB2
OLE DB Provider para DB2 . . . . . . 393 Universal Database para aplicaciones
Servicios OLE DB . . . . . . . . . . 393 C/C++ . . . . . . . . . . . . 418
Modelo de hebras soportado por IBM
OLE DB Provider . . . . . . . . . 393 Parte 5. Conceptos generales
Manipulación de objetos grandes con IBM
OLE DB Provider . . . . . . . . . 393
sobre aplicaciones DB2 . . . . . 419
Conjuntos de filas de esquema soportados
por IBM OLE DB Provider . . . . . . 393 Capítulo 15. Soporte de idiomas
Habilitación automática de servicios OLE nacionales . . . . . . . . . . . . 421
DB por parte de IBM OLE DB Provider . 396 Visión general del orden de clasificación . . 421
Servicios de datos. . . . . . . . . . 396 Órdenes de clasificación . . . . . . 422
Modalidades de cursor soportadas en Comparaciones de caracteres basadas en
IBM OLE DB Provider . . . . . . . 396 órdenes de clasificación . . . . . . . 424
Correlaciones de tipos de datos entre DB2 Comparaciones que no dependen de
y OLE DB . . . . . . . . . . . 396 mayúsculas y minúsculas mediante la
Conversión de datos para establecer datos función TRANSLATE . . . . . . . 424
de tipos OLE DB en tipos DB2 . . . . 398 Diferencias entre los órdenes de
Conversión de datos para establecer datos clasificación de EBCDIC y ASCII . . . . 426
de tipos DB2 en tipos OLE DB . . . . 400 Orden de clasificación especificado
Restricciones de IBM OLE DB Provider . . 402 cuando se crea la base de datos . . . . 427
Soporte de IBM OLE DB Provider de Órdenes de clasificación de ejemplo. . . 429
interfaces y componentes de OLE DB . . . 403 Páginas de códigos y entornos locales . . . 430
Soporte de IBM OLE DB de propiedades de Derivación de valores de página de
OLE DB . . . . . . . . . . . . . 406 códigos . . . . . . . . . . . . 430
Conexiones a fuentes de datos mediante IBM Derivación de entornos locales en
OLE DB Provider . . . . . . . . . . 409 programas de aplicación . . . . . . 430
Aplicaciones ADO . . . . . . . . . 410 Cómo DB2 deriva entornos locales . . . 431
Palabras clave de series de conexión de Consideraciones sobre aplicaciones . . . . 431
ADO . . . . . . . . . . . . . 410 Consideraciones sobre el soporte de
Conexiones con fuentes de datos con idiomas nacionales y sobre el desarrollo
aplicaciones ADO Visual Basic . . . . 410 de aplicaciones. . . . . . . . . . 432
Cursores desplazables actualizables en Soporte de idiomas nacionales y
aplicaciones ADO . . . . . . . . . 411 sentencias de SQL . . . . . . . . 433
Limitaciones de las aplicaciones ADO . . 411 Procedimientos almacenados y UDF
Soporte de IBM OLE DB Provider de remotos . . . . . . . . . . . . 435
propiedades y métodos ADO . . . . . 411 Consideraciones sobre nombres de
Aplicaciones C y C++ . . . . . . . . 416 paquetes en entornos de páginas de
Compilación y enlace de aplicaciones códigos combinadas . . . . . . . . 435
C/C++ e IBM OLE DB Provider . . . . 416 Página de códigos activa para
Conexiones con fuentes de datos en precompilación y vinculación . . . . . 436
aplicaciones C/C++ mediante IBM OLE Página de códigos activa para la ejecución
DB Provider . . . . . . . . . . 416 de aplicaciones. . . . . . . . . . 436
Cursores desplazables actualizables en Conversión de caracteres entre distintas
aplicaciones ATL e IBM OLE DB Provider 417 páginas de códigos . . . . . . . . 436
Transacciones distribuidas MTS y COM+ 417 Cuándo se produce la conversión de
Soporte de transacciones distribuidas página de códigos . . . . . . . . 437
MTS y COM+ e IBM OLE DB Provider . 417 Sustitución de caracteres durante
conversiones de páginas de códigos. . . 438
Contenido xi
Partición que devuelve el error . . . . 496 Lenguaje de control de datos en entornos de
Aplicaciones en bucle o suspendidas . . 496 sistema principal e iSeries . . . . . . . 530
Gestión de conexiones de bases de datos con
Capítulo 18. Técnicas comunes de DB2 Connect . . . . . . . . . . . 531
aplicación de DB2 . . . . . . . . . 499 Proceso de peticiones de interrupción . . . 532
Columnas generadas . . . . . . . . . 499 Atributos de paquete, PREP y BIND . . . 532
Columnas de identidad . . . . . . . . 500 Diferencias de atributos de paquete entre
Valores secuenciales y objetos de secuencia 501 sistemas de bases de datos relacionales de
Generación de valores secuenciales . . . 502 IBM . . . . . . . . . . . . . 532
Gestión del comportamiento de Opción CNULREQD BIND para series C
secuencias . . . . . . . . . . . 504 terminadas en nulo . . . . . . . . 533
Rendimiento de la aplicación y objetos de Variables SQLCODE y SQLSTATE
secuencia . . . . . . . . . . . 505 autónomas . . . . . . . . . . . 533
Comparación entre objetos de secuencia y Niveles de aislamiento soportados por
columnas de identidad . . . . . . . 506 DB2 Connect . . . . . . . . . . 534
Tablas temporales declaradas y rendimiento Órdenes de clasificación definidos por el
de la aplicación . . . . . . . . . . 506 usuario . . . . . . . . . . . . . 535
Puntos de rescate y transacciones . . . . 509 Diferencias en la integridad referencial entre
Gestión de transacciones con puntos de sistemas de bases de datos relacionales de
rescate . . . . . . . . . . . . 509 IBM . . . . . . . . . . . . . . 535
Comparación entre puntos de rescate de Bloqueo y portabilidad de aplicaciones. . . 536
la aplicación y bloques de SQL compuesto 511 Diferencias en SQLCODE y SQLSTATE entre
Sentencias de SQL para crear y controlar sistemas de bases de datos relacionales de
puntos de rescate . . . . . . . . . 513 IBM . . . . . . . . . . . . . . 536
Restricciones sobre el uso de puntos de Diferencias en el catálogo del sistema entre
rescate . . . . . . . . . . . . 514 sistemas de bases de datos relacionales de
Puntos de rescate y Lenguaje de IBM . . . . . . . . . . . . . . 537
definición de datos (DDL) . . . . . . 514 Desbordamientos por conversión numérica
Puntos de rescate e inserciones en en asignaciones de recuperación . . . . . 537
almacenamiento intermedio . . . . . 515 Procedimientos almacenados en entornos de
Puntos de rescate y bloqueo de cursor 516 sistema principal o iSeries . . . . . . . 537
Puntos de rescate y gestores de Soporte de DB2 Connect de SQL compuesto 539
transacciones que cumplen con XA . . . 517 Actualización múltiple con DB2 Connect . . 539
Transmisión de grandes volúmenes de datos Sentencias de SQL de servidor de sistema
a través de una red . . . . . . . . . 517 principal e iSeries soportadas por DB2
Connect . . . . . . . . . . . . . 541
Sentencias de SQL de servidor de sistema
Parte 6. Apéndices . . . . . . . 519
principal e iSeries rechazadas por DB2
Connect . . . . . . . . . . . . . 541
Apéndice A. Sentencias de SQL
soportadas . . . . . . . . . . . 521
Apéndice C. Simulación de clasificación
binaria EBCDIC . . . . . . . . . . 543
Apéndice B. Programación en un entorno
de sistema principal o iSeries . . . . . 527
Índice . . . . . . . . . . . . . 549
Aplicaciones en entornos de sistema
principal o iSeries . . . . . . . . . . 527
Información técnica sobre DB2 Universal
Lenguaje de definición de datos en entornos
Database . . . . . . . . . . . . 573
de sistema principal e iSeries . . . . . . 529
Visión general de la información técnica de
Lenguaje de manipulación de datos en
DB2 Universal Database . . . . . . . 573
entornos de sistema principal e iSeries . . . 529
FixPaks para la documentación de DB2 573
Contenido xiii
xiv Programación de aplicaciones cliente
Acerca de este manual
El manual Guía de desarrollo de aplicaciones es un libro de tres volúmenes que
describe lo que tiene que saber sobre codificación, depuración, creación y
ejecución de aplicaciones DB2:
v El manual Guía de desarrollo de aplicaciones: Programación de aplicaciones de
cliente contiene lo que tiene que saber para codificar aplicaciones DB2
autónomas que se ejecutan en clientes DB2. Incluye información sobre:
– Interfaces de programación que reciben soporte de DB2. Se proporcionan
descripciones de alto nivel para DB2 Developer’s Edition, interfaces de
programación soportadas, recursos para crear aplicaciones Web y
funciones de programación proporcionadas por DB2, como rutinas y
activadores.
– La estructura general que debe seguir una aplicación DB2. Se
proporcionan recomendaciones sobre cómo mantener valores de datos y
relaciones en la base de datos, se describen consideraciones sobre
autorización y se proporciona información sobre cómo probar y depurar
la aplicación.
– SQL incorporado, tanto dinámico como estático. Se describen
consideraciones generales sobre SQL incorporado, así como temas
específicos que se aplican al uso de SQL estático y dinámico en
aplicaciones DB2.
– Lenguajes interpretados y de sistema principal, como C/C++, COBOL,
Perl y REXX, y cómo utilizar SQL incorporado en aplicaciones escritas en
estos lenguajes.
– Java (tanto JDBC como SQLj) y consideraciones sobre la creación de
aplicaciones Java que utilizan WebSphere Application Servers.
– IBM OLE DB Provider para servidores DB2. Se proporciona información
general sobre el soporte de IBM OLE DB Provider para servicios OLE
DB, componentes y propiedades. También se proporciona información
específica sobre aplicaciones Visual Basic y Visual C++ que utilizan la
interfaz OLE DB para Objetos de datos ActiveX (ADO).
– Temas relacionados con el soporte de idiomas nacionales. Se describen
temas generales, como secuencias de clasificación, obtención de páginas
de códigos y entornos locales y conversiones de caracteres. También se
describen temas más específicos, como páginas de códigos DBCS, juegos
de caracteres EUC y temas que se aplican a entornos EUC y UCS-2 de
japonés y chino tradicional.
Con el software que viene con estos productos puede desarrollar y probar
aplicaciones que se ejecutan en un sistema operativo y que acceden a bases de
datos en el mismo o en otro sistema operativo. Por ejemplo, puede crear una
aplicación que se ejecute en el sistema operativo Windows NT pero que
acceda a una base de datos en una plataforma UNIX como AIX. Consulte el
Acuerdo de licencia para ver los términos y condiciones de uso de los
productos Developer’s Edition.
Centro de control
Una interfaz gráfica que muestra objetos de bases de datos (como bases de
datos, tablas y paquetes) y sus mutuas relaciones. Utilice el Centro de control
para realizar tareas administrativas como configurar el sistema, gestionar
directorios, hacer copia de seguridad y recuperar el sistema, planificar trabajos
y gestionar soportes.
Visual Explain
El modo en que la aplicación acceda a bases de datos DB2 dependerá del tipo
de aplicación que desee desarrollar. Por ejemplo, si desea una aplicación de
entrada de datos, es posible que elija incorporar sentencias de SQL estático en
la aplicación. Si desea una aplicación que realice consultas en la World Wide
Web, es posible que elija Net.Data, Perl o Java.
Aparte del modo en que la aplicación accede a los datos, también debe tener
en cuenta lo siguiente:
v Control de valores de datos utilizando:
– Tipos de datos (integrados o definidos por el usuario)
– Restricciones de comprobación de tablas
– Restricciones de integridad referencial
– Vistas utilizando la opción CHECK
– Lógica de aplicación y tipos de variable
v Control de las relaciones entre valores de datos utilizando:
– Restricciones de integridad referencial
– Activadores
– Lógica de aplicación
v Ejecución de programas en el servidor utilizando:
– Procedimientos almacenados
– Funciones definidas por el usuario
– Activadores
Observará que esta lista menciona algunas funciones más de una vez, como
los activadores. Esto refleja la flexibilidad de estas funciones para ajustarse a
más de un criterio de diseño.
Esta última ventaja es muy potente, pero también debe tener en cuenta que
cualquier lógica de datos que se coloque en la base de datos afecta a todos los
usuarios de los datos por igual. Debe tener en cuenta si las normas y
restricciones que desea imponer en los datos se aplican a todos los usuarios
de los datos o únicamente a los usuarios de la aplicación.
Conceptos relacionados:
v “Interfaz de nivel de llamada de DB2 (CLI) frente a SQL dinámico
incorporado” en la página 169
v “SQL incorporado” en la página 9
v “Interfaz de nivel de llamada de DB2” en la página 11
v “Interfaces de programación de aplicaciones de DB2” en la página 8
v “Objetos de datos ActiveX y Objetos de datos remotos” en la página 17
v “DBI Perl” en la página 18
v “Herramientas de usuario final de ODBC” en la página 18
v “Herramientas para crear aplicaciones Web” en la página 19
v “Java Database Connectivity (JDBC)” en la página 15
Interfaces de programación de aplicaciones de DB2
Además, es posible que tenga que llevar a cabo tareas específicas que sólo se
pueden realizar mediante las API de DB2. Por ejemplo, puede que desee
recuperar el texto de un mensaje de error para que la aplicación lo pueda
mostrar al usuario final. Para recuperar el mensaje, debe utilizar la API
Obtener mensaje de error.
Conceptos relacionados:
v “Consideraciones sobre autorización para API” en la página 63
v “API administrativas en SQL incorporado o en programas de CLI de DB2”
en la página 52
SQL incorporado
Por el contrario, las sentencias de SQL dinámico son aquellas que la aplicación
crea y ejecuta en el tiempo de ejecución. Una aplicación interactiva que
Conceptos relacionados:
v “SQL incorporado en aplicaciones REXX” en la página 372
v “Sentencias de SQL incorporado en C y C++” en la página 182
v “Sentencias de SQL incorporado en COBOL” en la página 237
v “Sentencias de SQL incorporado en FORTRAN” en la página 267
v “Sentencias de SQL incorporado en Java” en la página 306
v “SQL incorporado para Java (SQLj)” en la página 17
Tareas relacionadas:
v “Incorporación de sentencias de SQL en un lenguaje principal” en la página
77
Interfaz de nivel de llamada de DB2
Sin embargo, antes de que las aplicaciones CLI de DB2 u ODBC puedan
acceder a bases de datos DB2, los archivos de vinculación CLI de DB2 que
vienen con DB2 AD Client se deben vincular a cada una de las bases de datos
DB2 a la que se vaya a acceder. Esto se produce automáticamente con la
ejecución de la primera sentencia, pero recomendamos que el administrador
de bases de datos vincule los archivos de vinculación desde un cliente de cada
plataforma que vaya a acceder a una base de datos DB2.
Por ejemplo, supongamos que tiene clientes AIX, Solaris y Windows 98, cada
uno de los cuales accede a dos bases de datos DB2. El administrador debe
vincular los archivos de vinculación desde un cliente AIX de cada base de
datos a la que se vaya a acceder. A continuación, el administrador debe
vincular los archivos de vinculación desde un cliente Solaris de cada base de
datos a la que se vaya a acceder. Finalmente, el administrador debe hacer lo
mismo en un cliente Windows 98.
Conceptos relacionados:
v “API administrativas en SQL incorporado o en programas de CLI de DB2”
en la página 52
v “Interfaz de nivel de llamada de DB2 (CLI) frente a SQL dinámico
incorporado” en la página 169
v “Ventajas de CLI de DB2 sobre SQL incorporado” en la página 171
v “Cuándo utilizar CLI de DB2 o SQL incorporado” en la página 173
v “CLI de DB2 frente a SQL dinámico incorporado” en la página 13
Consulta relacionada:
v “Programas de ejemplo de la CLI de DB2” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
Conceptos relacionados:
v “Interfaz de nivel de llamada de DB2 (CLI) frente a SQL dinámico
incorporado” en la página 169
v “Ventajas de CLI de DB2 sobre SQL incorporado” en la página 171
v “Cuándo utilizar CLI de DB2 o SQL incorporado” en la página 173
Java Database Connectivity (JDBC)
El soporte de Java de DB2 incluye JDBC, una interfaz de SQL dinámico que
no depende del proveedor que proporciona acceso a datos a la aplicación a
través de métodos Java estandarizados. JDBC se parece a CLI de DB2 en que
el usuario no tiene que precompilar ni vincular un programa JDBC. Como
estándar independiente del proveedor, las aplicaciones JDBC ofrecen mayor
portabilidad. Una aplicación escrita utilizando JDBC sólo utiliza SQL
dinámico.
JDBC puede resultar especialmente útil para acceder a bases de datos DB2 a
través de Internet. Mediante el lenguaje de programación Java puede
desarrollar applets y aplicaciones JDBC que accedan a datos de bases de datos
DB2 remotas y los manipulen mediante una conexión de red. También puede
crear procedimientos almacenados de JDBC que residan en el servidor,
accedan al servidor de base de datos y devuelvan información a una
aplicación cliente remota que llame al procedimiento almacenado.
JDBC de tipo 3
Si utiliza el controlador JDBC de tipo 3, sólo puede crear applets Java. Los
applets Java no necesitan que el cliente DB2 esté instalado en la máquina
cliente. Normalmente, el applet se incorpora en una página web HyperText
Markup Language (HTML).
JDBC de tipo 4
Conceptos relacionados:
v “Comparación entre SQLj y JDBC” en la página 284
Tareas relacionadas:
Conceptos relacionados:
v “Comparación entre SQLj y JDBC” en la página 284
Objetos de datos ActiveX y Objetos de datos remotos
Tareas relacionadas:
v “Creación de aplicaciones ADO con Visual Basic” en el manual Guía de
desarrollo de aplicaciones: Creación y ejecución de aplicaciones
v “Creación de aplicaciones RDO con Visual Basic” en el manual Guía de
desarrollo de aplicaciones: Creación y ejecución de aplicaciones
v “Creación de aplicaciones ADO con Visual C++” en el manual Guía de
desarrollo de aplicaciones: Creación y ejecución de aplicaciones
Consulta relacionada:
v “Programas de ejemplo Visual Basic” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
v “Programas de ejemplo Visual C++” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
DBI Perl
Conceptos relacionados:
v “Consideraciones sobre la programación en Perl” en la página 363
Herramientas de usuario final de ODBC
Aplicaciones Web
Las secciones siguientes describen los productos y funciones disponibles para
crear aplicaciones Web.
Herramientas para crear aplicaciones Web
Conceptos relacionados:
v “WebSphere Studio” en la página 19
v “XML Extender” en la página 20
WebSphere Studio
Conceptos relacionados:
v “Enterprise Java Beans” en la página 348
Consulta relacionada:
v “Programas de ejemplo de Java WebSphere” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
XML Extender
DB2 XML Extender incorpora tres nuevos tipos de datos: XMLVARCHAR, XMLCLOB
y XMLFILE. El ampliador proporciona UDF para almacenar, extraer y actualizar
documentos XML situados dentro de una sola columna o en varias columnas
y tablas. La búsqueda se puede realizar en el documento XML entero o se
http://www.ibm.com/software/data/db2/extenders/xmlext/index.html
Conceptos relacionados:
v “Archivo de extensión de definición de acceso a documentos” en la página
343
Habilitación de MQSeries
http://www-4.ibm.com/software/data/net.data/support/index.html
Conceptos relacionados:
v “Herramientas para crear aplicaciones Web” en la página 19
v “XML Extender” en la página 20
Funciones de programación
Las secciones siguientes describen las funciones de programación disponibles
con DB2.
Funciones de programación de DB2
DB2 viene con diversas funciones que se ejecutan en el servidor y que puede
utilizar para complementar o ampliar sus aplicaciones. Si utiliza las funciones
de DB2, no tiene que escribir su propio código para llevar a cabo las mismas
tareas. DB2 también le permite almacenar algunas partes de su código en el
servidor en lugar de conservar todo el código en las aplicaciones cliente. Esto
puede aportar ventajas en cuanto a rendimiento y mantenimiento.
Hay funciones para proteger los datos y para definir relaciones entre los
datos. Asimismo, hay funciones relacionales de objetos para crear aplicaciones
flexibles y avanzadas. Puede utilizar algunas funciones de más de una forma.
Por ejemplo, las restricciones le permite proteger datos y definir relaciones
entre valores de datos. Estas son algunas de las funciones clave de DB2:
v Restricciones
v Tipos definidos por el usuario (UDT) y objetos grandes (LOB)
v Funciones definidas por el usuario (UDF)
v Activadores
v Procedimientos almacenados
Conceptos relacionados:
v “Procedimientos almacenados de DB2” en la página 23
v “Métodos y funciones definidas por el usuario de DB2” en la página 24
v “Tipos definidos por el usuario (UDT) y objetos grandes (LOB)” en la
página 26
v “Activadores de DB2” en la página 29
Procedimientos almacenados de DB2
Conceptos relacionados:
v “Centro de desarrollo” en la página 25
Métodos y funciones definidas por el usuario de DB2
Las UDF y los métodos le ofrecen una gran flexibilidad. Devuelven un solo
valor escalar como parte de una expresión. Además, las funciones pueden
devolver tablas enteras a partir de fuentes que no sean de base de datos,
como hojas de cálculo.
Las funciones definidas por el usuario y los métodos también dan soporte a la
programación orientada a objetos en las aplicaciones. Permiten realizar
abstracciones, lo que le permite definir interfaces comunes que se pueden
utilizar para llevar a cabo operaciones en objetos de datos. Además, permiten
realizar encapsulaciones, lo que le permite controlar el acceso a los datos
subyacentes de un objeto y protegerlos frente a una manipulación directa y
posibles daños.
Centro de desarrollo
Puede activar el Centro de desarrollo como una aplicación separada del grupo
de programas DB2 Universal Database o lo puede activar desde cualquiera de
las aplicaciones de desarrollo siguientes:
v Microsoft Visual Studio
v Microsoft Visual Basic
v IBM VisualAge para Java
Conceptos relacionados:
v “Procedimientos almacenados de DB2” en la página 23
v “Rutinas de automatización de OLE” en la página 28
Tipos definidos por el usuario (UDT) y objetos grandes (LOB)
Los UDT se basan en los tipos de datos integrados. Cuando define un UDT,
también define las operaciones que son válidas para el UDT. Por ejemplo,
puede definir un tipo de datos MONEY basado en el tipo de datos DECIMAL.
Sin embargo, para el tipo de datos MONEY puede permitir únicamente
operaciones de suma y resta, pero no operaciones de multiplicación y
división.
Además de ampliar los tipos de datos integrados, los UDT proporcionan otras
ventajas:
Soporte de programación orientada a objetos en las aplicaciones
Puede agrupar objetos parecidos en tipos de datos relacionados. Estos
tipos tienen un nombre, una representación interna y un
comportamiento específico. Mediante la utilización de UDT, puede
indicar a DB2 el nombre del nuevo tipo y el modo en que se debe
representar internamente. Un LOB es una de las posibles
representaciones internas para su nuevo tipo y es la representación
más adecuada para estructuras de datos grandes y complejas.
Integridad de los datos a través de una estricta tipificación y encapsulación
La tipificación estricta garantiza que sólo las funciones y operaciones
definidas en el tipo diferenciado se pueden aplicar al tipo. La
encapsulación asegura que el comportamiento de los UDT está
restringido por las funciones y operadores que se pueden aplicar a los
mismos. En DB2, el comportamiento correspondiente a los UDT se
puede proporcionar en forma de funciones definidas por el usuario
Conceptos relacionados:
v “Uso de objetos grandes” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
v “Tipos definidos por el usuario” en el manual Guía de desarrollo de
aplicaciones: Programación de aplicaciones de servidor
Rutinas de automatización de OLE
Por ejemplo, puede desarrollar una aplicación que consulte datos de una hoja
de cálculo creada mediante un producto como Microsoft Excel. Para ello, debe
desarrollar una función de tabla de automatización de OLE que recupere
datos de la hoja de trabajo y los devuelva a DB2. Luego DB2 puede procesar
los datos, realizar un proceso analítico en línea (OLAP) y devolver el
resultado de la consulta a la aplicación.
Conceptos relacionados:
v “Procedimientos almacenados de DB2” en la página 23
v “Centro de desarrollo” en la página 25
Conceptos relacionados:
v “Objetivo de IBM OLE DB Provider para DB2” en la página 391
v “Habilitación automática de servicios OLE DB por parte de IBM OLE DB
Provider” en la página 396
Consulta relacionada:
v “Soporte de IBM OLE DB Provider de interfaces y componentes de OLE
DB” en la página 403
v “Soporte de IBM OLE DB de propiedades de OLE DB” en la página 406
Activadores de DB2
Conceptos relacionados:
v “Activadores en el desarrollo de aplicaciones” en el manual Guía de
desarrollo de aplicaciones: Programación de aplicaciones de servidor
v “Directrices para la creación de activadores” en el manual Guía de desarrollo
de aplicaciones: Programación de aplicaciones de servidor
DB2 proporciona una base de datos de ejemplo, que necesitará para ejecutar
los programas de ejemplo suministrados.
Tareas relacionadas:
v “Configuración del entorno de desarrollo de aplicaciones” en el manual
Guía de desarrollo de aplicaciones: Creación y ejecución de aplicaciones
v “Configuración de la base de datos sample” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
Procedimiento:
Conceptos relacionados:
v “Requisitos previos para programación” en la página 32
v “Infraestructura de seudocódigo de aplicación” en la página 49
v “Recursos para crear prototipos de sentencias de SQL” en la página 50
v “Archivos de ejemplo” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Programas de ejemplo: estructura y diseño” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
Tareas relacionadas:
v “Creación de una sección de declaración de una aplicación autónoma” en la
página 34
v “Conexión de una aplicación con una base de datos” en la página 43
v “Codificación de transacciones” en la página 44
v “Finalización de una transacción con la sentencia COMMIT” en la página
45
v “Finalización de una transacción con la sentencia ROLLBACK” en la página
46
Procedimiento:
Conceptos relacionados:
v “Valores de SQLSTATE y SQLCODE en Java” en la página 335
Tareas relacionadas:
v “Declaración de variables que interactúan con el gestor de bases de datos”
en la página 34
v “Declaración de variables que representan objetos de SQL” en la página 35
v “Relación de variables del lenguaje principal con una sentencia de SQL” en
la página 39
v “Declaración de variables del lenguaje principal con el Generador de
declaraciones db2dclgn” en la página 38
v “Declaración de la SQLCA para el manejo de errores” en la página 40
Declaración de variables que interactúan con el gestor de bases de datos
Todas las variables que interactúan con el gestor de bases de datos se deben
declarar en la sección de declaración de SQL.
Procedimiento:
Los atributos de cada variable del lenguaje principal dependen del modo en
que se utiliza la variable en la sentencia de SQL. Por ejemplo, las variables
que reciben datos de tablas de DB2 o que almacenan datos en las mismas
deben tener atributos de tipo de datos y longitud compatibles con la columna
a la que se accede. Para determinar el tipo de datos de cada variable, debe
estar familiarizado con los tipos de datos de DB2.
Consulta relacionada:
v “Tipos de datos SQL soportados en C y C++” en la página 218
v “Tipos de datos de SQL soportados en COBOL” en la página 254
v “Tipos de datos SQL soportados en FORTRAN” en la página 276
v “Tipos de datos SQL soportados en Java” en la página 291
v “Tipos de datos SQL soportados en REXX” en la página 381
Declaración de variables que representan objetos de SQL
Procedimiento:
Cuando codifique la variable, recuerde que los nombres de tablas, alias, vistas
y correlaciones tienen una longitud máxima de 128 bytes. Los nombres de
Sin embargo, si migra la base de datos a una versión de DB2 que acepta
nombres de esquema con una longitud máxima de 30 bytes, la aplicación no
puede diferenciar entre los nombres de esquema LONGSCHEMA1 y LONGSCHEMA2.
El gestor de bases de datos trunca los nombres de esquema a su límite de 8
bytes, LONGSCHE, y cualquier sentencia de la aplicación que dependa de
diferenciar los nombres de esquema fallará. Para aumentar la longevidad de la
aplicación, declare la variable de nombre de esquema con una longitud de 128
bytes del siguiente modo:
char[129] schema_name; /* alberga nombre de esquema delimitado por nulos hasta 128 bytes
válido para DB2 Versión 7 y siguientes */
Conceptos relacionados:
v “Variables del lenguaje principal en C y C++” en la página 183
v “Sintaxis de las variables del lenguaje principal de tipo carácter fijas y
terminadas en nulo en C y C++” en la página 189
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en C y C++” en
la página 187
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
variable en C o C++” en la página 190
v “Sintaxis de la declaración gráfica de formatos gráficos de un solo gráfico y
terminados en nulo en C y C++” en la página 192
v “Sintaxis para la declaración gráfica del formato estructurado
VARGRAPHIC en C o C++” en la página 194
v “Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
C o C++” en la página 195
v “Sintaxis de las variables del lenguaje principal de localizador de objeto
grande (LOB) en C o C++” en la página 198
v “Sintaxis de declaraciones de variables del lenguaje principal de referencia
de archivos en C o C++” en la página 199
v “Sintaxis de las variables numéricas del lenguaje principal en COBOL” en
la página 242
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
fija en COBOL” en la página 243
v “Sintaxis de las variables gráficas del lenguaje principal de longitud fija en
COBOL” en la página 245
v “Sintaxis de las variables del lenguaje principal LOB en COBOL” en la
página 246
v “Sintaxis de las variables del lenguaje principal de localizador de LOB en
COBOL” en la página 248
v “Sintaxis de las variables del lenguaje principal de referencia de archivos en
COBOL” en la página 248
v “Sintaxis de las variables numéricas del lenguaje principal en FORTRAN”
en la página 271
v “Sintaxis de las variables de tipo carácter del lenguaje principal en
FORTRAN” en la página 271
v “Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
FORTRAN” en la página 273
v “Sintaxis de las variables del lenguaje principal de localizador de objeto
grande (LOB) en FORTRAN” en la página 274
Procedimiento:
Por ejemplo, para generar las declaraciones para la tabla STAFF en la base de
datos SAMPLE en C en el archivo de salida staff.h, emita el siguiente
mandato:
db2dclgn -d sample -t staff -l C
Consulta relacionada:
v “db2dclgn - Mandato Generador de declaraciones” en el manual Consulta de
mandatos
Puede utilizar variables del lenguaje principal para recibir datos del gestor de
bases de datos o para transferir datos al mismo desde el programa de sistema
principal. Las variables del lenguaje principal que reciben datos del gestor de
bases de datos son variables del lenguaje principal de salida, mientras que las que
transfieren datos al mismo desde el programa de sistema principal son
variables del lenguaje principal de entrada.
Procedimiento:
Para definir la variable del lenguaje principal para utilizarla con una columna:
1. Averigüe el tipo de datos SQL correspondiente a dicha columna. Para ello,
consulte el catálogo del sistema, que es un conjunto de vistas que
contienen información sobre todas las tablas creadas en la base de datos.
2. Codifique las declaraciones adecuadas según el lenguaje principal.
A cada columna de una tabla se asigna un tipo de datos en la definición
CREATE TABLE. Debe relacionar este tipo de datos con el tipo de datos de
lenguaje principal. Por ejemplo, el tipo de datos INTEGER es un entero
con signo de 32 bits. Esto equivale a las siguientes entradas de descripción
de datos en cada uno de los lenguajes principales, respectivamente:
C/C++:
sqlint32 variable_name;
Java: int variable_name;
COBOL:
01 variable-name PICTURE S9(9) COMPUTATIONAL-5.
Conceptos relacionados:
v “Vistas de catálogo” en el manual Consulta de SQL, Volumen 1
Tareas relacionadas:
v “Declaración de variables que interactúan con el gestor de bases de datos”
en la página 34
v “Declaración de variables del lenguaje principal con el Generador de
declaraciones db2dclgn” en la página 38
v “Creación de una sección de declaración de una aplicación autónoma” en la
página 34
Consulta relacionada:
v “Tipos de datos SQL soportados en C y C++” en la página 218
v “Tipos de datos de SQL soportados en COBOL” en la página 254
v “Tipos de datos SQL soportados en FORTRAN” en la página 276
v “Tipos de datos SQL soportados en Java” en la página 291
v “Tipos de datos SQL soportados en REXX” en la página 381
Declaración de la SQLCA para el manejo de errores
Procedimiento:
Conceptos relacionados:
v “Definición de FIPS 127-2 e ISO/ANS SQL92” en la página 52
v “Manejo de errores utilizando la sentencia WHENEVER” en la página 41
v “Variables SQLSTATE y SQLCODE en C y C++” en la página 224
v “Variables SQLSTATE y SQLCODE en COBOL” en la página 257
v “Variables SQLSTATE y SQLCODE en FORTRAN” en la página 279
v “Valores de SQLSTATE y SQLCODE en Java” en la página 335
v “Variables SQLSTATE y SQLCODE en Perl” en la página 366
Tareas relacionadas:
v “Creación de una sección de declaración de una aplicación autónoma” en la
página 34
Manejo de errores utilizando la sentencia WHENEVER
Procedimiento:
Tareas relacionadas:
v “Creación de una sección de declaración de una aplicación autónoma” en la
página 34
Conexión de una aplicación con una base de datos
El programa debe establecer una conexión con la base de datos de destino
para que pueda ejecutar las sentencias de SQL ejecutables. Esta conexión
identifica el ID de autorización del usuario que está ejecutando el programa y
el nombre del servidor de base de datos en el que se ejecuta el programa.
Generalmente, el proceso de la aplicación sólo puede conectarse a un servidor
de base de datos cada vez. Este servidor se denomina el servidor actual. Sin
embargo, la aplicación puede conectarse a varios servidores de bases de datos
dentro de un entorno de actualización múltiple. En este caso, sólo un servidor
puede ser el servidor actual.
Restricciones:
Procedimiento:
Conceptos relacionados:
v “Actualización múltiple” en la página 461
Consulta relacionada:
v “CONNECT (Tipo 1) sentencia” en el manual Consulta de SQL, Volumen 2
v “CONNECT (Tipo 2) sentencia” en el manual Consulta de SQL, Volumen 2
Codificación de transacciones
Requisitos previos:
Procedimiento:
Tareas relacionadas:
v “Finalización de una transacción con la sentencia COMMIT” en la página
45
v “Finalización de una transacción con la sentencia ROLLBACK” en la página
46
Finalización de una transacción con la sentencia COMMIT
Procedimiento:
Conceptos relacionados:
v “Finalización implícita de una transacción en una aplicación autónoma” en
la página 48
v “Códigos de retorno” en la página 134
v “Información de error en los campos SQLCODE, SQLSTATE y SQLWARN”
en la página 134
Tareas relacionadas:
v “Finalización de un programa de aplicación” en la página 48
Consulta relacionada:
v “COMMIT sentencia” en el manual Consulta de SQL, Volumen 2
Finalización de una transacción con la sentencia ROLLBACK
Conceptos relacionados:
v “Finalización implícita de una transacción en una aplicación autónoma” en
la página 48
v “Unidad de trabajo remota” en la página 461
v “Actualización múltiple” en la página 461
Consulta relacionada:
v “CONNECT (Tipo 1) sentencia” en el manual Consulta de SQL, Volumen 2
v “CONNECT (Tipo 2) sentencia” en el manual Consulta de SQL, Volumen 2
v “WHENEVER sentencia” en el manual Consulta de SQL, Volumen 2
Procedimiento:
Conceptos relacionados:
v “Finalización implícita de una transacción en una aplicación autónoma” en
la página 48
Consulta relacionada:
v “CONNECT (Tipo 1) sentencia” en el manual Consulta de SQL, Volumen 2
v “CONNECT (Tipo 2) sentencia” en el manual Consulta de SQL, Volumen 2
Finalización implícita de una transacción en una aplicación autónoma
Conceptos relacionados:
v “Objetivo del acceso a base de datos de varias hebras” en la página 227
Tareas relacionadas:
v “Finalización de un programa de aplicación” en la página 48
Consulta relacionada:
v “COMMIT sentencia” en el manual Consulta de SQL, Volumen 2
v “ROLLBACK sentencia” en el manual Consulta de SQL, Volumen 2
Infraestructura de seudocódigo de aplicación
(lógica de programa)
Tareas relacionadas:
v “Programación de una aplicación autónoma” en la página 33
Recursos para crear prototipos de sentencias de SQL
Conceptos relacionados:
v “Vistas de catálogo” en el manual Consulta de SQL, Volumen 1
v “Catalog statistics tables” en el manual Administration Guide: Performance
v “Catalog statistics for modeling and what-if planning” en el manual
Administration Guide: Performance
v “General rules for updating catalog statistics manually” en el manual
Administration Guide: Performance
v “SQL explain facility” en el manual Administration Guide: Performance
v “Herramientas de DB2 Universal Database para desarrollar aplicaciones” en
la página 5
Consulta relacionada:
v Apéndice A, “Sentencias de SQL soportadas” en la página 521
La aplicación puede utilizar API para acceder a las funciones del gestor de
bases de datos que no están disponibles utilizando sentencias de SQL.
Conceptos relacionados:
v “Consideraciones sobre autorización para API” en la página 63
v “Programas de ejemplo: estructura y diseño” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
Definición de FIPS 127-2 e ISO/ANS SQL92
Conceptos relacionados:
v “Control de valores de datos mediante tipos de datos” en la página 53
v “Control de valores de datos mediante restricciones exclusivas” en la
página 53
v “Control de valores de datos mediante restricciones de comprobación de
tabla” en la página 54
v “Control de valores de datos mediante restricciones de integridad
referencial” en la página 54
v “Control de valores de datos mediante vistas con la opción Check” en la
página 55
v “Control de valores de datos mediante lógica de aplicación y tipos de
variables de programa” en la página 55
Control de valores de datos mediante tipos de datos
Conceptos relacionados:
v “Tipos diferenciados definidos por el usuario” en el manual Guía de
desarrollo de aplicaciones: Programación de aplicaciones de servidor
Control de valores de datos mediante restricciones exclusivas
Tareas relacionadas:
v “Defining a unique constraint” en el manual Administration Guide:
Implementation
v “Adding a unique constraint” en el manual Administration Guide:
Implementation
Control de valores de datos mediante restricciones de comprobación de
tabla
Si la norma se aplica a todas las aplicaciones que utilizan los datos, utilice una
restricción de comprobación de tabla para aplicar la restricción sobre los datos
permitidos en la tabla. Las restricciones de comprobación de tabla hacen que
la restricción se aplique de forma general y sea más fácil de mantener.
Tareas relacionadas:
v “Defining a table check constraint” en el manual Administration Guide:
Implementation
v “Adding a table check constraint” en el manual Administration Guide:
Implementation
Control de valores de datos mediante restricciones de integridad
referencial
Consulta relacionada:
v “CREATE VIEW sentencia” en el manual Consulta de SQL, Volumen 2
Control de valores de datos mediante lógica de aplicación y tipos de
variables de programa
Por ejemplo, es posible que se tengan que procesar errores en los datos de
entrada en el orden en que se entran, pero no se puede garantizar el orden de
las operaciones dentro de la base de datos.
Conceptos relacionados:
v “Control de valores de datos mediante vistas con la opción Check” en la
página 55
Conceptos relacionados:
v “Control de relaciones de datos mediante restricciones de integridad
referencial” en la página 56
v “Control de relaciones de datos mediante activadores” en la página 57
v “Control de relaciones de datos mediante activadores anteriores” en la
página 57
v “Control de relaciones de datos mediante activadores posteriores” en la
página 58
v “Control de relaciones de datos mediante lógica de aplicación” en la página
58
Control de relaciones de datos mediante restricciones de integridad
referencial
Las restricciones RI hacen cumplir las normas sobre los datos en una o más
tablas. Si las normas se aplican para todas las aplicaciones que utilizan los
datos, las restricciones RI centralizan las normas en la base de datos. Esto
hace que las normas se apliquen de forma general y sean más fáciles de
mantener.
Conceptos relacionados:
v “Restricciones” en el manual Consulta de SQL, Volumen 1
Tareas relacionadas:
v “Defining referential constraints” en el manual Administration Guide:
Implementation
Consulta relacionada:
v “ALTER TABLE sentencia” en el manual Consulta de SQL, Volumen 2
Conceptos relacionados:
v “Control de relaciones de datos mediante activadores anteriores” en la
página 57
v “Control de relaciones de datos mediante activadores posteriores” en la
página 58
v “Activadores de DB2” en la página 29
Tareas relacionadas:
v “Creating a trigger” en el manual Administration Guide: Implementation
v “Creación de activadores” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
Consulta relacionada:
v “CREATE TRIGGER sentencia” en el manual Consulta de SQL, Volumen 2
Control de relaciones de datos mediante activadores anteriores
Conceptos relacionados:
v “Control de relaciones de datos mediante activadores posteriores” en la
página 58
v “Activadores de DB2” en la página 29
Tareas relacionadas:
v “Creating a trigger” en el manual Administration Guide: Implementation
Consulta relacionada:
v “CREATE TRIGGER sentencia” en el manual Consulta de SQL, Volumen 2
Control de relaciones de datos mediante activadores posteriores
Conceptos relacionados:
v “Control de relaciones de datos mediante activadores anteriores” en la
página 57
v “Activadores de DB2” en la página 29
Tareas relacionadas:
v “Creating a trigger” en el manual Administration Guide: Implementation
v “Creación de activadores” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
Consulta relacionada:
v “CREATE TRIGGER sentencia” en el manual Consulta de SQL, Volumen 2
Control de relaciones de datos mediante lógica de aplicación
Las UDF resultan útiles para tareas como transformar valores de datos,
realizar cálculos sobre uno o más valores de datos o extraer partes de un
valor (como extraer partes de un objeto grande).
v activadores
Se pueden utilizar activadores para invocar funciones definidas por el
usuario. Esto resulta útil si desea que siempre se lleve a cabo una
determinada operación no SQL cuando se produzcan determinadas
sentencias o se cambien valores de datos. Ejemplos tales son operaciones
como emitir un mensaje de correo electrónico bajo circunstancias específicas
o grabar información de tipo de alerta en un archivo.
Conceptos relacionados:
Tareas relacionadas:
v “Creating a trigger” en el manual Administration Guide: Implementation
v “Creación de activadores” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
Consulta relacionada:
v “CREATE TRIGGER sentencia” en el manual Consulta de SQL, Volumen 2
Una autorización permite a un usuario o grupo llevar a cabo una tarea general
como conectarse a una base de datos, crear tablas o administrar un sistema.
Un privilegio otorga a un usuario o grupo el derecho a acceder a un objeto de
base de datos específico de una forma especificada. DB2 utiliza un grupo de
privilegios para proteger la información que almacena en el mismo.
Supongamos que tenemos dos usuarios, PAYROLL y BUDGET, que tienen que
realizar consultas contra la tabla STAFF. PAYROLL es responsable de pagar a
los empleados de la empresa, de modo que tiene que emitir varias sentencias
SELECT al emitir cheques. PAYROLL tiene que poder acceder al salario de
cada empleado. BUDGET es responsable de determinar la cantidad de dinero
necesaria para pagar los salarios. Sin embargo, BUDGET no debería poder ver
el salario de ningún empleado en particular.
Por otro lado, BUDGET no debería tener acceso al salario de cada empleado.
Esto significa que no debe otorgar el privilegio SELECT sobre la tabla STAFF
a BUDGET. Puesto que BUDGET necesita acceso al total de todos los salarios
de la tabla STAFF, podría crear una aplicación de SQL estático para ejecutar
una sentencia SELECT SUM(SALARY) FROM STAFF, vincular la aplicación y
otorgar el privilegio EXECUTE sobre el paquete de la aplicación a BUDGET.
Esto permite a BUDGET obtener la información necesaria sin exponer la
información que BUDGET no debería ver.
Conceptos relacionados:
v “Consideraciones sobre autorización para SQL dinámico” en la página 61
v “Consideraciones sobre autorización para SQL estático” en la página 63
v “Consideraciones sobre autorización para API” en la página 63
v “Authorization” en el manual Administration Guide: Planning
Consideraciones sobre autorización para SQL dinámico
Conceptos relacionados:
v “Consideraciones sobre autorización para SQL incorporado” en la página 60
v “Consideraciones sobre autorización para SQL estático” en la página 63
v “Consideraciones sobre autorización para API” en la página 63
v “Efectos de DYNAMICRULES en SQL dinámico” en la página 147
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
Para utilizar SQL estático, el usuario que ejecuta la aplicación sólo necesita el
privilegio EXECUTE sobre el paquete. No se necesitan privilegios para cada
una de las sentencias que forman el paquete. El privilegio EXECUTE se puede
otorgar al ID de autorización del usuario, a cualquier grupo del que el usuario
sea miembro o a PUBLIC.
Conceptos relacionados:
v “Consideraciones sobre autorización para SQL incorporado” en la página 60
v “Consideraciones sobre autorización para SQL dinámico” en la página 61
v “Consideraciones sobre autorización para API” en la página 63
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
Consideraciones sobre autorización para API
Conceptos relacionados:
v “Consideraciones sobre autorización para SQL incorporado” en la página 60
v “Consideraciones sobre autorización para SQL dinámico” en la página 61
v “Consideraciones sobre autorización para SQL estático” en la página 63
Prueba de la aplicación
Las secciones siguientes describen cómo configurar un entorno de prueba y
cómo depurar y optimizar la aplicación.
Configuración del entorno de prueba para una aplicación
Las secciones siguientes describen cómo configurar el entorno de prueba para
la aplicación.
Procedimiento:
Consulta relacionada:
v “sqlecrea - Create Database” en el manual Administrative API Reference
v “Mandato CREATE DATABASE” en el manual Consulta de mandatos
Para diseñar las tablas de prueba y vistas necesarias, primero analice los
requisitos de datos de la aplicación. Para crear una tabla, necesita la
autorización CREATETAB y el privilegio CREATEIN sobre el esquema.
Consulte la sentencia CREATE TABLE para ver autorizaciones alternativas.
Procedimiento:
Una vez finalizado el procedimiento, debe crear los temas relacionados para
esta tarea.
Tareas relacionadas:
v “Generación de datos de prueba” en la página 66
Consulta relacionada:
v “CREATE TABLE sentencia” en el manual Consulta de SQL, Volumen 2
Procedimiento:
Utilice cualquiera de los siguientes métodos para insertar datos en una tabla:
v INSERT...VALUES (una sentencia de SQL) coloca una o más filas en una
tabla cada vez que se emite el mandato.
Las siguientes sentencias de SQL muestran una técnica que puede utilizar
para llenar tablas con datos de prueba generados de forma aleatoria.
Supongamos que la tabla EMP contiene cuatro columnas, ENO (número de
empleado), LASTNAME (apellido), HIREDATE (fecha de contratación) y
SALARY (salario del empleado) tal como se muestra en la siguiente sentencia
CREATE TABLE:
CREATE TABLE EMP (ENO INTEGER, LASTNAME VARCHAR(30),
HIREDATE DATE, SALARY INTEGER);
Supongamos que desea llenar esta tabla con números de empleado, desde 1 a
un número, por ejemplo 100, con datos aleatorios para el resto de las
columnas. Puede hacerlo utilizando la siguiente sentencia de SQL:
INSERT INTO EMP
-- generar 100 registros
WITH DT(ENO) AS (VALUES(1) UNION ALL
SELECT ENO+1 FROM DT WHERE ENO < 100 ) 1
Conceptos relacionados:
v “Import Overview” en el manual Data Movement Utilities Guide and Reference
v “Load Overview” en el manual Data Movement Utilities Guide and Reference
v “Métodos y funciones definidas por el usuario de DB2” en la página 24
Tareas relacionadas:
v “Depuración y optimización de una aplicación” en la página 68
Consulta relacionada:
v “Función escalar INSERT” en el manual Consulta de SQL, Volumen 1
v “Mandato RESTORE DATABASE” en el manual Consulta de mandatos
Depuración y optimización de una aplicación
Puede depurar y optimizar la aplicación mientras la desarrolla.
Procedimiento:
Conceptos relacionados:
v “Catalog statistics for modeling and what-if planning” en el manual
Administration Guide: Performance
v “Recursos para crear prototipos de sentencias de SQL” en la página 50
v “The database system-monitor information” en el manual Administration
Guide: Performance
v “Requisitos del archivo fuente para aplicaciones de SQL incorporado” en la
página 86
Tareas relacionadas:
v “Activación de la macro automática de proyectos de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 73
v “Activación de la macro automática de herramientas de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 74
Consulta relacionada:
v “Terminología de la macro automática de proyectos de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 72
Conceptos relacionados:
v “La macro automática de proyectos de IBM DB2 Universal Database para
Microsoft Visual C++” en la página 69
Tareas relacionadas:
v “Activación de la macro automática de proyectos de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 73
v “Activación de la macro automática de herramientas de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 74
Procedimiento:
1. Inicie y detenga Visual C++ al menos una vez con su ID de conexión
actual. La primera vez que se ejecuta Visual C++, se crea un perfil para el
ID de usuario, y esto es lo que se actualiza mediante el mandato db2vccmd.
Si no lo ha iniciado una vez e intenta ejecutar db2vccmd, se puede
encontrar errores como los siguientes:
"Registering DB2 Project add-in ...Failed! (rc = 2)"
2. Registre la macro automática, si aún no la ha hecho, especificando lo
siguiente en la línea de mandatos:
db2vccmd register
3. Seleccione Herramientas —> Personalizar. Se abrirá el cuaderno
Personalizar.
4. Seleccione la pestaña Macros automáticas y archivos de macro. Se abrirá
la página Macros automáticas y archivos de macro.
5. Seleccione el recuadro Macro automática de proyectos de IBM DB2.
6. Pulse Aceptar. Se creará una barra de herramientas flotante.
Conceptos relacionados:
v “La macro automática de proyectos de IBM DB2 Universal Database para
Microsoft Visual C++” en la página 69
Tareas relacionadas:
v “Activación de la macro automática de herramientas de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 74
Consulta relacionada:
v “Terminología de la macro automática de proyectos de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 72
Procedimiento:
Conceptos relacionados:
v “La macro automática de proyectos de IBM DB2 Universal Database para
Microsoft Visual C++” en la página 69
Tareas relacionadas:
v “Activación de la macro automática de proyectos de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 73
Consulta relacionada:
v “Terminología de la macro automática de proyectos de IBM DB2 Universal
Database para Microsoft Visual C++” en la página 72
Procedimiento:
Utilice los ejemplos de la tabla siguiente como guía para ver cómo se
incorporan sentencias de SQL en una aplicación de lenguaje principal. En el
ejemplo, la aplicación comprueba el campo SQLCODE de la estructura SQLCA
para determinar si la actualización ha resultado satisfactoria.
Tabla 2. Incorporación de sentencias de SQL en un lenguaje principal
Lenguaje Código fuente de ejemplo
C/C++ EXEC SQL UPDATE staff SET job = ’Clerk’ WHERE job = ’Mgr’;
if ( SQLCODE < 0 )
printf( "Update Error: SQLCODE = %ld \n", SQLCODE );
Java (SQLj) try {
#sql { UPDATE staff SET job = ’Clerk’ WHERE job = ’Mgr’ };
}
catch (SQLException e) {
println( "Update Error: SQLCODE = " + e.getErrorCode() );
}
Las sentencias de SQL que se colocan en una aplicación no son específicas del
lenguaje principal. El gestor de bases de datos proporciona una forma de
convertir la sintaxis de SQL para que la procese el lenguaje de sistema
principal:
v Para los lenguajes C, C++, COBOL o FORTRAN, esta conversión la maneja
el precompilador de DB2. El precompilador de DB2 se invoca utilizando el
mandato PREP. El precompilador convierte las sentencias de SQL
incorporado directamente en llamadas a API de servicios de tiempo de
ejecución de DB2.
v Para el lenguaje Java, el conversor SQLj convierte cláusulas SQLj en
sentencias JDBC. El conversor SQLj se invoca con el mandato sqlj.
Conceptos relacionados:
v “SQL incorporado en aplicaciones REXX” en la página 372
v “Sentencias de SQL incorporado en C y C++” en la página 182
v “Sentencias de SQL incorporado en COBOL” en la página 237
v “Sentencias de SQL incorporado en FORTRAN” en la página 267
v “Sentencias de SQL incorporado en Java” en la página 306
Nota: no todas las plataformas dan soporte a todos los lenguajes principales.
Para este tema, daremos por supuesto que ya ha escrito el código fuente.
La figura siguiente muestra el orden de estos pasos, junto con los distintos
módulos de una típica aplicación de DB2 compilada.
PACKAGE BINDFILE
Precompilador
2 Crear un Crear un archivo
(db2 PREP)
paquete de vinculación
Archivos fuente
Archivos fuente
sin
modificados
sentencias SQL
Compilador de lenguaje de
3
sistema principal
Archivos
Bibliotecas
de objetos
Enlazador de lenguaje
4
de sistema principal
Programa Archivo
6
ejecutable de vinculación
Vinculador
5
(db2 BIND)
Conceptos relacionados:
v “Precompilación de archivos fuente que contienen SQL incorporado” en la
página 84
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
PACKAGE BINDFILE
Precompilador
2 Crear un Crear un archivo
(db2 PREP)
paquete de vinculación
Archivos fuente
Archivos fuente
sin
modificados
sentencias SQL
Compilador de lenguaje de
3
sistema principal
Archivos
Bibliotecas
de objetos
Enlazador de lenguaje
4
de sistema principal
Programa Archivo
6
ejecutable de vinculación
Vinculador
5
(db2 BIND)
Conceptos relacionados:
v “Precompilación de archivos fuente que contienen SQL incorporado” en la
página 84
v “Requisitos del archivo fuente para aplicaciones de SQL incorporado” en la
página 86
v “Compilación y enlace de archivos fuente que contienen SQL incorporado”
en la página 88
v “Creación de paquetes mediante el mandato BIND” en la página 89
v “Creación de versiones de paquetes” en la página 90
v “Efecto de registros especiales en SQL dinámico vinculado” en la página 91
v “Resolución de nombres de tabla no calificados” en la página 92
v “Consideraciones adicionales cuando se vincula” en la página 93
v “Ventajas de la vinculación diferida” en la página 94
v “Relaciones entre aplicación, archivo de vinculación y paquete” en la
página 95
v “Indicaciones horarias generadas por el precompilador” en la página 96
v “Revinculación de paquetes” en la página 98
v “Opciones del conversor SQLj” en la página 312
Consulta relacionada:
v “db2bfd - Mandato Herramienta de descripción de archivo de vinculación”
en el manual Consulta de mandatos
Precompilación de archivos fuente que contienen SQL incorporado
Conceptos relacionados:
v “Creación de versiones de paquetes” en la página 90
Consulta relacionada:
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Requisitos del archivo fuente para aplicaciones de SQL incorporado
Conceptos relacionados:
v “Ventajas de la vinculación diferida” en la página 94
Consulta relacionada:
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Compilación y enlace de archivos fuente que contienen SQL incorporado
Compile los archivos fuente modificados y los archivos fuente adicionales que
no contienen sentencias de SQL utilizando el compilador de lenguaje principal
adecuado. El compilador de lenguaje convierte cada archivo fuente
modificado en un módulo de objeto.
Conceptos relacionados:
v “Procedimientos almacenados de DB2” en la página 23
Tareas relacionadas:
v “Creación y ejecución de aplicaciones REXX” en la página 383
v “Creación de applets JDBC” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Creación de aplicaciones JDBC” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
v “Creación de applets SQLJ” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Creación de aplicaciones SQLJ” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
v “Creación de aplicaciones C en AIX” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
v “Creación de aplicaciones C++ en AIX” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
v “Creación de aplicaciones IBM COBOL en AIX” en el manual Guía de
desarrollo de aplicaciones: Creación y ejecución de aplicaciones
v “Creación de aplicaciones Micro Focus COBOL en AIX” en el manual Guía
de desarrollo de aplicaciones: Creación y ejecución de aplicaciones
Creación de paquetes mediante el mandato BIND
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Creación de versiones de paquetes
Si tiene que crear varias versiones de una aplicación, puede utilizar la opción
VERSION del mandato PRECOMPILE. Esta opción permite la coexistencia de
varias versiones del mismo nombre de paquete (es decir, el nombre del
paquete y el nombre del creador). Por ejemplo, supongamos que tiene una
aplicación denominada foo que se compila desde foo.sqc. Precompilaría y
vincularía el paquete foo a la base de datos y distribuiría la aplicación a los
usuarios. Luego los usuarios podrían ejecutar la aplicación. Para realizar
cambios en la aplicación, actualizaría foo.sqc y luego repetiría el proceso de
recompilación, vinculación y envío de la aplicación a los usuarios. Si no se
especifica la opción VERSION para la primera o segunda precompilación de
foo.sqc, el primer paquete se sustituye por el segundo. Cualquier usuario que
intente ejecutar la versión antigua de la aplicación recibirá un error SQLCODE
-818, que indica un error de falta de coincidencia de indicación horaria.
Ahora se puede ejecutar esta primera versión del programa. Cuando cree la
nueva versión de foo, precompílela con el mandato:
DB2 PREP FOO.SQC VERSION V1.2
Conceptos relacionados:
v “Indicaciones horarias generadas por el precompilador” en la página 96
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Efecto de registros especiales en SQL dinámico vinculado
Consulta relacionada:
v “Registro especial CURRENT EXPLAIN MODE” en el manual Consulta de
SQL, Volumen 1
v “Registro especial CURRENT EXPLAIN SNAPSHOT” en el manual Consulta
de SQL, Volumen 1
v “Registro especial CURRENT PATH” en el manual Consulta de SQL,
Volumen 1
v “Registro especial CURRENT QUERY OPTIMIZATION” en el manual
Consulta de SQL, Volumen 1
Resolución de nombres de tabla no calificados
Consulta relacionada:
v “SET CURRENT PACKAGESET sentencia” en el manual Consulta de SQL,
Volumen 2
v “Mandato BIND” en el manual Consulta de mandatos
Conceptos relacionados:
v “Binding utilities to the database” en el manual Administration Guide:
Implementation
v “Conversión de caracteres entre distintas páginas de códigos” en la página
436
v “Sustitución de caracteres durante conversiones de páginas de códigos” en
la página 438
v “Factor de expansión de conversión de página de códigos” en la página 440
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
Ventajas de la vinculación diferida
Consulta relacionada:
v “sqlabndx - Bind” en el manual Administrative API Reference
Consulta relacionada:
v “db2bfd - Mandato Herramienta de descripción de archivo de vinculación”
en el manual Consulta de mandatos
Relaciones entre aplicación, archivo de vinculación y paquete
Nota: no dé por supuesto que una versión estática de una sentencia de SQL
se ejecuta automáticamente más rápido que la misma sentencia
procesada de forma dinámica. En algunos casos, SQL estático es más
rápido debido al proceso general necesario para preparar la sentencia
Conceptos relacionados:
v “SQL dinámico frente a SQL estático” en la página 141
Indicaciones horarias generadas por el precompilador
Recuerde que cuando vincula una aplicación a una base de datos, los ocho
primeros caracteres del nombre de la aplicación se utilizan como el nombre
del paquete a no ser que altere temporalmente el valor por omisión utilizando la
opción PACKAGE USING en el mandato PREP. Asimismo, el ID de versión será
″″ (una serie vacía), a no ser que se especifique mediante la opción VERSION
del mandato PREP. Esto significa que si precompila y vincula dos programas
utilizando el mismo nombre sin cambiar el ID de versión, el segundo paquete
sustituirá al paquete del primero. Cuando ejecute el primer programa,
obtendrá un error de indicación horaria o de paquete no encontrado porque la
indicación horaria correspondiente al archivo fuente modificado ya no
coincide con la del paquete ene la base de datos. El error de paquete no
Conceptos relacionados:
v “Creación de paquetes mediante el mandato BIND” en la página 89
Conceptos relacionados:
v “Statement dependencies when changing objects” en el manual
Administration Guide: Implementation
Las sentencias de SQL estático son permanentes, lo que significa que las
sentencias duran mientras exista el paquete.
Consulta relacionada:
v “EXECUTE sentencia” en el manual Consulta de SQL, Volumen 2
Conceptos relacionados:
v “Recuperación de datos en programas de SQL estático” en la página 105
v “Recuperación de mensajes de error en una aplicación” en la página 137
Tareas relacionadas:
v “Declaración de variables del lenguaje principal en programas de SQL
estático” en la página 108
v “Selección de varias filas utilizando un cursor” en la página 118
v “Configuración de la base de datos sample” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
Consulta relacionada:
Ejemplos relacionados:
v “dtlob.out -- HOW TO USE THE LOB DATA TYPE (C)”
v “tbinfo.out -- HOW TO GET INFORMATION AT THE TABLE LEVEL (C)”
v “tbread.out -- HOW TO READ TABLES (C)”
v “tbread.sqc -- How to read tables (C)”
v “dtlob.sqC -- How to use the LOB data type (C++)”
v “tbinfo.sqC -- How to get information at the table level (C++)”
v “tbread.out -- HOW TO READ TABLES (C++)”
v “tbread.sqC -- How to read tables (C++)”
v “static.sqb -- Get table data using static SQL statement (IBM COBOL)”
v “static.sqb -- Get table data using static SQL statement (MF COBOL)”
v “TbRead.out -- HOW TO READ TABLE DATA (JDBC)”
v “TbRead.sqlj -- How to read table data (SQLj)”
Después de escribir una sentencia select, codifique las sentencias de SQL que
definen el modo en que la información se pasará a la aplicación.
Puede entender el resultado de una sentencia select como una tabla que tiene
filas y columnas, parecida a una tabla de la base de datos. Si sólo se devuelve
una fila, puede distribuir los resultados directamente en variables del lenguaje
principal especificadas por la sentencia SELECT INTO.
Si se devuelve más de una fila, debe utilizar un cursor para captarlas de una
en una. Un cursor es una estructura de control con nombre que utiliza un
programa de aplicación para apuntar a una fila específica dentro de un
conjunto ordenado de filas.
Conceptos relacionados:
v “Variables del lenguaje principal en SQL estático” en la página 106
v “Ejemplo de un cursor en un programa de SQL estático” en la página 122
Las variables del lenguaje principal son variables a las que hacen referencia las
sentencias de SQL incorporado. Transmiten datos entre el gestor de bases de
datos y un programa de aplicación. Cuando utilice una variable lenguaje
principal en una sentencia de SQL, debe preceder su nombre con un signo de
dos puntos :). Cuando utilice una variable del lenguaje principal en una
sentencia de lenguaje principal, omita el signo de dos puntos.
Nota: los programas Java JDBC y SQLj no utilizan secciones declare. Las
variables del lenguaje principal en Java siguen la sintaxis normal de
declaración de variables Java.
foo2(){
.
.
.
y=x;
.
.
.
}
foo2(int x){
.
.
.
y=x;
.
.
.
}
Conceptos relacionados:
v “Variables del lenguaje principal en C y C++” en la página 183
v “Variables del lenguaje principal en COBOL” en la página 240
v “Variables del lenguaje principal en FORTRAN” en la página 269
v “Variables del lenguaje principal en Java” en la página 290
v “Variables del lenguaje principal en REXX” en la página 374
Tareas relacionadas:
v “Declaración de variables del lenguaje principal con el Generador de
declaraciones db2dclgn” en la página 38
v “Declaración de variables del lenguaje principal en programas de SQL
estático” en la página 108
v “Cómo hacer referencia a variables del lenguaje principal en programas de
SQL estático” en la página 110
Declaración de variables del lenguaje principal en programas de SQL
estático
Procedimiento:
Tareas relacionadas:
v “Declaración de variables del lenguaje principal con el Generador de
declaraciones db2dclgn” en la página 38
v “Cómo hacer referencia a variables del lenguaje principal en programas de
SQL estático” en la página 110
Procedimiento:
Tareas relacionadas:
v “Declaración de variables del lenguaje principal con el Generador de
declaraciones db2dclgn” en la página 38
v “Declaración de variables del lenguaje principal en programas de SQL
estático” en la página 108
Las aplicaciones escritas en lenguajes que no sean Java deben prepararse para
recibir valores nulos asociando una variable de indicador con cualquier variable
del lenguaje principal que pueda recibir un nulo. Las aplicaciones Java
comparan el valor de la variable del lenguaje principal con null de Java para
Procedimiento:
Tareas relacionadas:
v “Declaración de variables del lenguaje principal con el Generador de
declaraciones db2dclgn” en la página 38
v “Declaración de variables del lenguaje principal en programas de SQL
estático” en la página 108
v “Cómo hacer referencia a variables del lenguaje principal en programas de
SQL estático” en la página 110
Consulta relacionada:
v “Tipos de datos para variables de indicador en programas de SQL estático”
en la página 113
Tipos de datos para variables de indicador en programas de SQL estático
Para que los resultados de la consulta resulten más fáciles de leer en pantalla,
puede utilizar la siguiente sentencia SELECT:
Conceptos relacionados:
v “Consideraciones sobre la conversión de datos” en el manual Guía de
desarrollo de aplicaciones: Programación de aplicaciones de servidor
v “Conversión de caracteres entre distintas páginas de códigos” en la página
436
Consulta relacionada:
v “CREATE TABLE sentencia” en el manual Consulta de SQL, Volumen 2
v “Tipos de datos SQL soportados en C y C++” en la página 218
v “Tipos de datos de SQL soportados en COBOL” en la página 254
v “Tipos de datos SQL soportados en FORTRAN” en la página 276
v “Tipos de datos SQL soportados en Java” en la página 291
v “Tipos de datos SQL soportados en REXX” en la página 381
Ejemplo de variable de indicador en un programa de SQL estático
Conceptos relacionados:
v “Programa de SQL estático de ejemplo” en la página 103
Tareas relacionadas:
v “Inclusión de variables de indicador en programas de SQL estático” en la
página 110
Consulta relacionada:
v “Tipos de datos para variables de indicador en programas de SQL estático”
en la página 113
Ejemplos relacionados:
v “dtlob.out -- HOW TO USE THE LOB DATA TYPE (C)”
v “dtlob.sqc -- How to use the LOB data type (C)”
v “dtlob.out -- HOW TO USE THE LOB DATA TYPE (C++)”
v “dtlob.sqC -- How to use the LOB data type (C++)”
Para permitir que una aplicación recupere un conjunto de filas, SQL utiliza un
mecanismo denominado un cursor.
Procedimiento:
Conceptos relacionados:
v “Ejemplo de un cursor en un programa de SQL estático” en la página 122
Restricciones:
Procedimiento:
Conceptos relacionados:
v “Consideraciones sobre tipos de cursor y unidad de trabajo” en la página
120
Tareas relacionadas:
v “Selección de varias filas utilizando un cursor” en la página 118
Consulta relacionada:
Tareas relacionadas:
v “Selección de varias filas utilizando un cursor” en la página 118
v “Declaración y utilización de cursores en programas de SQL estático” en la
página 119
Ejemplo de un cursor en un programa de SQL estático
/* cerrar cursor */
EXEC SQL CLOSE c1;
v Java
El ejemplo TutRead muestra cómo leer datos de una tabla con una sencilla
sentencia select utilizando un cursor. Por ejemplo:
// declarar cursor
TutRead_Cursor cur2;
#sql cur2 = {SELECT deptnumb, deptname FROM org WHERE deptnumb < 40};
// captar cursor
#sql {FETCH :cur2 INTO :deptnumb, :deptname};
// cerrar cursor
cur2.close();
v COBOL
El ejemplo cursor muestra un ejemplo de cómo recuperar datos de una
tabla utilizando un cursor con una sentencia de SQL estático. Por ejemplo:
* Declarar un cursor
EXEC SQL DECLARE c1 CURSOR FOR
SELECT name, dept FROM staff
WHERE job=’Mgr’ END-EXEC.
* Abrir el cursor
EXEC SQL OPEN c1 END-EXEC.
* Captar filas de la tabla ’staff’
perform Fetch-Loop thru End-Fetch-Loop
until SQLCODE not equal 0.
* Cerrar el cursor
EXEC SQL CLOSE c1 END-EXEC.
move "CLOSE CURSOR" to errloc.
Conceptos relacionados:
v “Consideraciones sobre tipos de cursor y unidad de trabajo” en la página
120
v “Recuperación de mensajes de error en una aplicación” en la página 137
Tareas relacionadas:
v “Selección de varias filas utilizando un cursor” en la página 118
v “Declaración y utilización de cursores en programas de SQL estático” en la
página 119
Consulta relacionada:
v “Tipos de cursor” en la página 125
Procedimiento:
Conceptos relacionados:
v “Consultas” en el manual Consulta de SQL, Volumen 1
Consulta relacionada:
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Tipos de cursor
Tareas relacionadas:
v “Actualización y supresión de datos recuperados en programas de SQL
estático” en la página 124
Ejemplo de captación en un programa de SQL estático
El ejemplo tbmod es una versión más larga del ejemplo tut_mod y muestra
casi todos los casos posibles de modificación de datos de la tabla.
v Java (TutMod.sqlj)
El siguiente ejemplo procede del ejemplo TutMod. En este ejemplo se
efectúa una selección en una tabla utilizando un cursor, se abre el cursor, se
captan, se actualizan o se suprimen filas de la tabla y luego cierra el cursor.
#sql cur = {SELECT * FROM staff WHERE id >= 310};
#sql {FETCH :cur INTO :id, :name, :dept, :job, :years, :salary, :comm};
El ejemplo TbMod es una versión más larga del ejemplo TutMod y muestra
casi todos los casos posibles de modificación de datos de la tabla.
v COBOL (openftch.sqb)
El siguiente ejemplo procede del ejemplo openftch. En este ejemplo se
efectúa una selección en una tabla utilizando un cursor, se abre el cursor y
se captan filas de la tabla.
EXEC SQL DECLARE c1 CURSOR FOR
SELECT name, dept FROM staff
WHERE job=’Mgr’
Conceptos relacionados:
v “Recuperación de mensajes de error en una aplicación” en la página 137
Ejemplos relacionados:
v “openftch.sqb -- How to modify table data using cursor statically (IBM
COBOL)”
v “tbmod.sqc -- How to modify table data (C)”
v “tut_mod.out -- HOW TO MODIFY TABLE DATA (C)”
v “tut_mod.sqc -- How to modify table data (C)”
v “tbmod.sqC -- How to modify table data (C++)”
v “tut_mod.out -- HOW TO MODIFY TABLE DATA (C++)”
v “tut_mod.sqC -- How to modify table data (C++)”
v “TbMod.sqlj -- How to modify table data (SQLj)”
v “TutMod.out -- HOW TO MODIFY TABLE DATA (SQLJ)”
v “TutMod.sqlj -- Modify data in a table (SQLj)”
Procedimiento:
Conceptos relacionados:
v “Especificación JDBC” en la página 295
Tareas relacionadas:
v “Cómo conservar una copia de los datos” en la página 128
v “Recuperación de datos por segunda vez” en la página 129
Consulta relacionada:
v “SQLFetchScroll Function (CLI) - Fetch Rowset and Return Data for All
Bound Columns” en el manual CLI Guide and Reference, Volume 2
v “Cursor Positioning Rules for SQLFetchScroll() (CLI)” en el manual CLI
Guide and Reference, Volume 2
Cómo conservar una copia de los datos
En algunas situaciones, puede resultar útil mantener una copia de los datos
que capta la aplicación.
Procedimiento:
Para conservar una copia de los datos, la aplicación puede hacer lo siguiente:
v Guardar los datos captados en almacenamiento virtual.
v Grabar los datos en un archivo temporal (si los datos no caben en
almacenamiento virtual). Un efecto de este enfoque es que un usuario que
se desplace hacia atrás siempre ve exactamente los mismos datos que se
han captado, incluso si mientras tanto una transacción ha modificado los
datos de la base de datos.
v Utilizando un nivel de aislamiento de lectura repetida, los datos que
recupera de una transacción se pueden volver a recuperar cerrando y
abriendo un cursor. Otras aplicaciones no pueden actualizar los datos del
conjunto de resultados. Los niveles de aislamiento y el bloqueo pueden
afectar al modo en que los usuarios actualizan datos.
Conceptos relacionados:
v “Diferencias en el orden de filas entre la primera y la segunda tabla de
resultados” en la página 130
La técnica que utilice para recuperar datos por segunda vez dependerá del
orden en el que desee volver a ver los datos.
Procedimiento:
Puede recuperar datos por segunda vez mediante cualquiera de los métodos
siguientes:
v Recuperar datos desde el principio
Para volver a recuperar los datos desde el principio de la tabla de
resultados, cierre el cursor activo y vuélvalo a abrir. Esta acción coloca el
cursor al principio de la tabla de resultados. Pero, a no ser que la aplicación
retenga bloqueos en la tabla, es posible que otros la hayan modificado, de
modo que puede que la que era la primera fila de la tabla de resultados ya
no lo sea.
v Recuperar datos desde el medio
Para recuperar datos por segunda vez desde algún punto del medio de la
tabla de resultados, ejecute una segunda sentencia SELECT y declare un
segundo cursor en la sentencia. Por ejemplo, supongamos que la primera
sentencia SELECT era la siguiente:
SELECT * FROM DEPARTMENT
WHERE LOCATION = 'CALIFORNIA'
ORDER BY DEPTNO
Ahora, supongamos que desea volver a las filas que empiezan con DEPTNO =
'M95' y captar de forma secuencial desde dicho punto. Codifique lo
siguiente:
SELECT * FROM DEPARTMENT
WHERE LOCATION = 'CALIFORNIA'
AND DEPTNO >= 'M95'
ORDER BY DEPTNO
Para recuperar filas en orden inverso, puede resultar útil tener dos índices
en la columna DEPTNO, uno en orden ascendente y el otro en orden
descendente.
Conceptos relacionados:
v “Diferencias en el orden de filas entre la primera y la segunda tabla de
resultados” en la página 130
Diferencias en el orden de filas entre la primera y la segunda tabla de
resultados
Tareas relacionadas:
v “Recuperación de datos por segunda vez” en la página 129
Colocación de un cursor al final de una tabla
Si tiene que colocar el cursor al final de una tabla, puede utilizar una
sentencia de SQL para colocarlo.
Procedimiento:
Sin embargo, observe que, si hay varias filas con el mismo valor, el cursor se
coloca en la primera de ellas.
Actualización de datos recuperados previamente
Para actualizar datos recuperados previamente, puede hacer una de estas dos
cosas:
v Si tiene un segundo cursor en los datos que se tienen que actualizar y la
sentencia SELECT no utiliza ninguno de los elementos restringidos, puede
utilizar la sentencia UPDATE controlada por el cursor. Nombre el segundo
cursor en la cláusula WHERE CURRENT OF.
v En otros casos, utilice UPDATE con una cláusula WHERE que nombre
todos los valores de la fila o especifique la clave primaria de la tabla. Puede
ejecutar una sentencia varias veces con distintos valores de las variables.
Tareas relacionadas:
v “Actualización y supresión de datos recuperados en programas de SQL
estático” en la página 124
v “Desplazamiento por datos recuperados previamente” en la página 127
Ejemplo de inserción, actualización y supresión en un programa de SQL
estático
Conceptos relacionados:
v “Recuperación de mensajes de error en una aplicación” en la página 137
Ejemplos relacionados:
v “tbinfo.out -- HOW TO GET INFORMATION AT THE TABLE LEVEL
(C++)”
v “tbmod.out -- HOW TO MODIFY TABLE DATA (C++)”
v “tbmod.sqC -- How to modify table data (C++)”
v “tut_mod.out -- HOW TO MODIFY TABLE DATA (C++)”
v “tut_mod.sqC -- How to modify table data (C++)”
Información de diagnóstico
Las secciones siguientes describen la información de diagnóstico disponible
para un programa de SQL estático, como códigos de retorno, y cómo debe la
aplicación recuperar mensajes de error.
Códigos de retorno
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
Información de error en los campos SQLCODE, SQLSTATE y SQLWARN
Conceptos relacionados:
v “Variables SQLSTATE y SQLCODE en C y C++” en la página 224
v “Variables SQLSTATE y SQLCODE en COBOL” en la página 257
v “Variables SQLSTATE y SQLCODE en FORTRAN” en la página 279
v “Valores de SQLSTATE y SQLCODE en Java” en la página 335
v “Variables SQLSTATE y SQLCODE en Perl” en la página 366
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
Truncamiento de símbolos en la estructura SQLCA
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
Consideraciones sobre el manejador de excepciones, señales e
interrupciones
Conceptos relacionados:
v “Proceso de peticiones de interrupción” en la página 532
Consideraciones sobre rutinas de lista de salida
Conceptos relacionados:
v “Variables SQLSTATE y SQLCODE en C y C++” en la página 224
v “Variables SQLSTATE y SQLCODE en COBOL” en la página 257
v “Variables SQLSTATE y SQLCODE en FORTRAN” en la página 279
v “Valores de SQLSTATE y SQLCODE en Java” en la página 335
v “Variables SQLSTATE y SQLCODE en Perl” en la página 366
Consulta relacionada:
v “sqlaintp - Get Error Message” en el manual Administrative API Reference
Conceptos relacionados:
v “Sentencias de soporte de SQL dinámico” en la página 140
v “SQL dinámico frente a SQL estático” en la página 141
Sentencias de soporte de SQL dinámico
Las sentencias de soporte de SQL dinámico aceptan una variable del lenguaje
principal de serie de caracteres y un nombre de sentencia como argumentos.
La variable del lenguaje principal contiene la sentencia de SQL que se va a
procesar de forma dinámica en formato de texto. El texto de la sentencia no se
procesa cuando se precompila una aplicación. De hecho, el texto de la
sentencia no tiene que existir en el momento en que se precompila la
aplicación. En su lugar, la sentencia de SQL se trata como una variable del
lenguaje principal con fines de precompilación y se hace referencia a la
variable durante la ejecución de la aplicación. Estas sentencias de SQL se
denominan SQL dinámico.
Consulta relacionada:
v Apéndice A, “Sentencias de SQL soportadas” en la página 521
SQL dinámico frente a SQL estático
En general, una aplicación que utiliza SQL dinámico tiene un coste de partida
(inicial) superior por sentencia de SQL debido a la necesidad de compilar las
sentencias de SQL antes de utilizarlas. Una vez compiladas, el tiempo de
ejecución de SQL dinámico comparado con SQL estático debe ser equivalente
y, en algunos casos, más rápido debido a que el optimizador elige mejores
planes de acceso. Cada vez que se ejecuta una sentencia dinámica, el coste de
compilación inicial pierde importancia. Si varios usuarios ejecutan la misma
aplicación dinámica con las mismas sentencias, el coste de compilación de la
sentencia sólo se aplica a la primera aplicación que emite la sentencia.
Nota: tanto SQL estático como SQL dinámico vienen en dos tipos que
constituyen una diferencia para el optimizador de DB2. Estos tipos son:
1. SQL estático que no contiene variables del lenguaje principal
Esta es una situación poco probable que sólo verá para:
v Código de inicialización
v Ejemplos de formación para principiantes
Conceptos relacionados:
v “Ejemplo de marcadores de parámetros en un programa de SQL dinámico”
en la página 167
Tareas relacionadas:
v “Cómo proporcionar entrada de variables a SQL dinámico mediante
marcadores de parámetros” en la página 166
Procedimiento:
Conceptos relacionados:
v “Ejemplo de un cursor en un programa de SQL dinámico” en la página 145
v “Cursores en REXX” en la página 381
Tareas relacionadas:
v “Selección de varias filas utilizando un cursor” en la página 118
Ejemplo de un cursor en un programa de SQL dinámico
move "SELECT TABNAME FROM SYSCAT.TABLES ORDER BY 1 WHERE TABNAME <> ?" to st.
EXEC SQL PREPARE s1 FROM :st END-EXEC.
Conceptos relacionados:
v “Recuperación de mensajes de error en una aplicación” en la página 137
Ejemplos relacionados:
v “dbuse.out -- HOW TO USE A DATABASE (C)”
v “dbuse.sqc -- How to use a database (C)”
v “dbuse.out -- HOW TO USE A DATABASE (C++)”
v “dbuse.sqC -- How to use a database (C++)”
Conceptos relacionados:
v “Consideraciones sobre autorización para SQL dinámico” en la página 61
Con SQL estático, las variables del lenguaje principal utilizadas en sentencias
de SQL incorporado se conocen en el momento de compilar la aplicación. Con
SQL dinámico, las sentencias de SQL incorporado y por lo tanto las variables
del lenguaje principal no se conocen hasta el momento de ejecutar la
Conceptos relacionados:
v “Ejemplo de un cursor en un programa de SQL dinámico” en la página 145
Consulta relacionada:
v “DESCRIBE sentencia” en el manual Consulta de SQL, Volumen 2
v “FETCH sentencia” en el manual Consulta de SQL, Volumen 2
v “PREPARE sentencia” en el manual Consulta de SQL, Volumen 2
v “SQLDA” en el manual Administrative API Reference
Declaración de la estructura SQLDA en un programa de SQL dinámico
CABECERA
sqln SMALLINT sqld SMALLINT
SQLVAR
(1 por campo) sqldata POINTER sqlind POINTER
OTROS SQLVAR
Procedimiento:
Tareas relacionadas:
v “Preparación de una sentencia de SQL dinámico utilizando la estructura
SQLDA mínima” en la página 153
v “Asignación de un SQLDA con suficientes entradas SQLVAR para un
programa de SQL dinámico” en la página 155
v “Asignación de una estructura SQLDA para un programa de SQL
dinámico” en la página 158
Consulta relacionada:
v “SQLDA” en el manual Administrative API Reference
Preparación de una sentencia de SQL dinámico utilizando la estructura
SQLDA mínima
Restricciones:
Sólo puede asignar una estructura SQLDA de menor tamaño con lenguajes de
programación, como C y C++, que den soporte a la asignación dinámica de
memoria.
Procedimiento:
Tareas relacionadas:
v “Declaración de la estructura SQLDA en un programa de SQL dinámico” en
la página 151
v “Asignación de un SQLDA con suficientes entradas SQLVAR para un
programa de SQL dinámico” en la página 155
v “Asignación de una estructura SQLDA para un programa de SQL
dinámico” en la página 158
Asignación de un SQLDA con suficientes entradas SQLVAR para un
programa de SQL dinámico
Procedimiento:
Puede utilizar la macro SQLDASIZE para no tener que realizar sus propios
cálculos y para evitar dependencias específicas de cada versión.
Tareas relacionadas:
v “Declaración de la estructura SQLDA en un programa de SQL dinámico” en
la página 151
v “Preparación de una sentencia de SQL dinámico utilizando la estructura
SQLDA mínima” en la página 153
v “Asignación de una estructura SQLDA para un programa de SQL
dinámico” en la página 158
Descripción de una sentencia SELECT en un programa de SQL dinámico
Procedimiento:
Una vez ejecutada esta sentencia, cada elemento SQLVAR contiene una
descripción de una columna de la tabla de resultados.
Tareas relacionadas:
v “Adquisición de almacenamiento para albergar una fila” en la página 157
Adquisición de almacenamiento para albergar una fila
Para que una aplicación pueda captar una fila de la tabla de resultados
utilizando una estructura SQLDA, la aplicación debe antes asignar
almacenamiento para la fila.
Procedimiento:
Conceptos relacionados:
v “Uso de objetos grandes” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
Tareas relacionadas:
v “Proceso del cursor en un programa de SQL dinámico” en la página 158
Proceso del cursor en un programa de SQL dinámico
Procedimiento:
Para procesar el cursor asociado con una sentencia SELECT, primero abra el
cursor y luego capte filas especificando la cláusula USING DESCRIPTOR de la
sentencia FETCH. Por ejemplo, una aplicación C podría tener lo siguiente:
EXEC SQL OPEN pcurs
EMB_SQL_CHECK( "OPEN" ) ;
EXEC SQL FETCH pcurs USING DESCRIPTOR :*sqldaPointer
EMB_SQL_CHECK( "FETCH" ) ;
Una vez visualizados los datos, debería cerrar el cursor y liberar la memoria
asignada de forma dinámica. Por ejemplo:
EXEC SQL CLOSE pcurs ;
EMB_SQL_CHECK( "CLOSE CURSOR" ) ;
Para crear una estructura SQLDA con COBOL, puede incorporar una
sentencia INCLUDE SQLDA o utilizar la sentencia COPY. Utilice la sentencia
COPY cuando desee controlar el número máximo de SQLVAR y por lo tanto
la cantidad de almacenamiento que utiliza el SQLDA. Por ejemplo, para
cambiar el número por omisión de SQLVAR de 1489 a 1, utilice la siguiente
sentencia COPY:
COPY "sqlda.cbl"
replacing --1489--
by --1--.
Sin embargo, puede crear algo parecido a una estructura SQLDA estática en
un programa FORTRAN y utilizar dicha estructura siempre que se pueda
utilizar un SQLDA. El archivo sqldact.f contiene constantes que ayudan a
declarar una estructura SQLDA en FORTRAN.
integer*2 sqlvar1
parameter ( sqlvar1 = sqlda_header_sz + 0*sqlvar_struct_sz )
Tareas relacionadas:
v “Preparación de una sentencia de SQL dinámico utilizando la estructura
SQLDA mínima” en la página 153
v “Asignación de un SQLDA con suficientes entradas SQLVAR para un
programa de SQL dinámico” en la página 155
v “Transferencia de datos en un programa de SQL dinámico mediante una
estructura SQLDA” en la página 162
Transferencia de datos en un programa de SQL dinámico mediante una
estructura SQLDA
Procedimiento:
Tareas relacionadas:
v “Descripción de una sentencia SELECT en un programa de SQL dinámico”
en la página 156
v “Adquisición de almacenamiento para albergar una fila” en la página 157
v “Proceso del cursor en un programa de SQL dinámico” en la página 158
Proceso de sentencias interactivas de SQL en programas de SQL
dinámico
Una aplicación que utiliza SQL dinámico se puede escribir de modo que
procese sentencias arbitrarias de SQL. Por ejemplo, si una aplicación acepta
sentencias de SQL del usuario, la aplicación debe ser capaz de ejecutar las
sentencias sin conocimiento previo de las mismas.
Conceptos relacionados:
v “Determinación del tipo se sentencia en programas de SQL dinámico” en la
página 164
Determinación del tipo se sentencia en programas de SQL dinámico
Consulta relacionada:
v “EXECUTE sentencia” en el manual Consulta de SQL, Volumen 2
Proceso de sentencias SELECT de lista de variables en programas de
SQL dinámico
Procedimiento:
Tareas relacionadas:
v “Declaración de la estructura SQLDA en un programa de SQL dinámico” en
la página 151
v “Preparación de una sentencia de SQL dinámico utilizando la estructura
SQLDA mínima” en la página 153
v “Asignación de un SQLDA con suficientes entradas SQLVAR para un
programa de SQL dinámico” en la página 155
v “Descripción de una sentencia SELECT en un programa de SQL dinámico”
en la página 156
v “Adquisición de almacenamiento para albergar una fila” en la página 157
v “Proceso del cursor en un programa de SQL dinámico” en la página 158
Procedimiento:
Debe guardar los elementos SQL fuente, no las versiones preparadas. Esto
significa que debe recuperar y luego preparar cada sentencia antes de ejecutar
la versión almacenada en la tabla. Básicamente, la aplicación prepara una
sentencia de SQL a partir de una serie de caracteres y ejecuta esta sentencia de
forma dinámica.
Procedimiento:
Supongamos que la aplicación utiliza SQL dinámico y que desea que pueda
realizar una operación DELETE. Una serie de caracteres que contenga un
marcador de parámetros puede tener un aspecto parecido al siguiente:
DELETE FROM TEMPL WHERE EMPNO = ?
Consulta relacionada:
v “PREPARE sentencia” en el manual Consulta de SQL, Volumen 2
Ejemplo de marcadores de parámetros en un programa de SQL dinámico
v JDBC (DbUse.java)
La función execPreparedStatementWithParam() del ejemplo JDBC
DbUse.java muestra cómo realizar una supresión mediante marcadores de
parámetros:
// preparar la sentencia con marcadores de parámetros
PreparedStatement prepStmt = con.prepareStatement(
" DELETE FROM org WHERE deptnumb <= ? AND division = ? ");
// ejecutar la sentencia
prepStmt.setInt(1, 70);
prepStmt.setString(2, "Eastern");
prepStmt.execute();
// cerrar la sentencia
prepStmt.close();
v COBOL (varinp.sqb)
El siguiente ejemplo procede del ejemplo de COBOL varinp.sqb y muestra
cómo utilizar un marcador de parámetro en condiciones de búsqueda y
actualización:
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 pname pic x(10).
01 dept pic s9(4) comp-5.
01 st pic x(127).
01 parm-var pic x(5).
EXEC SQL END DECLARE SECTION END-EXEC.
Conceptos relacionados:
v “Recuperación de mensajes de error en una aplicación” en la página 137
Nota: CLI de DB2 también puede aceptar algunas sentencias de SQL que no
se pueden preparar de forma dinámica, como sentencias compuestas de
SQL.
Cada DBMS puede tener sentencias adicionales que el usuario puede preparar
de forma dinámica. En este caso, CLI de DB2 pasa las sentencias directamente
al DBMS. Hay una excepción: algunos DBMS pueden preparar las sentencias
COMMIT y ROLLBACK de forma dinámica, pero CLI de DB2 las interceptará
y las tratará como una petición SQLEndTran() adecuada. Sin embargo, se
recomienda utilizar la función SQLEndTran() para especificar la sentencia
COMMIT o ROLLBACK.
La interfaz CLI de DB2 tiene varias ventajas clave sobre SQL incorporado.
v Resulta ideal para un entorno cliente-servidor, en el que la base de datos de
destino no se conoce cuando se crea la aplicación. Proporciona una interfaz
coherente para ejecutar sentencias de SQL, independientemente del servidor
de base de datos al que se conecte la aplicación.
v Aumenta la portabilidad de las aplicaciones al eliminar la dependencia de
precompiladores. Las aplicaciones se distribuyen no como código fuente de
SQL incorporado, que se tiene que preprocesar para cada producto de base
de datos, sino como aplicaciones compiladas o bibliotecas en tiempo de
ejecución.
v Las aplicaciones CLI de DB2 individuales no se tienen que vincular a cada
base de datos; solo los archivos de vinculación que se suministran con CLI
de DB2 se tienen que vincular una vez para todas las aplicaciones CLI de
DB2. Esto puede reducir significativamente la cantidad de gestión necesaria
para la aplicación cuando ya está en nivel de uso general.
v Las aplicaciones CLI de DB2 se pueden conectar a varias bases de datos,
incluidas varias conexiones a la misma base de datos, todo desde la misma
aplicación. Cada conexión tiene su propio ámbito de confirmación. Esto
resulta más sencillo si se utiliza CLI que si se utiliza SQL incorporado,
donde la aplicación debe utilizar varias hebras para conseguir el mismo
resultado.
v CLI de DB2 elimina la necesidad de áreas de datos controladas por la
aplicación y a menudo complejas, como SQLDA y SQLCA, que suelen estar
asociadas con aplicaciones de SQL incorporado. En su lugar, CLI de DB2
asigna y controla las estructuras de datos necesarias y proporciona un
descriptor de contexto para que la aplicación haga referencia a las mismas.
v CLI de DB2 permite el desarrollo de aplicaciones de varias hebras seguras
en las que cada hebra puede tener su propia conexión y un ámbito de
confirmación independiente del resto. CLI de DB2 lo consigue eliminando
las áreas de datos descritas anteriormente y asociando todas estas
estructuras de datos a las que puede acceder la aplicación con un descriptor
de contexto específico. A diferencia de SQL incorporado, una aplicación CLI
de varias hebras no tiene que llamar a ninguna de las API de DB2 de
gestión de contexto; el controlador de CLI de DB2 lo maneja
automáticamente.
v CLI de DB2 proporciona una función mejorada de captación y entrada de
parámetros que permite especificar matrices de datos como entrada,
recuperar varias filas de un conjunto de resultados directamente en una
matriz y ejecutar sentencias que generan varios conjuntos de resultados.
También se puede escribir una aplicación mixta que utilice tanto CLI de DB2
como SQL incorporado, aprovechando sus respectivas ventajas. En este caso,
se utiliza CLI de DB2 para proporcionar la aplicación base, con módulos clave
escritos utilizando SQL estático por razones de rendimiento o seguridad. Esto
complica el diseño de la aplicación y sólo se debe utilizar si los
procedimientos almacenados no cumplen con los requisitos de la aplicación.
Conceptos relacionados:
v “Recurso de rastreo de CLI/ODBC/JDBC” en la página 313
Tareas relacionadas:
v “Preparing and Executing SQL Statements in CLI Applications” en el
manual CLI Guide and Reference, Volume 1
v “Issuing SQL Statements in CLI Applications” en el manual CLI Guide and
Reference, Volume 1
v “Creating Static SQL with CLI/ODBC/JDBC Static Profiling” en el manual
CLI Guide and Reference, Volume 1
Consulta relacionada:
v “Programas de ejemplo C/C++” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
Archivos include
Las siguientes secciones describen los archivos include correspondientes a C y
C++.
Archivos include para C y C++
Conceptos relacionados:
v “Archivos include en C y C++” en la página 180
Archivos include en C y C++
Existen dos métodos para incluir archivos: la sentencia EXEC SQL INCLUDE
y la macro #include. El precompilador pasará por alto #include y sólo
procesará los archivos incluidos mediante la sentencia EXEC SQL INCLUDE.
Como ayuda para relacionar los errores del compilador con la fuente original,
el precompilador genera macros ANSI #line en el archivo de salida. Esto
permite que el compilador informe de los errores utilizando el nombre de
archivo y el número de línea del archivo fuente o fuente incluido, en lugar de
la salida del precompilador.
Conceptos relacionados:
v “Expansión de macros en C” en la página 200
Consulta relacionada:
v “PREPARE sentencia” en el manual Consulta de SQL, Volumen 2
v “Archivos include para C y C++” en la página 177
Por ejemplo:
EXEC SQL SELECT col INTO :hostvar FROM table;
Observe que los caracteres reales utilizados como fin de línea y tabulador
varían en función de la plataforma. Por ejemplo, los sistemas basados en
UNIX utilizan un salto de línea.
Consulta relacionada:
v Apéndice A, “Sentencias de SQL soportadas” en la página 521
Las variables del lenguaje principal son variables de los lenguajes C o C++ a
las que se hace referencia en las sentencias de SQL. Permiten que una
aplicación pase datos de entrada al gestor de bases de datos y reciba datos de
salida de éste. Una vez que se ha precompilado la aplicación, el compilador
utiliza las variables del lenguaje principal como cualquier otra variable de
C/C++. Cuando denomine, declare y utilice variables del lenguaje principal,
siga las normas descritas en los apartados siguientes.
Conceptos relacionados:
v “Nombres de variables del lenguaje principal en C y C++” en la página 185
v “Declaraciones de variables del lenguaje principal en C y C++” en la página
186
v “Sintaxis de las variables del lenguaje principal de tipo carácter fijas y
terminadas en nulo en C y C++” en la página 189
v “Variables de indicador en C y C++” en la página 191
v “Variables gráficas del lenguaje principal en C y C++” en la página 191
v “Inicialización de variables del lenguaje principal en C y C++” en la página
200
v “Soporte de estructuras del lenguaje principal en C y C++” en la página 201
v “Sección declare de SQL con variables del lenguaje principal para C y C++”
en la página 216
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en C y C++” en
la página 187
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
variable en C o C++” en la página 190
v “Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
C o C++” en la página 195
v “Sintaxis de las variables del lenguaje principal de localizador de objeto
grande (LOB) en C o C++” en la página 198
v “Sintaxis de declaraciones de variables del lenguaje principal de referencia
de archivos en C o C++” en la página 199
También es posible tener varias variables del lenguaje principal locales con
el mismo nombre, siempre que sean del mismo tipo y tamaño. Para ello,
declare la primera aparición de la variable del lenguaje principal, ante el
precompilador, entre sentencias BEGIN DECLARE SECTION y END
DECLARE SECTION, y deje las declaraciones posteriores de la variable
fuente de las secciones de declaración. El código siguiente muestra un
ejemplo de este caso:
void f3(int i)
{
EXEC SQL BEGIN DECLARE SECTION;
char host_var_3[25];
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT COL2 INTO :host_var_3 FROM TBL2;
}
void f4(int i)
Conceptos relacionados:
v “Declaraciones de variables del lenguaje principal en C y C++” en la página
186
Declaraciones de variables del lenguaje principal en C y C++
Una variable numérica del lenguaje principal se puede utilizar como variable
de entrada o de salida para cualquier valor numérico de entrada o salida de
SQL. Una variable del lenguaje principal de tipo carácter se puede utilizar
como variable de entrada o de salida para cualquier valor de tipo carácter, de
fecha, de hora o de indicación horaria, de entrada o salida de SQL. La
aplicación se tiene que asegurar de que las variables de salida sean lo
suficientemente largas como para contener los valores que reciben.
Conceptos relacionados:
v “Sintaxis de las variables del lenguaje principal de tipo carácter fijas y
terminadas en nulo en C y C++” en la página 189
v “Variables gráficas del lenguaje principal en C y C++” en la página 191
v “Soporte de estructuras del lenguaje principal en C y C++” en la página 201
v “Miembros de datos de clase utilizados como variables del lenguaje
principal en C y C++” en la página 208
Tareas relacionadas:
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en C y C++” en
la página 187
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
variable en C o C++” en la página 190
Sintaxis de las variables numéricas del lenguaje principal en C y C++
a b nombrevar ; ac
= valor
b *
& const
volatile
sqlint32
(4)
long
int
sqlint64
__int64
long long
int
(5)
long
int
Notas:
1 REAL (SQLTYPE 480), longitud 4
2 DOUBLE (SQLTYPE 480), longitud 8
3 SMALLINT (SQLTYPE 500)
4 Para obtener una portabilidad máxima de las aplicaciones utilice sqlint32
y sqlint64 respectivamente para las variables del lenguaje principal
INTEGER y BIGINT. Por omisión, el uso de variables del lenguaje
principal tipo long tiene como consecuencia el error del precomiplador
SQL0402 en las plataformas en que la longitud es una cantidad de 64
bits, como por ejemplo en UNIX de 64 BITS. Utilice la opción
LONGERROR NO de PREP para imponer que DB2 acepte variables long
como tipos de variable del lenguaje principal aceptables y las trate como
variables BIGINT.
5 Para obtener una portabilidad máxima de las aplicaciones
utilice, respectivamente, sqlint32 y sqlint64 para las variables del
lenguaje principal INTEGER y BIGINT. Para utilizar el tipo de
datos BIGINT, la plataforma tiene que soportar valores enteros de 64
bits. Por omisión, el uso de variables del lenguaje principal tipo long
tiene como consecuencia el error del precomiplador SQL0402 en las
plataformas en que la longitud es una cantidad de 64 bits, como por
ejemplo en UNIX de 64 BITS. Utilice la opción LONGERROR NO de
PREP para imponer que DB2 acepte variables long como tipos de
variable del lenguaje principal aceptables y las trate como variables
BIGINT.
Sintaxis de las variables del lenguaje principal de tipo carácter fijas y terminadas
en nulo en C o C++
aa char a
auto const unsigned
extern volatile
static
register
a b CHAR ; ac
Serie C = valor
CHAR
(1)
nombrevar
b *
& const
volatile
Serie C
(2)
nombrevar [longitud]
( nombrevar )
b *
& const
volatile
Notas:
1 CHAR (SQLTYPE 452), length 1
2 Serie C terminada en nulo (SQLTYPE 460); la longitud puede
ser cualquier expresión constante válida
Sintaxis para variables del lenguaje principal de tipo carácter de longitud variable
en C o C++
aa struct a
auto const código
extern volatile
static
register
(1)
a { short var1 ; char var2 [longitud] ; } a
int unsigned
a b nombrevar ; ac
Valores
b *
& const
volatile
Valores
= { valor-1 , valor-2 }
Notas:
1 En el formato 2, la longitud puede ser cualquier expresión
constante válida. Su valor después de una evaluación determina si la
variable del lenguaje principal es VARCHAR (SQLTYPE 448) o LONG
VARCHAR (SQLTYPE 456).
Consideraciones sobre las variables del lenguaje principal de tipo carácter
de longitud variable:
1. Aunque el gestor de bases de datos convierte los datos de tipo carácter al
formato 1 o al formato 2 siempre que es posible, el formato 1 corresponde
a los tipos de columna CHAR o VARCHAR, mientras que el formato 2
corresponde a los tipos de columna VARCHAR y LONG VARCHAR.
2. Si se utiliza el formato 1 con un especificador de longitud [n], el valor
correspondiente al especificador de longitud tras la evaluación no debe ser
mayor que 32672 y la serie contenida en la variable debe terminar en nulo.
Conceptos relacionados:
v “Variables del lenguaje principal utilizadas como tipos de datos de puntero
en C y C++” en la página 207
Variables de indicador en C y C++
Conceptos relacionados:
v “Tablas de indicadores en C y C++” en la página 203
Variables gráficas del lenguaje principal en C y C++
Existen tres formatos válidos para una variable gráfica del lenguaje principal:
v Formato de gráfico simple
Las variables de gráfico simple del lenguaje principal tienen para SQLTYPE
el valor 468/469, lo que equivale al tipo de datos GRAPHIC(1) de SQL.
v Formato de gráfico terminado en nulo
Conceptos relacionados:
v “Nombres de variables del lenguaje principal en C y C++” en la página 185
v “Declaraciones de variables del lenguaje principal en C y C++” en la página
186
v “Inicialización de variables del lenguaje principal en C y C++” en la página
200
v “Soporte de estructuras del lenguaje principal en C y C++” en la página 201
v “Tablas de indicadores en C y C++” en la página 203
v “Codificación de caracteres de varios bytes en C y C++” en la página 210
v “Tipos de datos wchar_t y sqldbchar en C y C++” en la página 211
v “Opción del precompilador WCHARTYPE en C y C++” en la página 211
Consulta relacionada:
v “Sintaxis de la declaración gráfica de formatos gráficos de un solo gráfico y
terminados en nulo en C y C++” en la página 192
v “Sintaxis para la declaración gráfica del formato estructurado
VARGRAPHIC en C o C++” en la página 194
v “Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
C o C++” en la página 195
v “Sintaxis de las variables del lenguaje principal de localizador de objeto
grande (LOB) en C o C++” en la página 198
v “Sintaxis de declaraciones de variables del lenguaje principal de referencia
de archivos en C o C++” en la página 199
Sintaxis de la declaración gráfica de formatos gráficos de un solo gráfico
y terminados en nulo en C y C++
CHAR
(2)
nombrevar
b *
& const
volatile
Serie C
(3)
nombrevar [longitud]
( nombrevar )
b *
& const
volatile
Notas:
1 Para determinar cuál de los dos tipos gráficos debe utilizar, consulte la
descripción de los tipos de datos wchar_t y sqldbchar en C y C++.
2 GRAPHIC (SQLTYPE 468), longitud 1
3 Serie gráfica terminada en nulo (SQLTYPE 400)
Consideraciones sobre las variables del lenguaje principal de gráficos:
1. El formato de gráfico simple declara una variable del lenguaje principal de
serie gráfica y longitud fija de longitud 1 con un SQLTYPE de 468 ó 469.
2. valor es un inicializador. Se debe utilizar un literal de serie de caracteres
amplios (literal L) si se utiliza la opción WCHARTYPE CONVERT del
precompilador.
3. longitud puede ser cualquier expresión constante válida, y su valor
después de una evaluación tiene que ser mayor o igual a 1 y no mayor
que la longitud máxima de VARGRAPHIC, que es 16336.
Conceptos relacionados:
v “Series terminadas en nulo en C y C++” en la página 205
v “Tipos de datos wchar_t y sqldbchar en C y C++” en la página 211
Sintaxis para la declaración gráfica del formato estructurado
VARGRAPHIC en C o C++
A continuación se muestra la sintaxis para declarar una variable del lenguaje
principal gráfica mediante el formato estructurado VARGRAPHIC.
(1) (2)
a { short var-1 ; var-2 [longitud ] ; } a
int sqldbchar
wchar_t
a b Variable ; ac
b *
& const
volatile
Variable:
nombre-variable
= { valor-1 , valor-2 }
Notas:
1 Para determinar cuál de los dos tipos gráficos debe utilizar, consulte la
descripción de los tipos de datos wchar_t y sqldbchar en C y C++.
2 longitud puede ser cualquier expresión de constante válida. Su valor
después de una evaluación determina si la variable del lenguaje
Conceptos relacionados:
v “Tipos de datos wchar_t y sqldbchar en C y C++” en la página 211
Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
C o C++
(1)
aa SQL TYPE IS BLOB (longitud ) a
auto const CLOB
extern volatile DBCLOB
static
register
b *
& const
volatile
Datos LOB
Notas:
1 longitud puede ser cualquier expresión de constante válida en la que se
pueden utilizar las constantes K, M o G. El valor de la longitud después
de una evaluación para BLOB y CLOB debe ser 1 <= longitud <=
2.147.483.647. El valor de longitud tras la evaluación correspondiente a
DBCLOB debe ser 1 <= longitud <= 1.073.741.823.
Consideraciones sobre las variables del lenguaje principal LOB:
1. Se necesita la cláusula SQL TYPE IS para poder distinguir los tres tipos de
LOB entre sí, de forma que se puedan llevar a cabo una comprobación del
tipo y una resolución de la función para las variables del lenguaje
principal de tipo LOB que se pasan a las funciones.
2. SQL TYPE IS, BLOB, CLOB, DBCLOB, K, M, G se pueden especificar en
una mezcla de mayúsculas y minúsculas.
3. La longitud máxima permitida para la serie de inicialización ″datos-inic″ es
32702 bytes, incluidos los delimitadores de la serie (igual al límite existente
en series C/C++ dentro del precompilador).
4. La longitud de inicialización, long-inic, tiene que ser una constante
numérica (esto es, no puede incluir K, M ni G).
5. Se debe especificar una longitud para el LOB; es decir, que la declaración
siguiente no está permitida:
SQL TYPE IS BLOB my_blob;
6. Si el LOB no se inicializa dentro de la declaración, no se realizará ninguna
inicialización en el código generado por el precompilador.
7. Si se inicializa un DBCLOB, es responsabilidad del usuario añadirle a la
serie el prefijo ’L’ (que indica una serie de caracteres amplios).
La declaración:
static Sql Type is Blob(2M) my_blob=SQL_BLOB_INIT("mydata");
Ejemplo de CLOB:
La declaración:
volatile sql type is clob(125m) *var1, var2 = {10, "data5data5"};
Ejemplo de DBCLOB:
La declaración:
SQL TYPE IS DBCLOB(30000) my_dbclob1;
La declaración:
SQL TYPE IS DBCLOB(30000) my_dbclob2 = SQL_DBCLOB_INIT(L"mydbdata");
a b ; ac
Variable
Variable
b * nombre-variable
& const = valor-inic
volatile
La declaración:
SQL TYPE IS CLOB_LOCATOR my_locator;
a ; ac
Variable
b * nombre-variable
& const = valor-inic
volatile
La declaración:
static volatile SQL TYPE IS BLOB_FILE my_file;
Expansión de macros en C
Los campos de una estructura del lenguaje principal pueden ser de cualquiera
de los tipos de variable del lenguaje principal válidos. Los tipos válidos
incluyen todos los tipos numéricos, de carácter y de objetos grande. También
se soportan estructuras del lenguaje principal anidadas hasta 25 niveles. En el
ejemplo anterior, el campo info es una subestructura, mientras que el campo
name no lo es, puesto que representa un campo VARCHAR. Se aplica el mismo
principio a LONG VARCHAR, VARGRAPHIC y LONG VARGRAPHIC.
Asimismo, se soportan punteros a las estructuras del lenguaje principal.
Existen dos maneras de hacer referencia a las variables del lenguaje principal
agrupadas en una estructura del lenguaje principal en una sentencia de SQL:
v Se puede hacer referencia al nombre de la estructura del lenguaje principal
en una sentencia de SQL.
EXEC SQL SELECT id, name, years, salary
INTO :staff_record
FROM staff
WHERE id = 10;
Puesto que una referencia a una estructura del lenguaje principal (primer
ejemplo) es equivalente a una lista de sus campos, separados por comas,
existen casos en que este tipo de referencia puede conducir a un error. Por
ejemplo:
EXEC SQL DELETE FROM :staff_record;
Aquí, la sentencia DELETE espera una sola variable del lenguaje principal
basada en caracteres. Si en su lugar se proporciona una estructura del lenguaje
principal, la sentencia tiene como resultado un error durante la
precompilación:
SQL0087N La variable del lenguaje principal "staff_record" es una estructura que se utiliza
donde no se permiten referencias a estructuras.
Otros usos de las estructuras del lenguaje principal que pueden ocasionar que
se produzca un error SQL0087N incluyen: PREPARE, EXECUTE IMMEDIATE,
CALL, variables de indicador y referencias a SQLDA. Las estructuras del
lenguaje principal que tengan exactamente un campo están permitidas en
estas situaciones, puesto que constituyen referencias a campos individuales
(segundo ejemplo).
Conceptos relacionados:
v “Tablas de indicadores en C y C++” en la página 203
Tablas de indicadores en C y C++
Si se especifica una tabla de indicadores junto con una variable del lenguaje
principal en lugar de una estructura del lenguaje principal, sólo se utilizará el
primer elemento de la tabla de indicadores, por ejemplo ind_tab[0]:
EXEC SQL SELECT id
INTO :staff_record.id INDICATOR :ind_tab
FROM staff
WHERE id = 10;
Conceptos relacionados:
v “Soporte de estructuras del lenguaje principal en C y C++” en la página 201
Las variables del lenguaje principal se pueden declarar como punteros a tipos
de datos específicos, con las restricciones siguientes:
v Si una variable del lenguaje principal se declara como puntero, no se puede
declarar ninguna otra variable del lenguaje principal con el mismo nombre
dentro del mismo archivo fuente. El ejemplo siguiente no está permitido:
char mystring[20];
char (*mystring)[20];
v Cuando declare un puntero a una matriz de caracteres terminada en nulo,
utilice paréntesis. En todos los casos restantes, no se permiten paréntesis.
Por ejemplo:
EXEC SQL BEGIN DECLARE SECTION;
char (*arr)[10]; /* correcto */
char *(arr); /* incorrecto */
char *arr[10]; /* incorrecto */
EXEC SQL END DECLARE SECTION;
..
.
short int hire( void )
{
EXEC SQL INSERT INTO staff ( name,id,salary )
VALUES ( :staff_name, :staff_id, :staff_salary );
staff_in_db = (sqlca.sqlcode == 0);
return sqlca.sqlcode;
}
};
Observe que, aunque una aplicación puede procesar datos de tipo carácter en
formato de varios bytes o en formato de caracteres amplios, la interacción con
el gestor de bases de datos sólo se realiza con códigos de caracteres DBCS (de
varios bytes). Es decir, los datos se almacenan y se recuperan de las columnas
GRAPHIC en formato DBCS. Se proporciona la opción WCHARTYPE del
precompilador para permitir que los datos de una aplicación que están en
formato de caracteres amplios se conviertan al formato de varios bytes, y
viceversa, cuando se produce el intercambio de datos con el motor de la base
de datos.
Conceptos relacionados:
v “Variables gráficas del lenguaje principal en C y C++” en la página 191
v “Tipos de datos wchar_t y sqldbchar en C y C++” en la página 211
Puede definir todos los tipos de variables del lenguaje principal de gráficos C
de DB2 mediante wchar_t o sqldbchar. Debe utilizar wchar_t si crea la
aplicación mediante la opción de precompilación WCHARTYPE CONVERT.
Conceptos relacionados:
v “Opción del precompilador WCHARTYPE en C y C++” en la página 211
v “Consideraciones sobre los juegos de códigos EUC y UCS-2 de japonés y
chino tradicional” en la página 444
Opción del precompilador WCHARTYPE en C y C++
Hay otras directrices que debe tener en cuenta, que son las siguientes:
v Puesto que se utiliza el soporte de wchar_t o sqldbchar para manejar datos
DBCS, su uso requiere que el hardware y el software tengan capacidad de
DBCS o EUC. Este soporte sólo está disponible en el entorno DBCS de DB2
Universal Database, o para tratar datos GRAPHIC en cualquier aplicación
(incluidas las aplicaciones de un solo byte) conectada a una base de datos
UCS-2.
v Los caracteres que no sean DBCS, y los caracteres amplios que se pueden
convertir en caracteres no DBCS, no se deben utilizar en series gráficas.
Caracteres que no sean DBCS hace referencia a los caracteres de un solo byte
y a los caracteres que no son de doble byte. Las series gráficas no se
validan para asegurar que sus valores únicamente contienen puntos de
código de caracteres de doble byte. Las variables del lenguaje principal de
gráficos sólo deben contener datos DBCS o, si WCHARTYPE CONVERT
está en vigor, datos de caracteres amplios que se convierten en datos DBCS.
Debe almacenar los datos que contienen una mezcla de caracteres de doble
byte y de un solo byte en variables del lenguaje principal de tipo carácter.
Observe que las variables del lenguaje principal de datos mixtos no se ven
afectadas por el establecimiento de la opción WCHARTYPE.
v En las aplicaciones en que se utiliza la opción de precompilación
WCHARTYPE NOCONVERT, no se deben utilizar literales L junto con
variables del lenguaje principal de gráficos, puesto que los literales L están
en formato de caracteres amplios. Un literal L es una serie de caracteres
amplios C que tiene como prefijo la letra L y como tipo de datos "array of
wchar_t". Por ejemplo, L"dbcs-string" es un literal L.
v En las aplicaciones en que se utiliza la opción de precompilación
WCHARTYPE CONVERT, se pueden utilizar literales L para inicializar
variables del lenguaje principal wchar_t, pero no se pueden utilizar en
sentencias de SQL. En lugar de utilizar literales L, las sentencias de SQL
deben usar constantes de serie de gráficos, que son independientes del
valor de WCHARTYPE.
v El valor de la opción WCHARTYPE afecta a los datos de gráficos que se
pasan al gestor de bases de datos y que se reciben de éste utilizando la
estructura SQLDA, así como a las variables del lenguaje principal. Si
WCHARTYPE CONVERT está en vigor, se supondrá que los datos gráficos
Consulta relacionada:
v “PREPARE sentencia” en el manual Consulta de SQL, Volumen 2
Consideraciones sobre EUC en japonés o chino tradicional y UCS-2 en C
y C++
Conceptos relacionados:
v “Consideraciones sobre los juegos de códigos EUC y UCS-2 de japonés y
chino tradicional” en la página 444
Sección declare de SQL con variables del lenguaje principal para C y C++
..
.
short age = 26; /* tipo de SQL 500 */
short year; /* tipo de SQL 500 */
sqlint32 salary; /* tipo de SQL 496 */
sqlint32 deptno; /* tipo de SQL 496 */
float bonus; /* tipo de SQL 480 */
double wage; /* tipo de SQL 480 */
..
.
EXEC SQL END DECLARE SECTION;
1<=n<=32 672
Como alternativa, utilice Serie de caracteres de longitud variable
char[n+1], donde n es terminada en nulo
suficientemente grande para Nota: se le asigna un tipo SQL de 460/461.
contener los datos
1<=n<=32 672
LONG VARCHAR struct tag { Serie de caracteres de longitud variable no
(456 ó 457) short int; terminada en nulo con indicador de longitud
char[n] de serie de 2 bytes
}
32 673<=n<=32 700
CLOB(n) sql type is Serie de caracteres de longitud variable no
(408 ó 409) clob(n) terminada en nulo con indicador de longitud
de serie de 4 bytes
1<=n<=2 147 483 647
Variable de localizador CLOB6 sql type is Identifica las entidades CLOB que residen en
(964 ó 965) clob_locator el servidor
Variable de referencia de archivo sql type is Descriptor del archivo que contiene datos
CLOB6 en la página 221 (920 ó 921) clob_file CLOB
BLOB(n) sql type is Serie binaria variable no terminada en nulo
(404 ó 405) blob(n) con indicador de longitud de serie de 4 bytes
1<=n<=16 336
Como alternativa, utilice Serie de caracteres de doble byte y longitud
sqldbchar[n+1], donde n es variable terminada en nulo
suficientemente grande para Nota: se le asigna un tipo SQL de 400/401.
contener los datos
1<=n<=16 336
LONG VARGRAPHIC struct tag { Serie de caracteres de doble byte y longitud
(472 ó 473) short int; variable no terminada en nulo con indicador
sqldbchar[n] de longitud de serie de 2 bytes
}
16 337<=n<=16 350
Nota: los tipos de datos siguientes sólo están disponibles en los entornos DBCS o EUC si se compilan previamente
con la opción WCHARTYPE CONVERT.
GRAPHIC(1) wchar_t v Carácter amplio simple (para tipo C)
(468 ó 469) v Carácter de doble byte simple (para tipo de
columna)
GRAPHIC(n) No existe un equivalente exacto; Serie de caracteres de doble byte y longitud
(468 ó 469) utilice wchar_t [n+1], donde n es fija
suficientemente grande para
contener los datos
1<=n<=127
1<=n<=16 336
Como alternativa, utilice Serie de caracteres de doble byte y longitud
char[n+1], donde n es variable terminada en nulo
suficientemente grande para Nota: se le asigna un tipo SQL de 400/401.
contener los datos
1<=n<=16 336
LONG VARGRAPHIC struct tag { Serie de caracteres de doble byte y longitud
(472 ó 473) short int; variable no terminada en nulo con indicador
wchar_t [n] de longitud de serie de 2 bytes
}
16 337<=n<=16 350
Nota: los tipos de datos siguientes sólo están disponibles en los entornos DBCS o EUC.
DBCLOB(n) sql type is Serie de caracteres de doble byte y longitud
(412 ó 413) dbclob(n) variable no terminada en nulo con indicador
de longitud de serie de 4 bytes
1<=n<=1 073 741 823
6
Variable de localizador DBCLOB sql type is Identifica las entidades DBCLOB que residen
(968 ó 969) dbclob_locator en el servidor
Variable de referencia de archivos sql type is Descriptor del archivo que contiene datos
DBCLOB6 dbclob_file DBCLOB
(924 ó 925)
Notas:
1. El primer número que se encuentra bajo Tipo de columna SQL indica que no se proporciona una variable de
indicador, y el segundo número indica que se proporciona una variable de indicador. Se necesita una variable de
indicador para indicar los valores nulos (NULL) o para contener la longitud de una serie truncada. Éstos son los
valores que aparecerán en el campo SQLTYPE del SQLDA para estos tipos de datos.
2. Por razones de compatibilidad entre plataformas, utilice sqlint32. En las plataformas UNIX de 64 bits, ″long″ es un
entero de 64 bits. En los sistemas operativos Windows de 64 bits y en las plataformas UNIX de 32 bits, ″long″ es
un entero de 32 bits.
3. Por razones de compatibilidad entre plataformas, utilice sqlint64. El archivo de cabecera sqlsystm.h de DB2
Universal Database definirá el tipo sqlint64 como ″__int64″ en la plataforma Windows NT cuando se utilice el
compilador de Microsoft, como ″long long″ en las plataformas UNIX de 32 bits y como ″long″ en las plataformas
UNIX de 64 bits.
4. FLOAT(n) donde 0 < n < 25 es un sinónimo de REAL. La diferencia entre REAL y DOUBLE en el SQLDA es el
valor de la longitud (4 ó 8).
5. Los tipos SQL siguientes son sinónimos de DOUBLE:
v FLOAT
v FLOAT(n) donde 24 < n < 54 es
v DOUBLE PRECISION
6. Éste no es un tipo de columna, sino un tipo de variable del lenguaje principal.
Conceptos relacionados:
v “Sección declare de SQL con variables del lenguaje principal para C y C++”
en la página 216
FOR BIT DATA en C y C++
Conceptos relacionados:
v “Sección declare de SQL con variables del lenguaje principal para C y C++”
en la página 216
Consulta relacionada:
La tabla siguiente lista las correlaciones soportadas entre tipos de datos SQL y
tipos de datos C para procedimientos, UDF y métodos.
Tabla 14. Tipos de datos SQL correlacionados con declaraciones C/C++
Tipo de columna SQL Tipo de datos C/C++ Descripción del tipo de columna SQL
SMALLINT (500 ó 501) short Entero con signo de 16 bits
INTEGER sqlint32 Entero con signo de 32 bits
(496 ó 497)
BIGINT sqlint64 Entero con signo de 64 bits
(492 ó 493)
REAL float Coma flotante de precisión simple
(480 ó 481)
DOUBLE double Coma flotante de precisión doble
(480 ó 481)
DECIMAL(p,s) No soportado. Para pasar un valor decimal, defina el
(484 ó 485) parámetro como de tipo de datos moldeable
DECIMAL (por ejemplo, CHAR o DOUBLE)
y moldee explícitamente el argumento para
este tipo.
CHAR(n) char[n+1] donde n es Serie de caracteres de longitud fija terminada
(452 ó 453) suficientemente grande para en nulo
contener los datos
1<=n<=254
CHAR(n) FOR BIT DATA char[n+1] donde n es Serie de caracteres de longitud fija
(452 ó 453) suficientemente grande para
contener los datos
1<=n<=254
VARCHAR(n) char[n+1] donde n es Serie de longitud variable terminada en nulo
(448 ó 449) (460 ó 461) suficientemente grande para
contener los datos
1<=n<=32 672
VARCHAR(n) FOR BIT DATA struct { Serie de caracteres de longitud variable no
(448 ó 449) sqluint16 length; terminada en nulo
char[n]
}
1<=n<=32 672
LONG VARCHAR struct { Serie de caracteres de longitud variable no
(456 ó 457) sqluint16 length; terminada en nulo
char[n]
}
32 673<=n<=32 700
16 337<=n<=16 350
DBCLOB(n) struct { Serie de caracteres de longitud variable no
(412 ó 413) sqluint32 length; terminada en nulo con indicador de longitud
sqldbchar data[n]; de serie de 4 bytes
}
..
.
EXEC SQL END DECLARE SECTION;
En una aplicación formada por varios archivos fuente, las variables SQLCODE
y SQLSTATE se pueden definir en el primer archivo fuente, tal como en el
ejemplo anterior. Los archivos fuente posteriores deben modificar las
definiciones del modo siguiente:
Una aplicación DB2 puede ejecutar sentencias de SQL para varias hebras
utilizando contextos. Un contexto es el entorno desde el que una aplicación
ejecuta todas las sentencias de SQL y las llamadas a las API. Todas las
conexiones, unidades de trabajo y otros recursos de base de datos están
asociados a un contexto específico. Cada contexto está asociado a una o más
hebras de una aplicación.
Por omisión, todas las aplicaciones tienen un solo contexto que se utiliza para
todos los accesos a bases de datos. Aunque que esto resulta perfecto para una
aplicación de una única hebra, la colocación en serie de las sentencias de SQL
hace que un solo contexto resulte inadecuado para una aplicación de varias
hebras. Utilizando las siguientes API de DB2, la aplicación puede conectar un
contexto separado a cada hebra y permitir que se pasen contextos entre
hebras:
v sqleSetTypeCtx()
v sqleBeginCtx()
v sqleEndCtx()
v sqleAttachToCtx()
v sqleDetachFromCtx()
v sqleGetCurrentCtx()
v sqleInterruptCtx()
Conceptos relacionados:
v “Transacciones simultáneas” en la página 469
Consulta relacionada:
v “sqleAttachToCtx - Attach to Context” en el manual Administrative API
Reference
v “sqleBeginCtx - Create and Attach to an Application Context” en el manual
Administrative API Reference
v “sqleDetachFromCtx - Detach From Context” en el manual Administrative
API Reference
v “sqleEndCtx - Detach and Destroy Application Context” en el manual
Administrative API Reference
v “sqleGetCurrentCtx - Get Current Context” en el manual Administrative API
Reference
v “sqleInterruptCtx - Interrupt Context” en el manual Administrative API
Reference
v “sqleSetTypeCtx - Set Application Context Type” en el manual
Administrative API Reference
Cuando acceda a una base de datos desde aplicaciones de varias hebras, siga
estas directrices:
v Coloque en serie la alteración de estructuras de datos.
Las aplicaciones se deben asegurar de que las estructuras de datos,
definidas por el usuario y utilizadas por las sentencias de SQL y por las
rutinas del gestor de bases de datos, no se vean alteradas por una hebra
mientras se esté procesando una sentencia de SQL o una rutina del gestor
de bases de datos en otra hebra. Por ejemplo, no permita que una hebra
reasigne una SQLDA mientras la está utilizando una sentencia de SQL en
otra hebra.
v Considere la posibilidad de utilizar estructuras de datos separadas.
Puede resultar más fácil asignar a cada hebra sus propias estructuras de
datos definidas por el usuario, a fin de evitar que se coloque en serie su
uso. Esta directriz es especialmente cierta para la SQLCA, la cual utilizan
no sólo todas las sentencias de SQL ejecutables, sino también todas las
rutinas del gestor de bases de datos. Existen tres alternativas para evitar
este problema con la SQLCA:
– Utilice EXEC SQL INCLUDE SQLCA, pero añada struct sqlca sqlca al
comienzo de cualquier rutina que utilice cualquier hebra que no sea la
primera.
– Coloque EXEC SQL INCLUDE SQLCA dentro de cada rutina que
contenga SQL, en lugar de hacerlo en el ámbito global.
– Sustituya EXEC SQL INCLUDE SQLCA por #include "sqlca.h" y luego
añada "struct sqlca sqlca" al comienzo de cualquier rutina que utilice
SQL.
Conceptos relacionados:
v “DB2 registry and environment variables” en el manual Administration
Guide: Performance
Una aplicación que utiliza varias hebras es, comprensiblemente, más compleja
que una aplicación de una sola hebra. Esta complejidad adicional puede
conducir potencialmente a algunos problemas inesperados. Cuando escriba
una aplicación de varias hebras, tenga precaución con lo siguiente:
v Dependencias de base de datos entre dos o más contextos.
Cada contexto de una aplicación tiene sus propios recursos de base de
datos, incluidos los bloqueos sobre objetos de base de datos. Esta
característica posibilita que dos contextos, si están accediendo al mismo
objeto de base de datos, lleguen a un punto muerto. El gestor de bases de
datos detectará el punto muerto. Uno de los contextos recibirá SQLCODE
-911 y se retrotraerá la unidad de trabajo del mismo.
v Dependencias de aplicaciones entre dos o más contextos.
Tenga cuidado con las técnicas de programación que establecen
dependencias entre contextos. Los enganches, los semáforos y las secciones
Conceptos relacionados:
v “Cómo evitar puntos muertos para varios contextos” en la página 231
Cómo evitar puntos muertos para varios contextos
contexto 2
get semaphore
access data structure
SELECT * FROM TAB1...
release semaphore
COMMIT
Las técnicas para evitar puntos muertos se describen en términos del ejemplo,
pero las puede aplicar a todas las aplicaciones de varias hebras. En general,
trate el gestor de bases de datos tal como trataría cualquier recurso protegido
y no experimentará problemas con las aplicaciones de varias hebras.
Conceptos relacionados:
v “Problemas potenciales con varias hebras” en la página 230
Consulta relacionada:
v “Programas de ejemplo COBOL” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
Todos los punteros de API tienen una longitud de 4 bytes. Todas las variables
enteras utilizadas como parámetros de valor en las llamadas a las API se
deben declarar con una cláusula USAGE COMP-5.
Los archivos include específicos del lenguaje principal para COBOL tienen la
extensión de archivo .cbl. Si se utiliza la característica ″Soporte para tipo de
datos de sistema principal System/390″ del compilador COBOL de IBM, los
archivos include de DB2 para las aplicaciones se encuentran en el directorio
siguiente:
$HOME/sqllib/include/cobol_i
Por ejemplo:
EXEC SQL SELECT col INTO :hostvar FROM table END-EXEC.
Observe que los caracteres reales utilizados como fin de línea y tabulador
varían en función de la plataforma. Por ejemplo, las plataformas basadas en
Windows utilizan Retorno de carro/Salto de línea como fin de línea,
mientras que los sistemas basados en UNIX sólo utilizan un Salto de línea.
Consulta relacionada:
v Apéndice A, “Sentencias de SQL soportadas” en la página 521
Las variables del lenguaje principal son variables del lenguaje COBOL a las
que se hace referencia en las sentencias de SQL. Permiten que una aplicación
pase datos de entrada al gestor de bases de datos y reciba datos de salida de
éste. Una vez que se ha precompilado la aplicación, el compilador utiliza las
variables del lenguaje principal como cualquier otra variable de COBOL.
Conceptos relacionados:
v “Nombres de variables del lenguaje principal en COBOL” en la página 241
v “Declaraciones de variables del lenguaje principal en COBOL” en la página
242
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en COBOL” en
la página 242
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
fija en COBOL” en la página 243
v “Sintaxis de las variables gráficas del lenguaje principal de longitud fija en
COBOL” en la página 245
v “Sintaxis de las variables del lenguaje principal LOB en COBOL” en la
página 246
v “Sintaxis de las variables del lenguaje principal de localizador de LOB en
COBOL” en la página 248
v “Sintaxis de las variables del lenguaje principal de referencia de archivos en
COBOL” en la página 248
Conceptos relacionados:
v “Declaraciones de variables del lenguaje principal en COBOL” en la página
242
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en COBOL” en
la página 242
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
fija en COBOL” en la página 243
v “Sintaxis de las variables gráficas del lenguaje principal de longitud fija en
COBOL” en la página 245
v “Sintaxis de las variables del lenguaje principal LOB en COBOL” en la
página 246
v “Sintaxis de las variables del lenguaje principal de localizador de LOB en
COBOL” en la página 248
v “Sintaxis de las variables del lenguaje principal de referencia de archivos en
COBOL” en la página 248
Tareas relacionadas:
v “Declaración de variables del lenguaje principal de tipo estructurado” en el
manual Guía de desarrollo de aplicaciones: Programación de aplicaciones de
servidor
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en COBOL” en
la página 242
v “Sintaxis de las variables del lenguaje principal de tipo carácter de longitud
fija en COBOL” en la página 243
v “Sintaxis de las variables gráficas del lenguaje principal de longitud fija en
COBOL” en la página 245
v “Sintaxis de las variables del lenguaje principal LOB en COBOL” en la
página 246
v “Sintaxis de las variables del lenguaje principal de localizador de LOB en
COBOL” en la página 248
v “Sintaxis de las variables del lenguaje principal de referencia de archivos en
COBOL” en la página 248
Sintaxis de las variables numéricas del lenguaje principal en COBOL
Notas:
1 Una alternativa de COMP-3 es PACKED-DECIMAL.
Coma flotante
(1)
aa 01 nombre-variable COMPUTATIONAL-1 a
77 IS COMP-1
USAGE (2)
COMPUTATIONAL-2
COMP-2
a . ac
IS
VALUE valor
Notas:
1 REAL (SQLTYPE 480), Longitud 4
2 DOUBLE (SQLTYPE 480), Longitud 8
Consideraciones sobre las variables numéricas del lenguaje principal:
1. Serie-imagen debe tener uno de los formatos siguientes:
v S9(m)V9(n)
v S9(m)V
v S9(m)
2. Los nueves se pueden expandir (por ejemplo, ″S999″ en lugar de S9(3)″)
3. m y n deben ser enteros positivos.
Sintaxis de las variables del lenguaje principal de tipo carácter de
longitud fija en COBOL
A continuación se muestra la sintaxis de las variables de tipo carácter del
lenguaje principal.
IS
aa 01 nombre-variable PICTURE serie-imagen a
77 PIC
Longitud variable
aa 01 nombre-variable . ac
IS
aa 49 identificador-1 PICTURE S9(4) a
PIC
a . ac
COMP-5 IS
IS COMPUTATIONAL-5 VALUE valor
USAGE
IS
aa 49 identificador-2 PICTURE serie-imagen a
PIC
a . ac
IS
VALUE valor
Sin embargo, y puesto que los espacios en blanco pueden ser significativos
en las contraseñas, la variable del lenguaje principal p-word se debe
declarar como un elemento de datos VARCHAR, de forma que la
aplicación pueda indicar explícitamente la longitud significativa de la
contraseña para la sentencia CONNECT, del modo siguiente:
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 dbname PIC X(8).
01 userid PIC X(8).
01 p-word.
49 L PIC S9(4) COMP-5.
49 D PIC X(18).
EXEC SQL END DECLARE SECTION END-EXEC.
PROCEDURE DIVISION.
MOVE "sample" TO dbname.
MOVE "userid" TO userid.
MOVE "password" TO D OF p-word.
MOVE 8 TO L of p-word.
EXEC SQL CONNECT TO :dbname USER :userid USING :p-word
END-EXEC.
Sintaxis de las variables gráficas del lenguaje principal en COBOL: Longitud fija
IS
aa 01 nombre-variable PICTURE serie-imagen USAGE a
77 PIC
IS
a DISPLAY-1 . ac
IS
VALUE valor
Longitud variable
aa 01 nombre-variable . ac
a . ac
COMP-5 IS
IS COMPUTATIONAL-5 VALUE valor
USAGE
IS
aa 49 identificador-2 PICTURE serie-imagen USAGE a
PIC
IS
a DISPLAY-1 . ac
IS
VALUE valor
Las variables de indicador se deben declarar con tipo de datos PIC S9(4)
COMP-5.
Conceptos relacionados:
v “Tablas de indicadores en COBOL” en la página 251
Sintaxis de las variables del lenguaje principal LOB en COBOL
Ejemplo de BLOB:
La declaración:
01 MY-BLOB USAGE IS SQL TYPE IS BLOB(2M).
01 MY-BLOB.
49 MY-BLOB-LENGTH PIC S9(9) COMP-5.
49 MY-BLOB-DATA PIC X(2097152).
Ejemplo de CLOB:
La declaración:
01 MY-CLOB USAGE IS SQL TYPE IS CLOB(125M).
Ejemplo de DBCLOB:
La declaración:
01 MY-DBCLOB USAGE IS SQL TYPE IS DBCLOB(30000).
La declaración:
01 MY-LOCATOR USAGE SQL TYPE IS BLOB-LOCATOR.
Se puede hacer referencia al grupo entero como una sola variable del lenguaje
principal en una sentencia de SQL:
EXEC SQL SELECT id, name, dept, job
INTO :staff-record
FROM staff WHERE id = 10 END-EXEC.
Método 2.
Suponiendo que no existen otras variables del lenguaje principal que tengan
los mismos nombres que los subordinados de staff-record, la sentencia
anterior también se puede codificar como en el método 3, eliminando la
calificación explícita de grupo.
Método 3.
Método 4.
Para resolver la referencia ambigua, puede utilizar una calificación parcial del
elemento subordinado, por ejemplo:
EXEC SQL SELECT id, name, dept, job
INTO
:staff-id,
:staff-name,
:staff-info.staff-dept,
:staff-info.staff-job
FROM staff WHERE id = 10 END-EXEC.
Aquí, la sentencia CONNECT espera una sola variable del lenguaje principal
basada en caracteres. Proporcionando en su lugar el elemento de datos de
grupos staff-record, la variable del lenguaje principal tiene como resultado
el error de precompilación siguiente:
SQL0087N La variable del lenguaje principal "staff-record" es una estructura
que se utiliza donde no se permiten referencias a estructuras.
Otros usos de los elementos de grupos que pueden ocasionar que se produzca
un error SQL0087N incluyen: PREPARE, EXECUTE IMMEDIATE, CALL,
variables de indicador y referencias a SQLDA. Los grupos que sólo tienen un
subordinado están permitidos en ambas situaciones, puesto que se trata de
referencias a subordinados individuales, como en los métodos 2, 3 y 4
anteriores.
Tablas de indicadores en COBOL
Por ejemplo:
Conceptos relacionados:
v “Variables de indicador en COBOL” en la página 246
REDEFINES en elementos de datos de grupos COBOL
o
... INTO :a1 ...
Sección declare de SQL con variables del lenguaje principal para COBOL
Consulta relacionada:
v “Tipos de datos de SQL soportados en COBOL” en la página 254
1<=n<=32 672
32 673<=n<=32 700
CLOB(n) 01 MY-CLOB USAGE IS SQL TYPE IS CLOB(n). Serie de caracteres de
(408 ó 409) longitud variable y objeto
1<=n<=2 147 483 647 grande
4
Variable de localizador CLOB 01 MY-CLOB-LOCATOR USAGE IS SQL TYPE IS Identifica las entidades
(964 ó 965) CLOB-LOCATOR. CLOB que residen en el
servidor
Variable de referencia de 01 MY-CLOB-FILE USAGE IS SQL TYPE IS Descriptor de archivo que
archivo CLOB4 CLOB-FILE. contiene datos CLOB
(920 ó 921)
BLOB(n) 01 MY-BLOB USAGE IS SQL TYPE IS BLOB(n). Serie binaria de longitud
(404 ó 405) variable y objeto grande
1<=n<=2 147 483 647
4
Variable de localizador BLOB 01 MY-BLOB-LOCATOR USAGE IS SQL TYPE IS Identifica las entidades
(960 ó 961) BLOB-LOCATOR. BLOB que residen en el
servidor
Variable de referencia de archivo 01 MY-CLOB-FILE USAGE IS SQL TYPE IS Descriptor de archivo que
BLOB4 (916 ó 917) CLOB-FILE. contiene datos CLOB
DATE (384 ó 385) 01 identifier PIC X(10). Serie de caracteres de 10
bytes
TIME (388 ó 389) 01 identifier PIC X(8). Serie de caracteres de 8
bytes
TIMESTAMP (392 ó 393) 01 identifier PIC X(26). Serie de caracteres de 26
bytes
Nota: los tipos de datos siguientes sólo están disponibles en el entorno DBCS.
GRAPHIC(n) 01 name PIC G(n) DISPLAY-1. Serie de caracteres de
(468 ó 469) doble byte y longitud fija
VARGRAPHIC(n) 01 name. Serie de caracteres de
(464 ó 465) 49 length PIC S9(4) COMP-5. doble byte y longitud
49 name PIC G(n) DISPLAY-1. variable con indicador de
longitud de serie de 2
1<=n<=16 336 bytes
LONG VARGRAPHIC 01 name. Serie de caracteres de
(472 ó 473) 49 length PIC S9(4) COMP-5. doble byte y longitud
49 name PIC G(n) DISPLAY-1. variable con indicador de
longitud de serie de 2
16 337<=n<=16 350 bytes
Notas:
1. El primer número que se encuentra bajo Tipo de columna SQL indica que no se proporciona una variable de
indicador, y el segundo número indica que se proporciona una variable de indicador. Se necesita una variable de
indicador para indicar los valores nulos (NULL) o para contener la longitud de una serie truncada. Éstos son los
valores que aparecerán en el campo SQLTYPE del SQLDA para estos tipos de datos.
2. FLOAT(n) donde 0 < n < 25 es un sinónimo de REAL. La diferencia entre REAL y DOUBLE en el SQLDA es el
valor de la longitud (4 ó 8).
3. Los tipos SQL siguientes son sinónimos de DOUBLE:
v FLOAT
v FLOAT(n) donde 24 < n < 54 es
v DOUBLE PRECISION
4. Éste no es un tipo de columna, sino un tipo de variable del lenguaje principal.
Conceptos relacionados:
v “Sección declare de SQL con variables del lenguaje principal para COBOL”
en la página 253
Tipos de datos BINARY/COMP-4 de COBOL
Consulta relacionada:
v “Tipos de datos de SQL soportados en COBOL” en la página 254
Para las aplicaciones formadas por varios archivos fuente, las declaraciones
SQLCODE y SQLSTATE se pueden incluir en cada uno de los archivos fuente,
tal como en el ejemplo anterior.
Los datos gráficos enviados desde una aplicación que se ejecuta bajo un juego
de códigos eucJp o eucTW, o se conecta a una base de datos UCS-2, se
identifican con el identificador de la página de códigos UCS-2. La aplicación
debe convertir una serie de caracteres gráficos a UCS-2 antes de enviarla al
servidor de base de datos. Del mismo modo, los datos gráficos recuperados
de una base de datos UCS-2 por una aplicación, o de cualquier base de datos
por una aplicación que se ejecute bajo una página de códigos EUC eucJP o
eucTW, se codifican utilizando UCS-2. Esto requiere que la aplicación realice
internamente una conversión de UCS-2 a la página de códigos de la
aplicación, a menos que se vayan a presentar datos UCS-2 al usuario.
Conceptos relacionados:
v “Consideraciones sobre los juegos de códigos EUC y UCS-2 de japonés y
chino tradicional” en la página 444
Consulta relacionada:
v “Función escalar VARCHAR” en el manual Consulta de SQL, Volumen 1
v “Función escalar VARGRAPHIC” en el manual Consulta de SQL, Volumen 1
Consulta relacionada:
v “sqlgdref - Dereference Address” en el manual Administrative API Reference
v “sqlgaddr - Get Address” en el manual Administrative API Reference
v “sqlgmcpy - Copy Memory” en el manual Administrative API Reference
Líneas de depuración y de comentario en FORTRAN
Algunos compiladores de FORTRAN tratan las líneas que contienen una 'D' o
una 'd' en la columna 1 como líneas condicionales. Estas líneas se pueden
compilar para su depuración o se pueden tratar como comentarios. El
precompilador siempre tratará las líneas que contienen una 'D' o una 'd' en la
columna 1 como comentarios.
Consideraciones sobre la precompilación en FORTRAN
Consulta relacionada:
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Archivos include
Las siguientes secciones describen los archivos include correspondientes a
FORTRAN.
Archivos include para FORTRAN
Los archivos include específicos del lenguaje principal para FORTRAN tienen
la extensión .f en plataformas basadas en UNIX y la extensión .for en
plataformas basadas en Windows. Puede utilizar los siguientes archivos
include de FORTRAN en las aplicaciones.
SQL (sql.f) Este archivo incluye prototipos específicos del lenguaje para el
vinculador, el precompilador y las API de recuperación de
mensajes de error. También define constantes del sistema.
SQLAPREP (sqlaprep.f)
Este archivo contiene definiciones necesarias para escribir su
propio precompilador.
SQLCA (sqlca_cn.f, sqlca_cs.f)
Este archivo define la estructura del Área de comunicaciones
de SQL (SQLCA). El SQLCA contiene variables que utiliza el
gestor de bases de datos para proporcionar a una aplicación
información de error sobre la ejecución de sentencias de SQL
y llamadas a API.
Se proporcionan dos archivos SQLCA para las aplicaciones
FORTRAN. El valor por omisión, sqlca_cs.f, define la
estructura SQLCA en un formato compatible con SQL de IBM.
El archivo sqlca_cn.f, precompilado con la opción SQLCA
NONE, define la estructura SQLCA para un mejor rendimiento.
SQLCA_92 (sqlca_92.f)
Este archivo contiene una versión que se ajusta a FIPS SQL92
Entry Level de la estructura Área de comunicaciones de SQL
(SQL Communications Area (SQLCA)). Se debe incluir este
archivo en lugar de los archivos sqlca_cn.f o sqlca_cs.f
cuando se escriban aplicaciones DB2 que se ajusten al
estándar FIPS SQL92 Entry Level. El precompilador de DB2
Conceptos relacionados:
v “Archivos include en aplicaciones FORTRAN” en la página 266
Archivos include en aplicaciones FORTRAN
Existen dos métodos para incluir archivos: la sentencia EXEC SQL INCLUDE
y la sentencia INCLUDE de FORTRAN. El precompilador pasará por alto las
sentencias INCLUDE de FORTRAN y sólo procesará los archivos incluidos
mediante la sentencia EXEC SQL.
Consulta relacionada:
v “Archivos include para FORTRAN” en la página 263
Por ejemplo:
EXEC SQL SELECT COL INTO :hostvar FROM TABLE
Observe que los caracteres reales utilizados como fin de línea y tabulador
varían en función de la plataforma. Por ejemplo, las plataformas basadas en
Windows utilizan Retorno de carro/Salto de línea como fin de línea,
mientras que las plataformas basadas en UNIX sólo utilizan un Salto de
línea.
Consulta relacionada:
v Apéndice A, “Sentencias de SQL soportadas” en la página 521
Las variables del lenguaje principal son variables del lenguaje FORTRAN a las
que se hace referencia en sentencias de SQL. Permiten que una aplicación pase
datos de entrada al gestor de bases de datos y reciba datos de salida de éste.
Una vez que se ha precompilado la aplicación, el compilador utiliza las
variables del lenguaje principal como cualquier otra variable de FORTRAN.
Conceptos relacionados:
v “Nombres de variables del lenguaje principal en FORTRAN” en la página
269
v “Declaraciones de variables del lenguaje principal en FORTRAN” en la
página 270
v “Variables de indicador en FORTRAN” en la página 273
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en FORTRAN”
en la página 271
v “Sintaxis de las variables de tipo carácter del lenguaje principal en
FORTRAN” en la página 271
v “Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
FORTRAN” en la página 273
v “Sintaxis de las variables del lenguaje principal de localizador de objeto
grande (LOB) en FORTRAN” en la página 274
v “Sintaxis de las variables del lenguaje principal de referencia de archivos en
FORTRAN” en la página 275
Nombres de variables del lenguaje principal en FORTRAN
Conceptos relacionados:
v “Declaraciones de variables del lenguaje principal en FORTRAN” en la
página 270
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en FORTRAN”
en la página 271
Tareas relacionadas:
v “Declaración de variables del lenguaje principal de tipo estructurado” en el
manual Guía de desarrollo de aplicaciones: Programación de aplicaciones de
servidor
Consulta relacionada:
v “Sintaxis de las variables numéricas del lenguaje principal en FORTRAN”
en la página 271
v “Sintaxis de las variables de tipo carácter del lenguaje principal en
FORTRAN” en la página 271
v “Sintaxis de las variables del lenguaje principal de objeto grande (LOB) en
FORTRAN” en la página 273
v “Sintaxis de las variables del lenguaje principal de localizador de objeto
grande (LOB) en FORTRAN” en la página 274
v “Sintaxis de las variables del lenguaje principal de referencia de archivos en
FORTRAN” en la página 275
aa INTEGER*2 b nombrevar ac
INTEGER*4 / valor-inicial /
REAL*4
REAL *8
DOUBLE PRECISION
aa CHARACTER b nombrevar ac
*n / valor-inicial /
Longitud variable
,
Ejemplo de VARCHAR:
La declaración:
sql type is varchar(1000) my_varchar
La declaración:
sql type is varchar(10000) my_lvarchar
Ejemplo de BLOB:
La declaración:
sql type is blob(2m) my_blob
Ejemplo de CLOB:
La declaración:
sql type is clob(125m) my_clob
La declaración:
SQL TYPE IS CLOB_LOCATOR my_locator
character my_file(267)
integer*4 my_file_name_length
integer*4 my_file_data_length
integer*4 my_file_file_options
character*255 my_file_name
equivalence( my_file(1),
+ my_file_name_length )
equivalence( my_file(5),
+ my_file_data_length )
Consulta relacionada:
v “Tipos de datos SQL soportados en FORTRAN” en la página 276
Notas:
1. El primer número que se encuentra bajo Tipo de columna SQL indica que no se proporciona una variable de
indicador, y el segundo número indica que se proporciona una variable de indicador. Se necesita una variable de
indicador para indicar los valores nulos (NULL) o para contener la longitud de una serie truncada. Éstos son los
valores que aparecerán en el campo SQLTYPE del SQLDA para estos tipos de datos.
2. FLOAT(n) donde 0 < n < 25 es un sinónimo de REAL. La diferencia entre REAL y DOUBLE en el SQLDA es el
valor de la longitud (4 ó 8).
3. Los tipos SQL siguientes son sinónimos de DOUBLE:
v FLOAT
v FLOAT(n) donde 24 < n < 54 es
v DOUBLE PRECISION
4. Éste no es un tipo de columna, sino un tipo de variable del lenguaje principal.
Conceptos relacionados:
v “Sección declare de SQL con variables del lenguaje principal para
FORTRAN” en la página 276
Los datos gráficos enviados desde una aplicación que se ejecuta bajo un juego
de códigos eucJp o eucTW, o se conecta a una base de datos UCS-2, se
identifican con el identificador de la página de códigos UCS-2. La aplicación
debe convertir una serie de caracteres gráficos a UCS-2 antes de enviarla al
servidor de base de datos. Del mismo modo, los datos gráficos recuperados
de una base de datos UCS-2 por una aplicación, o de cualquier base de datos
por una aplicación que se ejecute bajo una página de códigos EUC eucJP o
Conceptos relacionados:
v “Consideraciones sobre los juegos de códigos EUC y UCS-2 de japonés y
chino tradicional” en la página 444
Consulta relacionada:
v “Función escalar VARCHAR” en el manual Consulta de SQL, Volumen 1
v “Función escalar VARGRAPHIC” en el manual Consulta de SQL, Volumen 1
Para aplicaciones que contienen varios archivos fuente, se pueden incluir las
declaraciones de SQLCOD y SQLSTATE en cada archivo fuente, tal como se ha
mostrado anteriormente.
Consulta relacionada:
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Consulta relacionada:
v “Programas de ejemplo JDBC” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Programas de ejemplo SQLJ” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
JDBC y SQLj
Las secciones siguientes comparan JDBC y SQLj y describen la
interoperatividad y las sesiones compartidas entre JDBC y SQLj.
Comparación entre SQLj y JDBC
La API JDBC le permite escribir programas Java que realizan llamadas de SQL
dinámico a bases de datos. Las aplicaciones SQLj utilizan JDBC como base
para tareas como conectar con las bases de datos y manejar errores de SQL,
pero también pueden contener sentencias de SQL estático incorporado en los
archivos fuente SQLj. Debe convertir un archivo fuente SQLj con el conversor
de SQLj antes de compilar el código fuente Java resultante.
Interoperatividad entre JDBC y SQLj
Conceptos relacionados:
v “Sesiones compartidas entre JDBC y SQLj” en la página 285
v “Gestión de recursos de conexión en Java” en la página 286
Sesiones compartidas entre JDBC y SQLj
JDBC define los valores por omisión para el estado de sesión de conexiones
recién creadas. En la mayoría de los casos, SQLj adopta estos valores por
omisión. Sin embargo, mientras que una conexión JDBC recién creada tiene la
modalidad de confirmación automática activada por omisión, un contexto de
conexión SQLj requiere que la modalidad de confirmación automática se
especifique de forma explícita durante la construcción.
Conceptos relacionados:
v “Interoperatividad entre JDBC y SQLj” en la página 284
v “Gestión de recursos de conexión en Java” en la página 286
Tanto los objetos de contexto de conexión SQLj como los objetos de conexión
JDBC responden al método close(). Cuando se escribe un programa SQLj,
resulta suficiente llamar al método close() sólo en el objeto de contexto de
conexión; al cerrar el contexto de conexión también se cierra la conexión JDBC
asociada al mismo. Sin embargo, no es suficiente cerrar sólo la conexión JDBC
que devuelve el método getConnection() de un contexto de conexión: el
método close() de una conexión JDBC no hace que se cierre el contexto de
conexión que la contiene, y por lo tanto los recursos que mantiene el contexto
de conexión no se liberan hasta que se recopilan como basura.
Conceptos relacionados:
v “Interoperatividad entre JDBC y SQLj” en la página 284
v “Sesiones compartidas entre JDBC y SQLj” en la página 285
Para establecer el entorno de modo que la JVM pueda encontrar los archivos
de clases Java, es posible que tenga que definir el parámetro de configuración
jdk_path o utilizar el valor por omisión. Además, es posible que tenga que
definir el parámetro de configuración java_heap_sz para aumentar el tamaño
del almacenamiento dinámico correspondiente a la aplicación.
Tareas relacionadas:
v “Actualización de clases Java para tiempo de ejecución” en la página 289
Consulta relacionada:
v “Maximum Java Interpreter Heap Size configuration parameter -
java_heap_sz” en el manual Administration Guide: Performance
v “Java Development Kit Installation Path configuration parameter -
jdk_path” en el manual Administration Guide: Performance
Procedimiento:
Cuando actualice clases de rutinas Java, debe también emitir una sentencia
CALL SQLJ.REFRESH_CLASSES() para hacer que DB2 cargue las nuevas
clases. Si no emite la sentencia CALL SQLJ.REFRESH_CLASSES() después de
actualizar las clases de rutinas Java, DB2 continúa utilizando las versiones
anteriores de las clases. La sentencia CALL SQLJ.REFRESH_CLASSES() sólo se
aplica a rutinas FENCED. DB2 renueva las clases cuando se produce una
operación COMMIT o ROLLBACK.
Paquetes de Java
Para utilizar las bibliotecas de clases que se incluyen con DB2 en sus propias
aplicaciones, debe incluir las sentencias import package adecuadas al principio
de los archivos fuente. Puede utilizar los siguientes paquetes en las
aplicaciones Java:
java.sql.*
La API JDBC que se incluye en JDK. Debe importar este paquete en
cada programa JDBC y SQLj.
sqlj.runtime.*
Soporte de SQLj que se incluye con cada cliente DB2. Debe importar
este paquete en cada programa SQLj.
sqlj.runtime.ref.*
Soporte de SQLj que se incluye con cada cliente DB2. Debe importar
este paquete en cada programa SQLj.
Todas las variables del lenguaje principal especificadas en SQL compuesto son
por omisión variables del lenguaje principal de entrada. Tiene que especificar
Nota: no hay soporte de variables del lenguaje principal para el tipo de datos
DATALINK en ninguno de los lenguajes de programación soportados
por DB2.
Tabla 17. Tipos de datos SQL correlacionados con declaraciones Java
Tipo de columna SQL Tipo de datos Java Descripción del tipo de columna SQL
SMALLINT (500 ó 501)
short Entero con signo de 16 bits
INTEGER int Entero con signo de 32 bits
(496 ó 497)
BIGINT long Entero con signo de 64 bits
(492 ó 493)
REAL float Coma flotante de precisión simple
(480 ó 481)
DOUBLE double Coma flotante de precisión doble
(480 ó 481)
DECIMAL(p,s)(484 ó 485) java.math.BigDecimal Decimal empaquetado
CHAR(n) java.lang.String Serie de caracteres de longitud fija con
(452 ó 453) longitud n, donde n va de 1 a 254
CHAR(n) byte[] Serie de caracteres de longitud fija con
FOR BIT DATA longitud n, donde n va de 1 a 254
VARCHAR(n) java.lang.String Serie de caracteres de longitud variable
(448 ó 449)
VARCHAR(n) byte[] Serie de caracteres de longitud variable
FOR BIT DATA
LONG VARCHAR java.lang.String Serie de caracteres de longitud variable
(456 ó 457) larga
Conceptos relacionados:
v “Programación en SQLj” en la página 302
Tareas relacionadas:
v “Codificación de aplicaciones y applets JDBC” en la página 294
La siguiente figura muestra cómo funciona una aplicación JDBC de tipo 2 con
DB2. Las llamadas a JDBC se convierten en llamadas a DB2 a través de
métodos nativos de Java. JDBC solicita flujo del cliente DB2 al servidor DB2.
Aplicación SQLJ
Clases en tiempo
de ejecución SQLJ
Base de datos
remota
Aplicacion
Java JDBC Cliente DB2
Aplicación
Java
Sistema principal
Navegador de Web
de servidor de Web
HTTPd
Applet SQLJ
Servidor JDBC
Base de datos
Clases en tiempo local de DB2
de ejecución SQLJ
CLI
HTTP
Applet Socket
Java/ Cliente TCP/IP
JDBC JDBC
Base de datos
remota de DB2
Los applets SQLj añaden el controlador del cliente SQLj en la parte superior
del controlador del cliente JDBC, pero por lo demás funcionan igual que los
applets JDBC.
Programación en JDBC
Las secciones siguientes describen cómo crear aplicaciones JDBC.
Codificación de aplicaciones y applets JDBC
Las aplicaciones y applets JDBC suelen seguir una lógica de programa similar.
Conceptos relacionados:
v “Ejemplo de un programa JDBC” en la página 296
Especificación JDBC
Conceptos relacionados:
Ejemplos relacionados:
v “TbMod.java -- How to modify table data (JDBC)”
v “TbMod.out -- HOW TO MODIFY TABLE DATA (JDBC)”
v “TutMod.java -- Modify data in a table (JDBC)”
v “TutMod.out -- HOW TO MODIFY DATA IN A TABLE (JDBC)”
Distribución de aplicaciones JDBC mediante el controlador de tipo 2
Tareas relacionadas:
v “Creación de aplicaciones JDBC” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
Distribución y ejecución de applets JDBC del controlador de tipo 4
Al igual que otros applets Java, el applet JDBC se distribuye por la red
(intranet o Internet). Normalmente, incorporaría el applet en una página de
lenguaje de marcación de hipertexto (HTML). Por ejemplo, para llamar al
applet de ejemplo DB2Applt.java, (que se suministra en sqllib/samples/java),
puede utilizar el siguiente código <APPLET>:
Para ejecutar el applet, sólo necesita un navegador Web habilitado para Java
en la máquina cliente (es decir, no necesita instalar un cliente DB2 en la
máquina cliente). Cuando carga la página HTML, el código del applet indica
al navegador que descargue el applet Java y la biblioteca de clases db2jcc.jar,
que incluye el controlador JDBC de DB2 que implanta la clase
com.ibm.db2.jcc.DB2Driver. Cuando el applet llama a la API JDBC para
conectar con DB2, el controlador JDBC establece comunicaciones separadas
con la base de datos DB2 a través del servidor de applets JDBC que se ejecuta
en el servidor Web.
Nota: para asegurar que el navegador Web baja db2jcc.jar desde el servidor,
asegúrese de que la variable de entorno CLASSPATH en el cliente no
incluye db2jcc.jar. Es posible que el applet no funcione correctamente si
el cliente utiliza una versión local de db2jcc.jar.
Tareas relacionadas:
v “Creación de applets JDBC” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
Excepciones ocasionadas por una falta de correspondencia de archivos
db2java.zip cuando se utiliza el controlador JDBC de tipo 3
JDBC Versión 2.1 de Sun tiene dos partes definidas: la API central y la API de
paquete opcional. Para obtener información sobre la especificación JDBC,
consulte el sitio Web de Java de DB2 Universal Database.
Conceptos relacionados:
v “Restricciones de la API central de JDBC 2.1 por parte del controlador JDBC
de DB2 de tipo 2” en la página 299
v “Soporte de la API de paquete opcional de JDBC 2.1 por parte del
controlador de JDBC de DB2 de tipo 2” en la página 300
v “Restricciones de la API central JDBC 2.1 impuestas por el controlador
JDBC de DB2 de tipo 4” en la página 300
v “Soporte de la API Paquete opcional de JDBC 2.1 por parte del controlador
JDBC de DB2 de tipo 4” en la página 302
Tareas relacionadas:
v “Configuración del entorno Java” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
Restricciones de la API central de JDBC 2.1 por parte del controlador
JDBC de DB2 de tipo 2
Conceptos relacionados:
v “Soporte de la API de paquete opcional de JDBC 2.1 por parte del
controlador de JDBC de DB2 de tipo 2” en la página 300
Restricciones de la API central JDBC 2.1 impuestas por el controlador
JDBC de DB2 de tipo 4
Conceptos relacionados:
Programación en SQLj
Las secciones siguientes describen cómo crear aplicaciones SQLj.
Programación en SQLj
Conceptos relacionados:
v “Soporte de DB2 para SQLj” en la página 303
v “Restricciones de DB2 en SQLj” en la página 304
Soporte de DB2 para SQLj
El soporte de SQLj de DB2 se proporciona mediante DB2 Application
Development Client. Junto con el soporte de JDBC que proporciona el cliente
DB2, el soporte de SQLj de DB2 le permite crear, construir y ejecutar
aplicaciones, applets, procedimientos almacenados y funciones definidas por
el usuario (UDF) de SQL incorporado para Java. Estas aplicaciones pueden
contener SQL estático y utilizar sentencias de SQL incorporado que se
vinculan a una base de datos DB2.
Conceptos relacionados:
v “Restricciones de DB2 en SQLj” en la página 304
Consulta relacionada:
v “db2profc - Mandato Personalizador de perfiles SQLj de DB2” en el manual
Consulta de mandatos
v “db2profp - Mandato Impresora de perfiles SQLj de DB2” en el manual
Consulta de mandatos
Restricciones de DB2 en SQLj
Cuando cree aplicaciones DB2 con SQLj, debe tener en cuenta las siguientes
restricciones:
v El soporte de SQLj de DB2 cumple con las restricciones estándar de DB2
Universal Database sobre la emisión de sentencias de SQL.
v Una sentencia UPDATE y DELETE posicionada no es una subsentencia
válida en una sentencia de SQL compuesto.
v La opción de precompilación ″DATETIME″ no recibe soporte. Sólo reciben
soporte los formatos de fecha y hora de la Organización Internacional de
Estándares (ISO).
v La opción de precompilación ″PACKAGE USING package-name″ especifica
el nombre del paquete que debe generar el conversor. Si no se especifica
ningún nombre, se utiliza el nombre del perfil (menos extensión y
convertido a mayúsculas). La longitud máxima es de 8 caracteres. Puesto
que el nombre del perfil de SQLj tiene el sufijo _SJProfileN, donde N es el
número clave del perfil, el nombre del perfil siempre tendrá más de 8
caracteres. El nombre de paquete por omisión se construirá concatenando
los primeros (8 - pfKeyNumLen) caracteres del número de perfil y el número
clave del perfil, donde pfKeyNumLen es la longitud del número clave del
o
java sqlj.runtime.profile.util.SerProfileToClass Applt_SJProfile0.ser
Las cláusulas SQLj más sencillas son las cláusulas ejecutables y consisten en el
símbolo #sql seguido de una sentencia de SQL entre llaves. Por ejemplo, la
siguiente cláusula SQLj puede aparecer en cualquier lugar en el que pueda
aparecer de forma válida una sentencia de Java. Su objetivo es eliminar todas
las filas de la tabla denominada TAB:
#sql { DELETE FROM TAB };
En una cláusula ejecutable SQLj, los símbolos que aparecen dentro de las
llaves son símbolos de SQL, excepto las variables del lenguaje principal. Todas
las variables del lenguaje principal se distinguen por el carácter de dos puntos
para que el conversor las pueda identificar. Los símbolos de SQL nunca
aparecen fuera de las llaves de una cláusula ejecutable SQLj. Por ejemplo, el
siguiente método Java inserta sus argumentos en una tabla de SQL. La parte
principal del método cosiste en una cláusula ejecutable SQLj que contiene las
variables del lenguaje principal x, y y z:
void m (int x, String y, float z) throws SQLException
{
#sql { INSERT INTO TAB1 VALUES (:x, :y, :z) };
}
por lo siguiente:
int i=0;
#sql [ctx] itr[i] = { SELECT id, name FROM staff };
i=1;
#sql [ctx] itr[i] = { SELECT id, name FROM staff };
Conceptos relacionados:
v “Declaraciones y comportamiento del iterador en SQLj” en la página 307
Declaraciones y comportamiento del iterador en SQLj
A diferencia de las sentencias de SQL que recuperan datos de una tabla, las
aplicaciones que llevan a cabo operaciones UPDATE y DELETE posicionadas
o que utilizan iteradores con los atributos holdability o returnability
necesitan dos archivos fuente Java. Declare el iterador como public en un
archivo fuente, agregando la cláusula with e implements según convenga.
Conceptos relacionados:
v “Ejemplo de iteradores en un programa SQLj” en la página 308
Ejemplo de iteradores en un programa SQLj
// declarar un cursor
#sql namedIter = {SELECT deptno as deptnumb, deptname
FROM department
WHERE admrdept = ’A00’};
// cerrar el cursor
namedIter.close();
v Vinculación posicional a columnas
// declarar cursor
#sql posIter = {SELECT deptno as deptnumb, deptname
FROM department
WHERE admrdept = ’A00’};
// captar el cursor
#sql {FETCH :posIter INTO :deptnumb, :deptname};
while (!posIter.endFetch())
{
System.out.println( deptnumb + ", " + deptname );
#sql {FETCH :posIter INTO :deptnumb, :deptname};
}
// cerrar el cursor
posIter.close();
Ejemplos relacionados:
v “TbRead.out -- HOW TO READ TABLE DATA (SQLJ)”
v “TbRead.sqlj -- How to read table data (SQLj)”
Llamadas a rutinas en SQLj
Conceptos relacionados:
v “Referencias a funciones” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
v “Vías de acceso y nombres de rutina” en el manual Guía de desarrollo de
aplicaciones: Programación de aplicaciones de servidor
v “Referencias a procedimientos almacenados” en el manual Guía de desarrollo
de aplicaciones: Programación de aplicaciones de servidor
Tareas relacionadas:
v “Creación de rutinas SQLJ” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Invocación de procedimientos almacenados” en el manual Guía de
desarrollo de aplicaciones: Programación de aplicaciones de servidor
v “Invocación de rutinas” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
v “Invocación de UDF” en el manual Guía de desarrollo de aplicaciones:
Programación de aplicaciones de servidor
v “Invocación de funciones de tabla definidas por el usuario” en el manual
Guía de desarrollo de aplicaciones: Programación de aplicaciones de servidor
Consulta relacionada:
v “Programas de ejemplo SQLJ” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
Ejemplo de compilación y ejecución de un programa SQLj
en el perfil generado. Cuando establezca conexión con una base de datos DB2
Universal Database, DB2 personalizará la sentencia VALUE como:
VALUES(F(?)) INTO ?
pero cuando establezca conexión con una base de datos DB2 Universal
Database para OS/390 y z/OS, DB2 personalizará la sentencia VALUE como:
Tareas relacionadas:
v “Creación de applets SQLJ” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Creación de aplicaciones SQLJ” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
v “Creación de rutinas SQLJ” en el manual Guía de desarrollo de aplicaciones:
Creación y ejecución de aplicaciones
v “Creación de programas SQLJ” en el manual Guía de desarrollo de
aplicaciones: Creación y ejecución de aplicaciones
Opciones del conversor SQLj
Conceptos relacionados:
v “Recurso de rastreo de CLI/ODBC/JDBC” en la página 313
v “Archivos de rastreo de CLI y JDBC” en la página 324
Consulta relacionada:
v “db2trc - Mandato Rastrear” en el manual Consulta de mandatos
Recurso de rastreo de CLI/ODBC/JDBC
Hay tres formas de modificar el archivo db2cli.ini para configurar los recursos
de rastreo de CLI de DB2 y de JDBC de DB2:
v utilizar el Asistente de configuración de DB2, si está disponible
v editar de forma manual el archivo db2cli.ini mediante un editor de texto
v emitir el mandato UPDATE CLI CFG desde el procesador de línea de
mandatos
Por ejemplo, el siguiente mandato, emitido desde el procesador de línea de
mandatos, actualiza el archivo db2cli.ini y habilita el recurso de rastreo JDBC:
db2 UPDATE CLI CFG FOR SECTION COMMON USING jdbctrace 1
Notas:
1. Normalmente, las opciones de configuración de rastreo CLI de DB2 y
JDBC de DB2 sólo se leen desde el archivo de configuración db2cli.ini en
el momento en que se inicializa una aplicación. Sin embargo, se puede
utilizar una opción de rastreo especial de db2cli.ini,
TRACEREFRESHINTERVAL, para indicar un intervalo en el que se deben
volver a leer las opciones específicas de rastreo de CLI de DB2 desde el
archivo db2cli.ini.
2. El recurso de rastreo de CLI de DB2 también se puede configurar de
forma dinámica estableciendo los atributos de entorno SQL_ATTR_TRACE
y SQL_ATTR_TRACEFILE. Estos valores alterarán temporalmente los
valores contenidos en el archivo db2cli.ini.
Nota: puesto que las palabras clave de rastreo de CLI de DB2 aparecen en la
sección [COMMON] del archivo db2cli.ini, sus valores se aplican a
todas las conexiones de bases de datos a través del controlador de CLI
de DB2.
Las palabras clave de rastreo de CLI de DB2 que se pueden definir son:
v TRACE
v TRACEFILENAME
v TRACEPATHNAME
v TRACEFLUSH
v TRACEREFRESHINTERVAL
v TRACECOMM
v TRACETIMESTAMP
v TRACEPIDTID
v TRACEPIDLIST
v TRACETIME
v TRACESTMTONLY
Nota: las palabras clave de rastreo de CLI de DB2 sólo se leen del archivo
db2cli.ini una vez, en el momento de inicialización de la aplicación, a
no ser que esté establecida la palabra clave
TRACEREFRESHINTERVAL. Si esta palabra clave está establecida, las
palabras clave TRACE y TRACEPIDLIST se vuelven a leer del archivo
db2cli.ini en el intervalo especificado y se aplican, según proceda, a la
aplicación que se esté ejecutando en ese momento.
TRACE = 0 | 1
La palabra clave TRACE determina si las palabras clave de rastreo de
CLI de DB2 tienen o no efecto. Si esta palabra clave no está
establecida o está establecida en el valor por omisión (0), el recurso de
rastreo de CLI de DB2 está inhabilitado. Si esta palabra clave tiene el
valor 1, el recurso de rastreo de CLI de DB2 está habilitado y se
tienen en cuenta otras palabras clave de rastreo.
Por sí misma, la palabra clave TRACE tiene poco efecto (excepto para
habilitar el proceso del recurso de rastreo de CLI de DB2). No se
genera ninguna salida de rastreo a no ser que también se especifique
la palabra clave TRACEPATHNAME o TRACEFILENAME.
TRACEFILENAME = <nombre_archivo_rastreo_completamente_calificado>
El nombre completamente calificado del archivo de registro en el que
se graba toda la información de rastreo de CLI de DB2.
Nota: puesto que las palabras clave de rastreo de JDBC de DB2 aparecen en
la sección [COMMON] del archivo db2cli.ini, sus valores se aplican a
todas las conexiones de bases de datos a través del controlador de
JDBC de DB2.
Las palabras clave de rastreo de JDBC de DB2 que se pueden definir son:
v JDBCTRACE
v JDBCTRACEPATHNAME
v JDBCTRACEFLUSH
JDBCTRACE = 0 | 1
La palabra clave JDBCTRACE controla si las otras palabras clave de
rastreo de JDBC de DB2 tienen o no efecto en la ejecución del
programa. Si se establece JDBCTRACE en su valor por omisión (0), se
inhabilita el recurso de rastreo de JDBC de DB2; si se establece
JDBCTRACE en 1, se habilita.
Por sí misma, la palabra clave JDBCTRACE tiene poco efecto y no
genera ninguna salida de rastreo a no ser que también se especifique
la palabra clave JDBCTRACEPATHNAME.
JDBCTRACEPATHNAME =
<nombre_vía_acceso_rastreo_completamente_calificada>
El valor de JDBCTRACEPATHNAME es la vía de acceso
completamente calificada al directorio en el que se graba toda la
información de rastreo de JDBC de DB2. El recurso de rastreo de
JDBC de DB2 intenta generar un nuevo archivo de registro de rastreo
cada vez que se ejecuta una aplicación JDBC que utiliza el controlador
de JDBC de DB2. Si la aplicación tiene varias hebras, se generará un
Para obtener más información sobre cómo capturar e interpretar rastreo del
gestor de controladores de ODBC, consulte la documentación del gestor de
controladores de ODBC. En las plataformas Windows, consulte el manual
Microsoft ODBC 3.0 Software Development Kit and Programmer’s Reference,
también disponible en línea en: http://www.msdn.microsoft.com/.
Conceptos relacionados:
v “db2cli.ini Initialization File” en el manual CLI Guide and Reference, Volume 1
v “Archivos de rastreo de CLI y JDBC” en la página 324
Consulta relacionada:
v “SQLSetEnvAttr Function (CLI) - Set Environment Attribute” en el manual
CLI Guide and Reference, Volume 2
v “db2trc - Mandato Rastrear” en el manual Consulta de mandatos
v “Mandato GET CLI CONFIGURATION” en el manual Consulta de mandatos
v “Mandato UPDATE CLI CONFIGURATION” en el manual Consulta de
mandatos
v “Miscellaneous variables” en el manual Administration Guide: Performance
v “CLI/ODBC Configuration Keywords Listing by Category” en el manual
CLI Guide and Reference, Volume 1
Archivos de rastreo de CLI y JDBC
De forma similar, un rastreo de JDBC de DB2 de una aplicación Java con dos
hebras puede generar los siguientes archivos de registro de rastreo de JDBC:
7960main.trc, 7960Thread-1.trc.
Los rastreos de CLI de DB2 siempre empiezan con una cabecera que identifica
el ID de proceso y el ID de hebra de la aplicación que ha generado el rastreo,
9 SQLAllocEnv( phEnv=0:1 )
10 <––– SQL_SUCCESS Time elapsed - +7.500000E-004 seconds
13 SQLAllocConnect( phDbc=0:1 )
14 <––– SQL_SUCCESS Time elapsed - +5.280000E-004 seconds
17 SQLSetConnectOption( )
18 <––– SQL_SUCCESS Time elapsed - +3.150000E-004 seconds
22 SQLConnect( )
23 <––– SQL_SUCCESS Time elapsed - +5.209880E-001 seconds
24 ( DSN=""SAMPLE"" )
25 ( UID=" " )
26 ( PWD="*" )
En el ejemplo de rastreo anterior, observe que hay dos entradas para cada
llamada de función de CLI de DB2 (por ejemplo, líneas 19-21 y 22-26 para la
34 SQLExecDirect( )
35 <––– SQL_SUCCESS Time elapsed - +2.387800E-002 seconds
SQLExecDirect( )
<––– SQL_SUCCESS Time elapsed - +2.384900E-002 seconds
38 SQLAllocStmt( phStmt=1:2 )
39 <––– SQL_SUCCESS Time elapsed - +6.820000E-004 seconds
43 SQLPrepare( )
44 <––– SQL_SUCCESS Time elapsed - +9.150000E-004 seconds
47 SQLBindParameter( )
48 <––– SQL_SUCCESS Time elapsed - +6.780000E-004 seconds
49 SQLExecute( hStmt=1:2 )
50 –––> Time elapsed - +1.337000E-003 seconds
51 ( iPar=1, fCType=SQL_C_CHAR, rgbValue="Hello World!!!", pcbValue=14,
piIndicatorPtr=14 )
52 SQLExecute( )
53 <––– SQL_ERROR Time elapsed - +5.951000E-003 seconds
SQLDisconnect( )
<––– SQL_SUCCESS Time elapsed - +1.734130E-001 seconds
61 SQLTransact( )
<––– SQL_SUCCESS Time elapsed - +2.220750E-001 seconds
62 SQLDisconnect( hDbc=0:1 )
63 –––> Time elapsed - +1.511000E-003 seconds
64 SQLDisconnect( )
66 SQLFreeConnect( hDbc=0:1 )
67 –––> Time elapsed - +2.389000E-003 seconds
68 SQLFreeConnect( )
69 <––– SQL_SUCCESS Time elapsed - +3.140000E-004 seconds
70 SQLFreeEnv( hEnv=0:1 )
71 –––> Time elapsed - +1.129000E-003 seconds
72 SQLFreeEnv( )
73 <––– SQL_SUCCESS Time elapsed - +2.870000E-004 seconds
Los rastreos de JDBC de DB2 siempre comienzan con una cabecera que
contiene información importante del sistema, como valores de variables clave
de entorno, el nivel de JDK o JRE, el nivel del controlador de JDBC de DB2 y
el nivel del build de DB2. Por ejemplo:
1 ========================================================
2 | Trace beginning on 2002-1-28 7:21:0.19
3 ========================================================
4 System Properties:
5 ------------------
6 user.language = en
7 java.home = c:\Program Files\SQLLIB\java\jdk\bin\..
8 java.vendor.url.bug =
9 awt.toolkit = sun.awt.windows.WToolkit
10 file.encoding.pkg = sun.io
11 java.version = 1.1.8
12 file.separator = \
13 line.separator =
14 user.region = US
15 file.encoding = Cp1252
16 java.compiler = ibmjitc
17 java.vendor = IBM Corporation
18 user.timezone = EST
19 user.name = db2user
20 os.arch = x86
21 java.fullversion = JDK 1.1.8 IBM build n118p-19991124 (JIT ibmjitc
V3.5-IBMJDK1.1-19991124)
22 os.name = Windows NT
23 java.vendor.url = http://www.ibm.com/
24 user.dir = c:\Program Files\SQLLIB\samples\java
25 java.class.path =
.:C:\Program Files\SQLLIB\lib;C:\Program Files\SQLLIB\java;
C:\Program Files\SQLLIB\java\jdk\bin\
26 java.class.version = 45.3
27 os.version = 5.0
34 DB2Driver - connect(jdbc:db2:sample)
Conceptos relacionados:
v “Recurso de rastreo de CLI/ODBC/JDBC” en la página 313
Consulta relacionada:
v “Miscellaneous variables” en el manual Administration Guide: Performance
v “TRACE CLI/ODBC Configuration Keyword” en el manual CLI Guide and
Reference, Volume 1
v “TRACECOMM CLI/ODBC Configuration Keyword” en el manual CLI
Guide and Reference, Volume 1
Por ejemplo:
int sqlCode=0; // Variable que va a contener SQLCODE
String sqlState=“00000”; // Variable que va a contener SQLSTATE
try
{
// Las sentencias de JDBC pueden emitir SQLExceptions
stmt.executeQuery("Your JDBC statement here");
catch (SQLException e)
{
sqlCode = e.getErrorCode() // Obtener SQLCODE
sqlState = e.getSQLState() // Obtener SQLSTATE
Servicios Web
Los servicios Web también le ofrecen una manera de hacer que sus procesos
empresariales clave resulten accesibles para clientes, socios y proveedores. Por
ejemplo, una compañía aérea puede proporcionar sus sistemas de reserva de
vuelos como servicio Web para facilitar que sus clientes de empresas grandes
integren el servicio en sus aplicaciones de planificación de viajes. Un
proveedor puede hacer que sus niveles de inventario y sus precios resulten
accesibles para sus principales compradores.
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 339
v Mensajes específicos de cada aplicación que se envían en formatos de
documento XML estándar que cumplen con la correspondiente descripción
de servicio.
v Los mensajes XML están contenidos en sobres Simple Object Access Protocol
(SOAP). SOAP es un protocolo de invocación de aplicaciones que define un
protocolo sencillo para intercambiar información codificada como mensajes
XML.
Puesto que SOAP no realiza ningún supuesto sobre la implantación de
puntos finales, el peticionario de servicios sólo tiene que crear una petición
XML, enviarla a un proveedor de servicios y comprender la respuesta XML
que se le devuelve. La implantación de DB2 se oculta al peticionario.
Una petición SOAP consta del propio sobre, que contiene los espacios de
nombres que utiliza el resto del mensaje SOAP, una cabecera opcional y la
parte principal, que puede ser una llamada a un procedimiento remoto
(RPC) o un documento XML.
SOAP se basa en estándares existentes de Internet como HTTP y XML, pero
se puede utilizar con cualquier protocolo de red, lenguaje de programación
o modelo de codificación de datos. Por ejemplo, puede enviar mensajes
SOAP sobre IBM MQSeries, FTP o incluso como mensajes de correo.
v La interfaz lógica y la implantación del servicio los describe el Lenguaje de
descripción de servicios Web (WSDL). WSDL es un vocabulario XML que se
utiliza para automatizar los detalles que intervienen en la comunicación
entre las aplicaciones de servicios Web. Hay tres piezas de WSDL: un
descriptor de tipo de datos (Esquema XML), una descripción de interfaz e
información de vinculación. La descripción de interfaz se suele utilizar en el
momento del desarrollo y la información de vinculación se puede utilizar
en el momento del desarrollo o de la ejecución para invocar un
determinado servicio en la ubicación especificada. La descripción del
servicio resulta crucial para hacer que la arquitectura de servicios Web esté
acoplada de forma holgada y para reducir la cantidad de conocimientos
compartidos necesarios y programación personalizada entre proveedores de
servicios y peticionarios de servicios.
v Para permitir que los peticionarios de servicios encuentren el servicio Web,
puede publicar información descriptiva, como taxonomía, propiedad,
nombre de empresa, tipo de empresa, etc., a través de un registro que
cumpla con la especificación Uniform Description, Discovery and
Integration (UDDI) o de algún otro registro XML. La información UDDI
puede incluir un puntero a las interfaces WSDL, información de
vinculación, así como el nombre real de la empresa (el nombre que permita
a los usuarios comprender el objetivo del servicio Web). Un registro UDDI
se puede buscar mediante programas, lo que permite a un peticionario de
servicios vincular con un proveedor UDDI para encontrar más información
sobre un servicio antes de utilizarlo realmente.
Acceso a datos
Las secciones siguientes describen cómo acceder a datos de DB2 con servicios
Web.
Acceso a datos de DB2 a través de servicios Web
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 341
Conceptos relacionados:
v “Acceso a datos de DB2 mediante consultas basadas en XML” en la página
342
v “Acceso a datos de DB2 mediante consultas basadas en SQL” en la página
342
Acceso a datos de DB2 mediante consultas basadas en XML
Sin embargo, si utiliza DB2 XML Extender para almacenar documentos XML
dentro de una sola columna de una tabla, puede utilizar la consulta basada en
SQL para recuperar estos documentos intactos como un objeto grande de
caracteres (CLOB) o para invocar las funciones definidas por el usuario que
extraen partes del documento. Otra función de DB2 XML Extender es la
posibilidad de almacenar datos a los que se accede con frecuencia en tablas
adicionales, lo que permite realizar búsquedas rápidas en documentos XML
que están almacenados en columnas.
Tanto los formatos de consulta basados en XML como los basados en SQL se
controlan mediante un archivo de configuración denominado extensión de
definición de acceso a documentos (DADX). El archivo de configuración DADX
define las operaciones que puede llevar a cabo el servicio Web. Por ejemplo,
puede tener un archivo DADX que especifique las operaciones para buscar
todos los pedidos de piezas, buscar todos los pedidos de piezas con un
determinado color y pedidos de piezas que sobrepasan un precio especificado.
(El color o precio se puede especificar en el tiempo de ejecución como
parámetros de entrada utilizando la notación de estilo de variable del lenguaje
principal en la consulta.)
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 343
En la mayoría de los casos, estos servicios se suministran con la ayuda de
aplicaciones de varios enlaces en las que cada enlace tiene un objetivo
específico. Java 2 Platform Enterprise Edition reduce el coste y la complejidad
de desarrollar estos servicios de varios enlaces, lo que da lugar a servicios que
se pueden desplegar rápidamente y se pueden mejorar fácilmente según los
requisitos de la empresa.
Conceptos relacionados:
v “Java 2 Platform Enterprise Edition” en la página 344
Java 2 Platform Enterprise Edition
Conceptos relacionados:
v “Contenedores de Java 2 Platform Enterprise Edition” en la página 345
v “Enterprise Java Beans” en la página 348
Contenedores de Java 2 Platform Enterprise Edition
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 345
v Método de invocación remota
v IDL Java
v API JDBC
v Servicio de mensajes de Java
v Naming and Directory Interface de Java
v JavaMail
v Infraestructura de activación de JavaBeans
v API Java para el análisis XML
v Arquitectura de conectores
v Servicio de autentificación y autorización de Java
Conceptos relacionados:
v “Java Naming and Directory Interface (JNDI)” en la página 346
v “Enterprise Java Beans” en la página 348
Servidor Java 2 Platform Enterprise Edition
Nota: IBM WebSphere Application Server es un servidor que cumple con las
especificaciones de Java 2 Platform Enterprise Edition.
Requisitos de bases de datos de Java 2 Enterprise Edition
Conceptos relacionados:
v “Consideraciones sobre la programación en Java” en la página 284
Java Naming and Directory Interface (JNDI)
La API JNDI tiene dos partes: una interfaz de nivel de aplicación que utilizan
los componentes de la aplicación para acceder a los servicios de nomenclatura
y directorio y una interfaz de proveedor de servicios para conectar con un
proveedor de un servicio de nomenclatura y directorio.
Gestión de transacciones Java
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 347
Nota: no es necesario configurar DB2 de modo que esté habilitado para JTA
en el entorno WebSphere porque el controlador JDBC de DB2 detecta
automáticamente este entorno. Actualmente, sólo se proporciona
soporte de JTA en el controlador JDBC de DB2 de tipo 2.
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 349
empInfo.setSalary(employee.getSalary());
empInfo.setBonus(employee.getBonus());
empInfo.setComm(employee.getComm());
return empInfo;
}
catch (java.rmi.RemoteException rex)
{
......
La línea uno del código sirve para acceder a la base de datos DB2. En el
servicio de visualización de números de empleado, el bean de sesión,
AccessEmployee, accede directamente a la base de datos DB2 sample.
/=============================================
* Obtener la lista de números de empleado.
* @return Collection
*/
public Collection getEmpNoList()
{
ResultSet rs = null;
PreparedStatement ps = null;
Vector list = new Vector();
DataSource ds = null;
Connection con = null;
try
{
ds = getDataSource();
con = ds.getConnection();
String schema = getEnvProps(DBschema);
String query = "Select EMPNO from " + schema + ".EMPLOYEE";
ps = con.prepareStatement(query);
ps.executeQuery();
rs = ps.getResultSet();
EmployeeKey pk;
while (rs.next())
{
pk = new EmployeeKey();
pk.employeeId = rs.getString(1);
list.addElement(pk.employeeId);
}
rs.close();
return list;
Consulta relacionada:
v “Programas de ejemplo de Java WebSphere” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
Con compañías que confían cada vez más en sus datos almacenados, es
necesario tenerlos todos en sistemas grandes como servidores zSeries. Con
esta nueva necesidad de consolidación, las aplicaciones Web necesitan formas
de acceder a los datos de la empresa.
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 351
La agrupación de conexiones de WebSphere es la implantación de la
especificación de la API Paquete opcional de JDBC 2.1. Por lo tanto, el modelo
de programación de agrupación de conexiones es el que se especifica en las
especificaciones JDBC 2.1 Core y API Paquete opcional de JDBC 2.1. Esto
significa que las aplicaciones que obtienen sus conexiones a través de una
fuente de datos creada en WebSphere Application Server pueden aprovechar
las funciones de JDBC 2.1 como la agrupación de conexiones y las conexiones
habilitadas para JTA.
Conceptos relacionados:
v “Restricciones de la API central de JDBC 2.1 por parte del controlador JDBC
de DB2 de tipo 2” en la página 299
v “Soporte de la API de paquete opcional de JDBC 2.1 por parte del
controlador de JDBC de DB2 de tipo 2” en la página 300
Consulta relacionada:
v “Programas de ejemplo de Java WebSphere” en el manual Guía de desarrollo
de aplicaciones: Creación y ejecución de aplicaciones
Parámetros para ajustar las agrupaciones de conexiones de WebSphere
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 353
mantener conexiones abiertas con la base de datos puede ocasionar
problemas de memoria con la base de datos. Sin embargo, no todas
las conexiones quedan desocupadas fuera de la agrupación, aunque
superen el valor especificado para la propiedad Tiempo de espera
excedido de desocupación. Una conexión no queda desocupada si al
eliminar la conexión la agrupación quedaría con un tamaño menor al
de su tamaño mínimo. Si establece para esta propiedad el valor 0, se
inhabilita el tiempo de espera excedido de desocupación.
Tiempo de espera excedido de orfandad
El número de segundos que una aplicación puede mantener una
conexión inactiva. El valor por omisión es 1800 segundos (30
minutos). Cualquier entero no negativo es un valor válido para esta
propiedad. Si no ha habido actividad en una conexión asignada
durante más tiempo del especificado en el valor Tiempo de espera
excedido de orfandad, la conexión se marca como huérfana.
Transcurridos otra vez el número de segundos especificados en
Tiempo de espera excedido de orfandad, si la conexión sigue sin
actividad, se devuelve a la agrupación. Si la aplicación vuelve a
intentar utilizar la conexión, recibe una StaleConnectionException. Las
conexiones que aparecen listadas en una transacción no son huérfanas.
Si establece para esta propiedad el valor 0, se inhabilita el tiempo de
espera excedido de orfandad.
Tamaño de antememoria de sentencias
El número de sentencias preparadas colocadas en antememoria se
mantiene para una agrupación de conexiones entera. El valor por
omisión es 100. Cualquier entero no negativo es un valor válido para
esta propiedad. Cuando una sentencia se coloca en antememoria, se
aumenta el rendimiento, porque una sentencia se recupera de la
antememoria si se encuentra una sentencia coincidente, en lugar de
tener que crear una nueva sentencia preparada (lo que constituye una
operación más cara). El tamaño de antememoria de sentencias no
cambia el modelo de programación, únicamente el rendimiento de la
aplicación. El tamaño de antememoria de sentencias es el número de
sentencias colocadas en antememoria correspondientes a la agrupación
entera, no a cada conexión. Poder establecer el tamaño de
antememoria de sentencias en la consola administrativa constituye
una nueva opción de la Versión 4.0. En versiones anteriores, este valor
sólo se podía establecer mediante un archivo datasources.xml. El uso
de datasources.xml no se recomienda en la Versión 4.0.
Inhabilitar limpieza automática de conexiones
Indica si la conexión se tiene o no que cerrar al final de una
transacción. El valor por omisión es false, lo que indica que, una vez
completada una transacción, WebSphere cierra la conexión y la
devuelve a la agrupación. Esto significa que, si se intenta utilizar la
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 355
conexión. Por lo tanto, con una conexión por hebra, el tamaño
máximo de la agrupación se puede establecer en el número máximo
de hebras.
Cuando se utilizan servlets, esto se puede determinar examinando la
propiedad MaxConnections del Motor de servlets. Si se necesitan varias
conexiones en una hebra, el valor del tamaño máximo de la conexión
se puede determinar mediante la siguiente fórmula:
T *(C -1)+1
Cada usuario asimila una facción del coste de conexión o desconexión. Una
vez se han utilizado los recursos iniciales para generar las conexiones de la
agrupación, la actividad general adicional es insignificante porque se
reutilizan las conexiones existentes.
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 357
respuesta. La antememoria resulta útil para aplicaciones que tienden a
preparar la misma sentencia varias veces.
Capítulo 11. Aplicaciones Java que utilizan WebSphere Application Servers 359
360 Programación de aplicaciones cliente
Parte 4. Otras interfaces de programación
Restricciones de Perl
El módulo DBI de Perl sólo soporta SQL dinámico. Cuando sea necesario
ejecutar una sentencia varias veces, se puede mejorar el rendimiento de las
aplicaciones DB2 en Perl emitiendo una llamada prepare para preparar la
sentencia.
Para permitir que Perl cargue el módulo DBI, debe incluir la línea siguiente
en la aplicación DB2:
use DBI;
donde:
$dbhandle
representa el descriptor de contexto de base de datos devuelto por la
sentencia de conexión
dbalias
representa un alias de DB2 catalogado en el directorio de bases de
datos de DB2
$userID
representa el ID de usuario utilizado para conectar con la base de
datos
$password
representa la contraseña para el ID de usuario utilizado para conectar
con la base de datos
Puesto que el Módulo DBI de Perl sólo soporta SQL dinámico, no debe
utilizar variables del lenguaje principal en las aplicaciones DB2 en Perl.
Procedimiento:
Para devolver resultados de una consulta de SQL, lleve a cabo los pasos
siguientes:
1. Cree un descriptor de contexto de base de datos estableciendo conexión
con la base de datos con la sentencia DBI->connect.
Conceptos relacionados:
v “Conexiones de bases de datos en Perl” en la página 364
my $database=’dbi:DB2:sample’;
my $user=’’;
my $password=’’;
my $sth = $dbh->prepare(
q{ SELECT firstnme, lastname
FROM employee }
)
or die "Can’t prepare statement: $DBI::errstr";
my $rc = $sth->execute
or die "Can’t execute statement: $DBI::errstr";
$sth->finish;
$dbh->disconnect;
Conceptos relacionados:
v “Sintaxis de las API para REXX” en la página 385
Para evitar esta situación, encierre las series de sentencias entre comillas (’ ’ o
″ ″). Si no utiliza comillas, el intérprete de REXX resolverá los nombres de
variable conflictivos, en lugar de que se pasen a las rutinas SQLEXEC,
SQLDBS o SQLDB2.
Tareas relacionadas:
v “Registro de SQLEXEC, SQLDBS y SQLDB2 en REXX” en la página 370
Registro de SQLEXEC, SQLDBS y SQLDB2 en REXX
Procedimiento:
Utilice los ejemplos siguientes para ver la sintaxis correcta para registrar cada
rutina:
Las aplicaciones REXX utilizan API que les permiten utilizar la mayoría de las
funciones que suministran las API del gestor de bases de datos y SQL. A
diferencia de las aplicaciones escritas en un lenguaje compilado, las
aplicaciones REXX no se precompilan. En su lugar, un manejador de SQL
dinámico procesa todas las sentencias de SQL. Al combinar REXX con estas
API que se pueden llamar, tiene acceso a la mayoría de las funciones del
gestor de bases de datos. Aunque REXX no da soporte directamente a algunas
API utilizando SQL incorporado, se puede acceder a las mismas utilizando el
procesador de línea de mandatos de DB2 desde dentro de la aplicación REXX.
Utilice la rutina SQLEXEC para procesar todas las sentencias de SQL. Los
argumentos de serie de caracteres para la rutina SQLEXEC están formados
por los elementos siguientes:
v Palabras clave de SQL
v Identificadores declarados previamente
v Variables del lenguaje principal de sentencia
Las sentencias de SQL se pueden continuar en más de una línea. Cada parte
de la sentencia se debe encerrar entre comillas, y se debe delimitar mediante
una coma el texto adicional de la sentencia, del modo siguiente:
Las variables del lenguaje principal son variables del lenguaje REXX a las que
se hace referencia en las sentencias de SQL. Permiten que una aplicación pase
datos de entrada a DB2 y reciba datos de salida de éste. No es necesario que
las aplicaciones REXX declaren las variables del lenguaje principal, a
excepción de las variables de localizadores de LOB y de referencia de archivos
LOB. Los tamaños y tipos de datos de las variables de sistema principal se
determinan en el tiempo de ejecución cuando se hace referencia a las
variables. Las siguientes secciones describen las normas a seguir para dar
nombre y utilizar variables del lenguaje principal.
Conceptos relacionados:
v “Nombres de variables del lenguaje principal en REXX” en la página 375
v “Referencias a variables del lenguaje principal en REXX” en la página 375
v “Variables de indicador en REXX” en la página 375
v “Variables del lenguaje principal de LOB en REXX” en la página 378
v “Borrado de variables del lenguaje principal de LOB en REXX” en la página
380
Nota: los valores –8 a –18 sólo los devuelve la API GET ERROR
MESSAGE.
SQLMSG
Si SQLCA.SQLCODE es distinto de cero, esta variable contiene el
mensaje de texto asociado al código de error.
SQLISL
Nivel de aislamiento. Los valores posibles son:
RR Lectura repetible.
RS Estabilidad de lectura.
CS Estabilidad del cursor. Éste es el valor por omisión.
UR Lectura no confirmada.
NC Sin confirmación. (NC sólo recibe soporte de algunos
servidores de sistema principal, AS/400 o iSeries.)
SQLCA
La estructura SQLCA actualizada después de que se procesen las
sentencias de SQL y se llame a las API de DB2.
SQLRODA
La estructura SQLDA de entrada/salida para procedimientos
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
v “SQLCHAR” en el manual Administrative API Reference
v “SQLDA” en el manual Administrative API Reference
Variables del lenguaje principal de LOB en REXX
Cuando se capte una columna LOB en una variable del lenguaje principal
REXX, esta se almacenará como una serie simple (es decir, descontada). Esto
se maneja del mismo modo que todos los tipos de SQL basados en caracteres
(tales como CHAR, VARCHAR, GRAPHIC, LONG, etc.). En la entrada, si el
tamaño del contenido de la variable del lenguaje principal es superior a 32 K,
o si cumple con otros criterios establecidos más adelante, se le asignará el tipo
de LOB apropiado.
Ejemplo:
CALL SQLEXEC ’DECLARE :hv1, :hv2 LANGUAGE TYPE CLOB LOCATOR’
Ejemplo:
CALL SQLEXEC ’FREE LOCATOR :hv1, :hv2’
Debe codificar esta sentencia al final de las aplicaciones de LOB. Observe que
la puede codificar en cualquier lugar, como medida de precaución, para
borrar las declaraciones que puedan haber quedado de aplicaciones anteriores
(por ejemplo, al principio de una aplicación SQL en REXX).
Cursores en REXX
Consulta relacionada:
v “Tipos de datos SQL soportados en REXX” en la página 381
Notas:
1. El primer número que se encuentra bajo Tipo de columna SQL indica que no se proporciona una variable de
indicador, y el segundo número indica que se proporciona una variable de indicador. Se necesita una variable de
indicador para indicar los valores nulos (NULL) o para contener la longitud de una serie truncada.
2. FLOAT(n) donde 0 < n < 25 es un sinónimo de REAL. La diferencia entre REAL y DOUBLE en el SQLDA es el
valor de la longitud (4 ó 8).
3. Los tipos SQL siguientes son sinónimos de DOUBLE:
v FLOAT
v FLOAT(n) donde 24 < n < 54 es
v DOUBLE PRECISION
4. Éste no es un tipo de columna, sino un tipo de variable del lenguaje principal.
Conceptos relacionados:
v “Cursores en REXX” en la página 381
Procedimiento:
Nota: en algunos casos, puede que sea necesario vincular de forma explícita
estos archivos a la base de datos.
Utilice la rutina SQLDBS para llamar a las API de DB2 con la sintaxis
siguiente:
CALL SQLDBS ’command string’
Si no puede llamar a una API de DB2 que desea utilizar mediante la rutina
SQLDBS, puede llamar a la API efectuando una llamada al procesador de
Puede utilizar la rutina SQLDB2 para llamar a las API de DB2 utilizando la
sintaxis siguiente:
CALL SQLDB2 ’command string’
Nota: aunque la rutina SQLDB2 ha sido pensada para uso únicamente de las
API de DB2 relacionadas anteriormente, también se puede utilizar para
otras API de DB2 que no se soportan a través de la rutina SQLDBS.
Alternativamente, se puede acceder a las API de DB2 a través del CLP
desde la aplicación REXX.
Conceptos relacionados:
v “Llamadas a procedimientos almacenados en REXX” en la página 387
Llamadas a procedimientos almacenados en REXX
Notas:
1. Antes de invocar al procedimiento almacenado, la aplicación cliente tiene
que inicializar la variable de REXX con los datos apropiados.
Cuando se ejecuta la sentencia CALL de SQL, el gestor de bases de datos
asigna almacenamiento y recupera el valor de la variable de REXX de la
agrupación de variables de REXX. Para una SQLDA utilizada en una
sentencia CALL, el gestor de bases de datos asigna almacenamiento para
los campos SQLDATA y SQLIND en base a los valores de SQLTYPE y
SQLLEN.
En el caso de un procedimiento almacenado REXX (es decir, en que el
procedimiento al que se llama está escrito en REXX basado en Windows),
los datos pasados por el cliente del tipo de sentencia CALL o de la API
DARI se colocan en la agrupación de variables de REXX en el servidor de
base de datos, utilizando los nombres siguientes predefinidos:
SQLRIDA
Nombre predefinido para la variable SQLDA de entrada de REXX
SQLRODA
Nombre predefinido para la variable SQLDA de salida de REXX
Conceptos relacionados:
v “Consideraciones del cliente para llamar a procedimientos almacenados en
REXX” en la página 389
v “Consideraciones del servidor para llamar a procedimientos almacenados
en REXX” en la página 389
v “Recuperación de valores de precisión y escala (SCALE) de campos
decimales del SQLDA” en la página 390
Consulta relacionada:
v “CALL sentencia” en el manual Consulta de SQL, Volumen 2
Consideraciones del cliente para llamar a procedimientos almacenados
en REXX
Consulta relacionada:
v “Tipos de datos SQL soportados en REXX” en la página 381
Consideraciones del servidor para llamar a procedimientos almacenados
en REXX
IBM OLE DB Provider para DB2 permite a DB2 actuar como gestor de
recursos para el proveedor de OLE DB. Este soporte ofrece a las aplicaciones
basadas en OLE DB la posibilidad de extraer o consultar datos de DB2
mediante la interfaz OLE. IBM OLE DB Provider para DB2, cuyo nombre de
proveedor es IBMDADB2, permite a los consumidores de OLE DB acceder a
datos en un servidor DB2 Universal Database. Si DB2 Connect está instalado,
Cumplimiento de versiones:
Para instalar IBM OLE DB Provider para DB2, primero tiene que ejecutar uno
de los sistemas operativos soportados mencionados anteriormente. También
tiene que instalar DB2 Application Development Client, así como Microsoft
Data Access Components (MDAC) Versión 2.7, o superior, que estaba
disponible en el momento de escribir este documento en el siguiente sitio:
http://www.microsoft.com/data.
Consulta relacionada:
v “Soporte de IBM OLE DB Provider de interfaces y componentes de OLE
DB” en la página 403
Con IBM OLE DB Provider para DB2, puede crear los siguientes tipos de
aplicaciones:
v Aplicaciones ADO, que incluyen:
– Aplicaciones Microsoft Visual Studio C++
– Aplicaciones Microsoft Visual Basic
v Aplicaciones C/C++ que acceden a IBMDADB2 directamente mediante las
interfaces OLE DB, incluidas aplicaciones ATL cuyos Objetos de consumidor
de acceso a datos se han generado mediante ATL COM AppWizard.
Servicios OLE DB
Las secciones siguientes describen los servicios OLE DB.
Modelo de hebras soportado por IBM OLE DB Provider
IBM OLE DB Provider para DB2 da soporte al modelo de hebras libres, que
permite a las aplicaciones crear componentes en una hebra y utilizar dichos
componentes en cualquier otra hebra.
Manipulación de objetos grandes con IBM OLE DB Provider
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 393
Tabla 20. Conjuntos de filas soportados por IBM OLE DB Provider para DB2
GUID soportados Restricciones soportadas Columnas soportadas Notas
DBSCHEMA COLUMN_NAME COLUMN_NAME
_COLUMN_PRIVILEGES TABLE_NAME GRANTEE
TABLE_SCHEMA GRANTOR
IS_GRANTABLE
PRIVILEGE_TYPE
TABLE_NAME
TABLE_SCHEMA
DB_SCHEMA_COLUMNS COLUMN_NAME CHARACTER_MAXIMUM_LENGTH
TABLE_NAME CHARACTER_OCTET_LENGTH
TABLE_SCHEMA COLUMN_DEFAULT
COLUMN_FLAGS
COLUMN_HASDEFAULT
COLUMN_NAME
DATA_TYPE
DESCRIPTION
IS_NULLABLE
NUMERIC_PRECISION
NUMERIC_SCALE
ORDINAL_POSITION
TABLE_NAME
TABLE_SCHEMA
DBSCHEMA_FOREIGN_KEYS FK_TABLE_NAME DEFERRABILITY Se debe especificar al
FK_TABLE_SCHEMA DELETE_RULE menos una de las
PK_TABLE_NAME FK_COLUMN_NAME siguientes restricciones:
PK_TABLE_SCHEMA FK_NAME PK_TABLE_NAME o
FK_TABLE_NAME FK_TABLE_NAME
FK_TABLE_SCHEMA
ORDINAL No se permiten
PK_COLUMN_NAME caracteres comodín “%”.
PK_NAME
PK_TABLE_NAME
PK_TABLE_SCHEMA
UPDATE_RULE
DBSCHEMA_INDEXES TABLE_NAME CARDINALITY No se permite ningún
TABLE_SCHEMA CLUSTERED orden de clasificación. El
COLLATION orden de clasificación, si
COLUMN_NAME se especifica, se pasará
INDEX_NAME por alto.
INDEX_SCHEMA
ORDINAL_POSITION
PAGES
TABLE_NAME
TABLE_SCHEMA
TYPE
UNIQUE
DBSCHEMA_PRIMARY_KEYS TABLE_NAME COLUMN_NAME Se debe especificar al
TABLE_SCHEMA ORDINAL menos la siguiente
PK_NAME restricción:
TABLE_NAME TABLE_NAME
TABLE_SCHEMA
No se permiten
caracteres comodín “%”.
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 395
Habilitación automática de servicios OLE DB por parte de IBM OLE DB
Provider
Por omisión, IBM OLE DB Provider para DB2 habilita de forma automática
todos los servicios OLE DB, añadiendo una entrada de registro
OLEDB_SERVICES bajo el ID de clase (CLSID) del proveedor con el valor
0xFFFFFFFF para DWORD. El significado de este valor es el siguiente:
Tabla 21. Servicios OLE DB
Servicios habilitados Valor de DWORD
Todos los servicios (valor por omisión) 0xFFFFFFFF
Todos excepto agrupación y AutoEnlistment 0xFFFFFFFE
Todos excepto cursor del cliente 0xFFFFFFFB
Todos excepto agrupación, alistamiento y cursor 0xFFFFFFF0
Ningún servicio 0x000000000
Servicios de datos
Las secciones siguientes describen consideraciones sobre los servicios de
datos.
Modalidades de cursor soportadas en IBM OLE DB Provider
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 397
Tabla 22. Correlaciones de tipos de datos entre tipos de datos DB2 y tipos de datos OLE
DB (continuación)
Tipos de Indicadores de tipos de datos OLE Nombres de tipos estándar de OLE Nombres específicos
datos DB2 DB DB de DB2
BLOB DBTYPE_BYTES “DBTYPE_BINARY” “BLOB”
y DBCOLUMNFLAGS_ISLONG “DBTYPE_VARBINARY”
o DBPARAMFLAGS_ISLONG “DBTYPE_LONGVARBINARY”
y DBCOLUMNFLAGS_ISLONG
o DBPARAMFLAGS_ISLONG
DATA LINK DBTYPE_STR “DBTYPE_CHAR” “DATA LINK”
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 399
Tabla 23. Conversión de datos de tipos OLE DB a tipos DB2 (continuación)
Tipos de datos DB2
D L For Bit
E O Data
C N
F I L G L
L M O O
O A N V V N
A L T G A A D G
S T I R R A
M I N M V V G G G V V T
A N B D U E A A R R R D A A A
L T I O M S R R A A A B R R
L E G R U E D T T C C C C P P P C C C C B L
I G I E B R A I A H H H L H H H L H H H L I
N E N A L I T M M A A A O I I I O A A A O N
Indicador de tipo OLE DB T R T L E C E E P R R R B C C C B R R R B K
DBTYPE_PROP_VARIANT
DBTYPE_HCHAPTER
DBTYPE_VARNUMERIC
Consulta relacionada:
v “Conversión de datos para establecer datos de tipos DB2 en tipos OLE DB”
en la página 400
Conversión de datos para establecer datos de tipos DB2 en tipos OLE DB
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 401
Tabla 24. Conversiones de datos de tipos DB2 a tipos OLE DB (continuación)
Tipos de datos DB2
D L For Bit
E O Data
C N
F I L G L
L M O O
O A N V V N
A L T G A A D G
S T I R R A
M I N M V V G G G V V T
A N B D U E A A R R R D A A A
L T I O M S R R A A A B R R
L E G R U E D T T C C C C P P P C C C C B L
I G I E B R A I A H H H L H H H L H H H L I
N E N A L I T M M A A A O I I I O A A A O N
Indicador de tipo OLE DB T R T L E C E E P R R R B C C C B R R R B K
DBTYPE_ERROR
DBTYPE_BYREF
DBTYPE_ARRAY
DBTYPE_VECTOR
DBTYPE_UDT
DBTYPE_DBDATE X X X X X X X X X X X X X
DBTYPE_DBTIME X X X X X X X X X X
DBTYPE_DBTIMESTAMP X X X X X X X X X X X X X
DBTYPE_FILETIME X X X X X X X X X X X X X X
DBTYPE_PROP_VARIANT X X X X X X X X X X X X X X X
DBTYPE_HCHAPTER
DBTYPE_VARNUMERIC
Nota: cuando la aplicación realiza una operación ISequentialStream::Read para obtener los datos del objeto de
almacenamiento, el formato de los datos devueltos depende del tipo de datos de la columna:
v Para tipos de datos binarios y que no sean de tipo carácter, los datos de la columna se exponen como una
secuencia de bytes que representan dichos valores en el sistema operativo.
v Para tipos de datos de carácter, primero los datos se convierten a DBTYPE_STR.
v Para DBCLOB, primero los datos se convierten a DBTYPE_WCHAR.
Consulta relacionada:
v “Conversión de datos para establecer datos de tipos OLE DB en tipos DB2”
en la página 398
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 403
Tabla 25. Comparación de interfaces y componentes de OLE DB soportados por IBM OLE DB Provider
para DB2 y Microsoft OLE DB Provider para ODBC (continuación)
Interfaz DB2 ODBC Provider
IColumnsInfo Sí Sí
IColumnsRowset No Sí
IConvertType Sí Sí
ISupportErrorInfo Sí Sí
Fuente de datos
IConnectionPoint No Sí
IDBAsynchNotify (consumer) No No
IDBAsynchStatus No No
IDBConnectionPointContainer No Sí
IDBCreateSession Sí Sí
IDBDataSourceAdmin No No
IDBInfo Sí Sí
IDBInitialize Sí Sí
IDBProperties Sí Sí
IPersist Sí No
IPersistFile No Sí
ISupportErrorInfo Sí Sí
Enumerador
IDBInitialize Sí Sí
IDBProperties Sí Sí
IParseDisplayName Sí No
ISourcesRowset Sí Sí
ISupportErrorInfo Sí Sí
Servicio de búsqueda de errores
IErrorLookUp Sí Sí
Objeto Error
IErrorInfo Sí No
IErrorRecords Sí No
ISQLErrorInfo (custom) No No
Varios resultados
IMultipleResults Sí Sí
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 405
Tabla 25. Comparación de interfaces y componentes de OLE DB soportados por IBM OLE DB Provider
para DB2 y Microsoft OLE DB Provider para ODBC (continuación)
Interfaz DB2 ODBC Provider
IAlterTable No No
IDBCreateCommand Sí Sí
IDBSchemaRowset Sí Sí
IGetDataSource Sí Sí
IIndexDefinition No No
IOpenRowset Sí Sí
ISessionProperties Sí Sí
ISupportErrorInfo Sí Sí
ITableDefinition No No
ITableDefinitionWithConstraints No No
ITransaction Sí Sí
ITransactionJoin Sí Sí
ITransactionLocal Sí Sí
ITransactionObject No No
ITransactionOptions No Sí
Objetos Vista
IViewChapter No No
IViewFilter No No
IViewRowset No No
IViewSort No No
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 407
Tabla 26. Propiedades soportadas por IBM OLE DB Provider para DB2 (continuación)
Grupo de Conjunto de propiedades Propiedades Valor por omisión R/W
propiedades
DBPROP_SUPPORTEDTXNDDL DBPROPVAL_TC_ALL R
DBPROP_SUPPORTEDTXNISOLEVELS DBPROPVAL_TI_CURSORSTABILITY | R
DBPROPVAL_TI_READCOMMITTED |
DBPROPVAL_TI_READUNCOMMITTED |
DBPROPVAL_TI_SERIALIZABLE |
DBPROP_SUPPORTEDTXNISORETAIN DBPROPVAL_TR_COMMIT_DC | R
DBPROPVAL_TR_ABORT_NO |
DBPROP_TABLETERM “TABLA” R
DBPROP_USERNAME N/D R
Inicialización DBPROPSET_DBINIT DBPROP_AUTH_PASSWORD N/D R/W
DBPROP_AUTH_USERID N/D R/W
DBPROP_INIT_DATASOURCE N/D R/W
DBPROP_INIT_HWND N/D R/W
DBPROP_INIT_MODE DB_MODE_READWRITE R/W
DBPROP_INIT_OLEDBSERVICES 0xFFFFFFFF R/W
DBPROP_INIT_PROMPT DBPROMPT_NOPROMPT R/W
DBPROP_INIT_PROVIDERSTRING N/D R/W
Conjunto de DBPROPSET_ROWSET DBPROP_ABORTPRESERVE VARIANT_FALSE R
filas
DBPROP_ACCESSORDER DBPROPVAL_AO_RANDOM R
DBPROP_BLOCKINGSTORAGEOBJECTS VARIANT_FALSE R
DBPROP_CACHEDEFERRED VARIANT_FALSE R/W
DBPROP_CANHOLDROWS VARIANT_FALSE R
DBPROP_COMMITPRESERVE VARIANT_TRUE R/W
DBPROP_COMMANDTIMEOUT 0 R/W
DBPROP_DEFERRED VARIANT_FALSE R
DBPROP_IAccessor VARIANT_TRUE R
DBPROP_IColumnsInfo VARIANT_TRUE R
DBPROP_IColumnsRowset VARIANT_TRUE R
DBPROP_IConvertType VARIANT_TRUE R
DBPROP_IMultipleResults VARIANT_TRUE R
DBPROP_IRowset VARIANT_TRUE R
DBPROP_IRowChange VARIANT_FALSE R
DBPROP_IRowsetFind VARIANT_FALSE R
DBPROP_IRowsetIdentity VARIANT_TRUE R
DBPROP_IRowsetInfo VARIANT_TRUE R
DBPROP_IRowsetLocate VARIANT_FALSE R
DBPROP_IRowsetScroll VARIANT_FALSE R
DBPROP_IRowsetUpdate VARIANT_FALSE R
DBPROP_ISequentialStream VARIANT_TRUE R
DBPROP_ISupportErrorInfo VARIANT_TRUE R
DBPROP_LITERALIDENTITY VARIANT_TRUE R
DBPROP_LOCKMODE DBPROPVAL_LM_SINGLEROW R/W
DBPROP_MAXOPENROWS 0 R/W
DBPROP_MAXROWS 0 R/W
DBPROP_QUICKRESTART VARIANT_FALSE R/W
DBPROP_ROWTHREADMODEL DBPROPVAL_RT_FREETHREAD R
DBPROP_SERVERCURSOR VARIANT_TRUE R
Los siguientes ejemplos muestran cómo conectar con una fuente de datos DB2
mediante IBM OLE DB Provider para DB2:
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 409
hr = pIDataInitialize–>CreateDBInstance(
CLSID_IBMDADB2, // ClassID de IBMDADB2
NULL,
CLSCTX_INPROC_SERVER,
NULL,
IID_IDBInitialize,
(IUnknown**)&pIDBInitialize);
Aplicaciones ADO
Las siguientes secciones describen consideraciones sobre aplicaciones ADO.
Palabras clave de series de conexión de ADO
La tabla siguiente describe las palabras clave a las que da soporte IBM OLE
DB Provider para DB2:
Tabla 27. Palabras clave a las que da soporte IBM OLE DB Provider para DB2
Palabra clave Valor Significado
DSN Nombre del alias de la base El alias de la base de datos DB2 en el
de datos directorio de bases de datos.
UID ID de usuario El ID de usuario que se utiliza para
conectar con el servidor DB2.
PWD Contraseña de UID Contraseña correspondiente al ID de
usuario utilizado para conectar con el
servidor DB2.
Hay otras palabras clave de configuración de CLI de DB2 que también afectan
al comportamiento de IBM OLE DB Provider.
Consulta relacionada:
v “CLI/ODBC Configuration Keywords Listing by Category” en el manual
CLI Guide and Reference, Volume 1
Conexiones con fuentes de datos con aplicaciones ADO Visual Basic
Para conectar con una fuente de datos DB2 mediante IBM OLE DB Provider
para DB2, especifique el nombre de proveedor IBMDADB2.
Tareas relacionadas:
v “Creación de aplicaciones ADO con Visual Basic” en el manual Guía de
desarrollo de aplicaciones: Creación y ejecución de aplicaciones
Cursores desplazables actualizables en aplicaciones ADO
Puesto que IBM OLE DB Provider para DB2 da soporte de forma nativa a
cursores de solo lectura y de solo avance, una aplicación ADO que desee
acceder a cursores desplazables actualizables debe establecer como ubicación
del cursor el valor adUseClient.
Limitaciones de las aplicaciones ADO
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 411
Tabla 28. Métodos y propiedades ADO soportados por IBM OLE DB Provider para DB2 (continuación)
ADO Método/Propiedad Interfaz/Propiedad OLE DB Soporte de IBM OLE
DB
Command Text ICommandText Sí
Command Timeout ICommandProperties::SetProperties Sí
DBPROP_COMMANDTIMEOUT
CommandType (Específico de ADO)
Prepared ICommandPrepare Sí
State (Específico de ADO)
Grupo de Parameters ICommandWithParameter Sí
mandatos DBSCHEMA
_PROCEDURE_PARAMETERS
Properties ICommandProperties Sí
IDBProperties
Métodos de BeginTrans ITransactionLocal Sí (pero no anidado)
conexión CommitTrans Sí (pero no anidado)
RollbackTrans Sí (pero no anidado)
Execute ICommand Sí
IOpenRowset
Open IDBCreateSession Sí
IDBInitialize
OpenSchema IDBSchemaRowset
adSchemaColumnPrivileges Sí
adSchemaColumns Sí
adSchemaForeignKeys Sí
adSchemaIndexes Sí
adSchemaPrimaryKeys Sí
adSchemaProcedureParam Sí
adSchemaProcedures Sí
adSchemaProviderType Sí
adSchemaStatistics Sí
adSchemaTablePrivileges Sí
adSchemaTables Sí
Cancel Sí
Propiedades de Attributes ITransactionLocal
conexión adXactCommitRetaining Sí
adXactRollbackRetaining Sí
CommandTimeout ICommandProperties Sí
DBPROP_COMMAND_TIMEOUT
ConnectionString (Específico de ADO)
ConnectionTimeout IDBProperties No
DBPROP_INIT_TIMEOUT
CursorLocation:
adUseClient (Utilizar Servicio de cursor de OLE DB)Sí
adUseNone (No utilizado) NoSí
adUseServer (No actualizable sólo en avance)
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 413
Tabla 28. Métodos y propiedades ADO soportados por IBM OLE DB Provider para DB2 (continuación)
ADO Método/Propiedad Interfaz/Propiedad OLE DB Soporte de IBM OLE
DB
Value IAccessor Sí
IRowset
Grupo de Properties IDBProperties Sí
campos IRowsetInfo
Métodos de AppendChunk ISequentialStream Sí
parámetro
Attributes ICommandWithParameter
Direction DBSCHEMA Sí
Name _PROCEDURE_PARAMETERS No
NumericScale Sí
Precision Sí
Scale Sí
Size Sí
Type Sí
Value IAccessor Sí
ICommand
Grupo de Properties Sí
parámetros
Métodos AddNew IRowsetChange Sí (Servicio de cursor)
RecordSet
Cancel Sí
CancelBatch IRowsetUpdate::Undo Sí (Servicio de cursor)
CancelUpdate Sí (Servicio de cursor)
Clone IRowsetLocate Sí (Servicio de cursor)
Close IAccessor Sí
IRowset
CompareBookmarks No
Delete IRowsetChange Sí (Servicio de cursor)
GetRows IAccessor Sí (Servicio de cursor)
IRowset
Move IRowset Cursor de servidor:
IRowsetLocate sólo en avance
Servicio de cursor:
desplazable
MoveFirst IRowset Sí (Servicio de cursor)
IRowsetLocate
MoveNext IRowset Sí (Servicio de cursor)
IRowsetLocate
MoveLast IRowsetLocate Sí (Servicio de cursor)
MovePrevious IRowsetLocate Sí (Servicio de cursor)
NextRecordSet IMultipleResults Sí
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 415
Tabla 28. Métodos y propiedades ADO soportados por IBM OLE DB Provider para DB2 (continuación)
ADO Método/Propiedad Interfaz/Propiedad OLE DB Soporte de IBM OLE
DB
Grupo de Fields IColumnInfo Sí
RecordSet
Properties IDBProperties Sí
IRowsetInfo::GetProperties
Aplicaciones C y C++
Las secciones siguientes describen consideraciones sobre aplicaciones C y C++.
Compilación y enlace de aplicaciones C/C++ e IBM OLE DB Provider
Para conectar con una fuente de datos DB2 mediante IBM OLE DB Provider
para DB2 en una aplicación C/C++, utilice una de las dos interfaces
principales de OLE DB, IDBPromptInitialize o IDataInitialize. El hecho de
conectar con la fuente de datos de este modo garantiza el acceso de la
aplicación a cursores desplazables actualizables, en lugar de a los cursores de
solo lectura y de solo avance disponibles de forma nativa. Si IBMDADB2 se
crea directamente llamando a la API COM CoCreateInstance, los cursores
disponibles serán de solo lectura y de solo avance. El componente OLE DB
Service expone la interfaz IDataInitialize y el componente Data Links
expone la interfaz IDBPromptInitialize.
Conceptos relacionados:
v “Conexiones a fuentes de datos mediante IBM OLE DB Provider” en la
página 409
Tareas relacionadas:
v “Creación de aplicaciones ADO con Visual C++” en el manual Guía de
desarrollo de aplicaciones: Creación y ejecución de aplicaciones
Requisitos previos:
Capítulo 14. Cómo escribir aplicaciones mediante IBM OLE DB Provider para servidores DB2 417
Habilitación del soporte de MTS en DB2 Universal Database para
aplicaciones C/C++
Nota: los datos de series de caracteres definidos con el atributo FOR BIT
DATA y los datos BLOB se clasifican utilizando el orden de clasificación
binaria.
Por ejemplo, se puede utilizar un orden de clasificación para indicar que las
versiones en minúsculas y en mayúsculas de un determinado carácter se
tienen que clasificar de igual forma.
El gestor de bases de datos permite que se creen bases de datos con órdenes
de clasificación personalizados. Las secciones siguientes le ayudan a
determinar y a implantar un determinado orden de clasificación para una
base de datos.
Por ejemplo, supongamos que los caracteres B y b tienen los puntos de código
X'42' y X'62' respectivamente. Si (según la tabla de orden de clasificación),
ambos tienen un peso de clasificación de X'42' (B), se clasifican igual. Si el
peso de clasificación correspondiente a B es X'9E' y el correspondiente a b es
X'9D', b se clasificará antes que B. La tabla de orden de clasificación especifica
el peso de cada carácter. La tabla es distinta de una página de códigos, la cual
especifica el punto de código de cada carácter.
No hace falta que los pesos de un orden de clasificación sean exclusivos. Por
ejemplo, podría asignar a letras mayúsculas y a sus equivalentes minúsculas
el mismo peso.
Si el orden de clasificación contiene 256 pesos exclusivos, sólo hay que llevar
a cabo el primer paso. Si el orden de clasificación es el orden de identidad,
sólo hay que llevar a cabo el segundo paso. En cualquier caso, hay una mejora
del rendimiento.
Conceptos relacionados:
v “conversión de caracteres” en el manual Consulta de SQL, Volumen 1
Comparaciones que no dependen de mayúsculas y minúsculas mediante
la función TRANSLATE
devuelve
Por lo tanto
SELECT c1 FROM T1 WHERE c1 LIKE ’ab%’
devuelve
ab
abel
abels
y
SELECT c1 FROM T1 WHERE c1 LIKE ’A%’
devuelve
Abel
Ab
ABEL
La sentencia siguiente
SELECT c1 FROM T1 ORDER BY c1
devuelve
ab
Ab
abel
Abel
ABEL
abels
También puede utilizar la función UCASE del siguiente modo, pero tenga en
cuenta que DB2 realiza una exploración de tabla en lugar de utilizar un índice
para esta operación select:
SELECT * FROM EMP WHERE UCASE(JOB) = ’NURSE’
Consulta relacionada:
v “Función escalar TRANSLATE” en el manual Consulta de SQL, Volumen 1
v “Función escalar UCASE o UPPER” en el manual Consulta de SQL, Volumen
1
v “sqlecrea - Create Database” en el manual Administrative API Reference
Diferencias entre los órdenes de clasificación de EBCDIC y ASCII
El orden en que se clasifican los datos de una base de datos depende del
orden de clasificación definido para la base de datos. Por ejemplo,
supongamos que la base de datos A utiliza el orden de clasificación por
omisión de la página de códigos EBCDIC y que la base de datos B utiliza el
orden de clasificación por omisión de la página de códigos ASCII. Los órdenes
de clasificación de estas dos bases de datos diferirían, tal como se muestra en
el siguiente ejemplo:
SELECT.....
ORDER BY COL2
COL2 COL2
---- ----
V1G 7AB
Y2W V1G
7AB Y2W
Figura 7. Ejemplo de cómo difiere un orden de clasificación basado en EBCDIC de un orden de clasificación basado
en ASCII
SELECT.....
WHERE COL2 > ’TT3’
COL2 COL2
---- ----
TW4 TW4
X72 X72
39G
Figura 8. Ejemplo de cómo una comparación de caracteres en un orden de clasificación basado en EBCDIC difiere de
una comparación de caracteres en un orden de clasificación basado en ASCII
Conceptos relacionados:
v “Guidelines for analyzing where a federated query is evaluated” en el
manual Administration Guide: Performance
Orden de clasificación especificado cuando se crea la base de datos
Nota: sólo puede definir su propio orden de clasificación para una base de
datos de un solo byte.
Consulta relacionada:
v “sqlecrea - Create Database” en el manual Administrative API Reference
Órdenes de clasificación de ejemplo
Consulta relacionada:
v “Supported territory codes and code pages” en el manual Administration
Guide: Planning
Derivación de entornos locales en programas de aplicación
Consulta relacionada:
v “Supported territory codes and code pages” en el manual Administration
Guide: Planning
Cuando desarrolle una aplicación, debe revisar los temas que siguen a este. Si
no sigue las recomendaciones que se describen en estos temas, se pueden
producir condiciones inesperadas. Estas condiciones las puede detectar el
gestor de bases de datos, así que emitirá un mensaje de error o de aviso. Por
ejemplo, una aplicación C contiene las siguientes sentencias de SQL que
operan contra una tabla T1 con una columna definida como C1 CHAR(20):
(0) EXEC SQL CONNECT TO GLOBALDB;
(1) EXEC SQL INSERT INTO T1 VALUES (’a-constant’);
strcpy(sqlstmt, "SELECT C1 FROM T1 WHERE C1=’a-constant’);
Conceptos relacionados:
v “Variables gráficas del lenguaje principal en C y C++” en la página 191
v “Derivación de valores de página de códigos” en la página 430
v “Consideraciones sobre los juegos de códigos EUC y UCS-2 de japonés y
chino tradicional” en la página 444
Soporte de idiomas nacionales y sentencias de SQL
Los puntos de código para cada uno de estos caracteres, por página de
códigos, son los siguientes:
Tabla 29. Puntos de código para caracteres especiales de doble byte
Página de Porcentaje de Subrayado de Espacio de Carácter de
códigos doble byte doble byte doble byte sustitución de
doble byte
932 X'8193' X'8151' X'8140' X'FCFC'
938 X'8193' X'8151' X'8140' X'FCFC'
942 X'8193' X'8151' X'8140' X'FCFC'
943 X'8193' X'8151' X'8140' X'FCFC'
948 X'8193' X'8151' X'8140' X'FCFC'
949 X'A3A5' X'A3DF' X'A1A1' X'AFFE'
950 X'A248' X'A1C4' X'A140' X'C8FE'
954 X'A1F3' X'A1B2' X'A1A1' X'F4FE'
964 X'A2E8' X'A2A5' X'A1A1' X'FDFE'
970 X'A3A5' X'A3DF' X'A1A1' X'AFFE'
1381 X'A3A5' X'A3DF' X'A1A1' X'FEFE'
1383 X'A3A5' X'A3DF' X'A1A1' X'A1A1'
13488 X'FF05' X'FF3F' X'3000' X'FFFD'
1363 X'A3A5' X'A3DF' X'A1A1' X'A1E0'
1386 X'A3A5' X'A3DF' X'A1A1' X'FEFE'
5039 X'8193' X'8151' X'8140' X'FCFC'
Consulta relacionada:
v “Predicado LIKE” en el manual Consulta de SQL, Volumen 1
v “Juegos de caracteres de Extended UNIX Code (EUC)” en la página 442
Conceptos relacionados:
v “Página de códigos activa para la ejecución de aplicaciones” en la página
436
Página de códigos activa para la ejecución de aplicaciones
Conceptos relacionados:
v “Página de códigos activa para precompilación y vinculación” en la página
436
Conversión de caracteres entre distintas páginas de códigos
Nota: un literal insertado en una columna definida como FOR BIT DATA se
podría convertir si dicho literal formara parte de una sentencia de
SQL que se ha convertido.
v Un producto o plataforma DB2 que no dé soporte, o que no tenga el
soporte instalado, a la combinación deseada de páginas de códigos. En este
caso, se devuelve un SQLCODE -332 (SQLSTATE 57017) si intenta ejecutar
la aplicación.
Conceptos relacionados:
v “conversión de caracteres” en el manual Consulta de SQL, Volumen 1
Sustitución de caracteres durante conversiones de páginas de códigos
Conceptos relacionados:
v “Opción del precompilador WCHARTYPE en C y C++” en la página 211
Consulta relacionada:
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Conversiones de páginas de códigos soportadas
Debe tener cuidado en situaciones en las que se pueden producir dos pasos
de conversión. Para evitar una posible pérdida de datos de caracteres,
asegúrese de seguir las conversiones de caracteres soportadas. Además,
dentro de cada grupo, solo los caracteres que existen en ambas páginas de
códigos, fuente y destino, tienen conversiones significativas. Se utilizan
otros caracteres como sustituciones y sólo resultan útiles para convertir
desde la página de códigos de destino de nuevo a la página de códigos
fuente (y no necesariamente proporcionan conversiones significativas en el
proceso de conversión de dos pasos mencionado anteriormente). Estos
problemas se pueden evitar si la página de códigos de la aplicación
coincide con la de la base de datos.
v Si los datos se derivan de operaciones realizadas en datos de caracteres, en
los que la fuente puede ser la página de códigos de la aplicación, la de la
base de datos, FOR BIT DATA o datos BLOB, la conversión de datos se basa
en un conjunto de normas. Es posible que algunos de los elementos de
datos, o todos ellos, se tengan que convertir a un resultado intermedio
antes de que se pueda determinar la página de códigos de destino final.
Conceptos relacionados:
v “conversión de caracteres” en el manual Consulta de SQL, Volumen 1
Consulta relacionada:
v “Supported territory codes and code pages” en el manual Administration
Guide: Planning
Factor de expansión de conversión de página de códigos
Conceptos relacionados:
v “Desarrollo de aplicaciones en situaciones de páginas de códigos distintas”
en la página 449
Consulta relacionada:
v “CONNECT (Tipo 1) sentencia” en el manual Consulta de SQL, Volumen 2
v “CONNECT (Tipo 2) sentencia” en el manual Consulta de SQL, Volumen 2
Dentro de cada tabla de códigos DBCS implícita, hay 256 puntos de código
disponibles como el segundo byte para cada primer byte válido. Los valores
de segundo byte pueden adoptar cualquier valor comprendido entre X'40' y
X'7E' y entre X'80' y X'FE'. Tenga en cuenta que, en entornos DBCS, DB2 no
realiza la comprobación de validez de caracteres individuales de doble byte.
DB2 Universal Database soporta todos los caracteres Unicode que se pueden
codificar utilizando UCS-2, pero no realiza ninguna composición,
descomposición ni normalización de los caracteres. Puede encontrar más
información acerca del estándar Unicode en el sitio de Unicode Consortium,
www.unicode.org, y en la última edición de la publicación sobre el estándar
Unicode publicada por Addison Wesley Longman, Inc.
En los apartados siguientes se explica cómo manejar los datos en este entorno.
En estas secciones, el término EUC se utiliza únicamente para hacer referencia
a los juegos de caracteres EUC del japonés y del chino tradicional. Observe
que las explicaciones no se aplican al soporte por parte de DB2 de EUC del
coreano y del chino simplificado, puesto que los datos gráficos de estos juegos
de caracteres se representan utilizando la codificación EUC.
Conceptos relacionados:
v “Factor de expansión de conversión de página de códigos” en la página 440
v “Desbordamiento de longitud de serie de conversión de página de códigos
en entornos de juegos de códigos mixtos” en la página 457
Consulta relacionada:
v “Supported territory codes and code pages” en el manual Administration
Guide: Planning
v “Juegos de caracteres de Extended UNIX Code (EUC)” en la página 442
A7A1
UCS-2 C4A1
C4A1
Así, los elementos de código originales A7A1 y C4A1 terminan siendo C4A1
después de la conversión.
Consulta relacionada:
v “Función escalar GRAPHIC” en el manual Consulta de SQL, Volumen 1
v “SELECT sentencia” en el manual Consulta de SQL, Volumen 2
v “Series gráficas” en el manual Consulta de SQL, Volumen 1
Desarrollo de aplicaciones en situaciones de páginas de códigos
distintas
Conceptos relacionados:
v “Desbordamiento de longitud de serie de conversión de página de códigos
en entornos de juegos de códigos mixtos” en la página 457
Validación de parámetros basada en cliente en un entorno de juegos de
códigos mixtos
Una sentencia DESCRIBE realizada para una base de datos EUC devolverá
información sobre columnas mixtas de caracteres y gráficos (GRAPHIC) en
base a la definición de dichas columnas en la base de datos. Esta información
se basa en la página de códigos del servidor antes de que se convierta a la
página de códigos del cliente.
Las consideraciones son distintas para una aplicación EUC que accede a una
base de datos DBCS, en comparación con una aplicación DBCS que accede a
una base de datos EUC:
v Aplicación EUC que accede a una base de datos DBCS
Si la página de códigos de la aplicación es una página de códigos EUC, y si
ésta emite una sentencia DESCRIBE para una base de datos que tiene una
página de códigos DBCS, la información devuelta para las columnas CHAR
y GRAPHIC se devuelve en el contexto de la base de datos. Por ejemplo,
una columna CHAR(5) devuelta como parte de una sentencia DESCRIBE
que tiene un valor de cinco en el campo SQLLEN. En el caso de datos que
no son EUC, se asignan cinco bytes de almacenamiento cuando se captan
los datos de esta columna. Con los datos EUC, el caso puede ser distinto. Si
tiene lugar una conversión de página de códigos de DBCS a EUC, se puede
producir un incremento de la longitud de los datos debido a la codificación
distinta utilizada para los caracteres de las columnas CHAR. Por ejemplo,
con el juego de caracteres del chino tradicional, el aumento máximo es el
doble. Es decir, la longitud máxima de un carácter en la codificación DBCS
es de dos bytes, que puede aumentar hasta una longitud máxima de cuatro
bytes en EUC. Para el juego de códigos del japonés, el incremento máximo
también es el doble. Sin embargo, observe que, mientras que la longitud
máxima de un carácter en DBCS del japonés es de dos bytes, puede
aumentar hasta un máximo de tres bytes en EUC del japonés. Aunque este
incremento sólo parece corresponder a un factor de 1,5, los caracteres
Katakana de un solo byte en DBCS del japonés tienen sólo una longitud de
un byte, mientras que en el EUC del japonés tienen una longitud de dos
bytes.
Los cambios posibles en la longitud de los datos como consecuencia de
conversiones de caracteres sólo se aplican a los datos mixtos de tipo
carácter. La codificación de datos de caracteres gráficos siempre tiene la
misma longitud, dos bytes, independientemente del esquema de
codificación. Para evitar una pérdida de datos, es necesario evaluar si existe
una situación de páginas de códigos desiguales, y si ésta se produce entre
una aplicación EUC y una base de datos DBCS. Puede determinar la página
de códigos de la base de datos y la de la aplicación mediante las señales de
la SQLCA devuelta por una sentencia CONNECT. Si existe una situación de
este tipo, es necesario que la aplicación asigne almacenamiento adicional
para los datos mixtos de tipo carácter en base al factor de expansión
máxima para ese esquema de codificación.
v Aplicación DBCS que accede a una base de datos EUC
Si la página de códigos de la aplicación es una página de códigos DBCS y
emite una sentencia DESCRIBE para una base de datos EUC, la situación es
parecida a la que se produce cuando una aplicación EUC accede a una base
Conceptos relacionados:
v “Derivación de valores de página de códigos” en la página 430
v “Factor de expansión de conversión de página de códigos” en la página 440
v “Desbordamiento de longitud de serie de conversión de página de códigos
en entornos de juegos de códigos mixtos” en la página 457
Consulta relacionada:
v “DESCRIBE sentencia” en el manual Consulta de SQL, Volumen 2
Datos de longitud fija y de longitud variable en entornos de juegos de
códigos mixtos
Otras situaciones que debe tener en cuenta son aquellas en las que la
conversión de caracteres da como resultado una longitud de serie que
sobrepasa el límite correspondiente al tipo de datos y conversiones de página
de códigos en procedimientos almacenados:
v Conversión de caracteres sobrepasa un límite de tipo de datos
En entornos de páginas de códigos desiguales EUC y DBCS, después de
que tenga lugar una conversión se pueden producir situaciones en que la
longitud de una serie de caracteres mixtos o gráfica supere la longitud
máxima permitida para ese tipo de datos. Si la longitud de la serie, después
de una expansión, supera el límite del tipo de datos, no se produce ninguna
gestión del tipo. En cambio, se devuelve un mensaje de error que indica
que se ha excedido la longitud máxima de expansión permitida. Es más
probable que se produzca esta situación mientras se evalúan predicados que
durante las inserciones. En las inserciones, la aplicación conoce más pronto
la anchura de la columna y el factor de expansión máxima se puede tener
en cuenta enseguida. En muchos casos, se puede evitar este efecto colateral
de la conversión de caracteres cambiando el valor por un tipo de datos
asociado cuya longitud máxima sea mayor. Por ejemplo, la longitud
máxima de un valor CHAR es de 254 bytes, mientras que la longitud
máxima de un VARCHAR es de 32 672 bytes. En los casos en que la
expansión no supera la longitud máxima del tipo de datos, se devuelve
SQLCODE -334 (SQLSTATE 22524).
v Conversión de página de códigos en un procedimiento almacenado
Los datos de caracteres mixtos o gráficos especificados en variables de
lenguaje principal y SQLDA en invocaciones a sqleproc() o a CALL de
SQL se convierten en las situaciones en que las páginas de códigos de la
aplicación y de la base de datos son distintas. En los casos en que se
produce una expansión de la longitud de la serie como consecuencia de la
conversión, se recibe un SQLCODE -334 (SQLSTATE 22524) si no hay
suficiente espacio asignado para manejar la expansión. Así, cuando cree
procedimientos almacenados, se debe asegurar de proporcionar suficiente
espacio para una expansión potencial de las series. Debe utilizar tipos de
datos de longitud variable con un espacio asignado suficiente que permita
la expansión.
Consulta relacionada:
v “Función escalar COALESCE” en el manual Consulta de SQL, Volumen 1
Para las aplicaciones que se conectan a una base de datos Unicode, los datos
GRAPHIC ya están en Unicode. Para las aplicaciones que se conectan a bases
de datos DBCS, los datos GRAPHIC se convierten entre la página de códigos
DBCS de la aplicación y la página de códigos DBCS de la base de datos. Las
aplicaciones Unicode deben llevar a cabo las conversiones necesarias a
Unicode y desde ellas mismas o deben definir la opción WCHARTYPE
CONVERT y utilizar wchar_t para datos gráficos.
Una unidad de trabajo es una sola transacción lógica. Consta de una secuencia
de sentencias de SQL en que todas las operaciones se realizan
satisfactoriamente o la secuencia global se considera no satisfactoria.
Conceptos relacionados:
v “X/Open distributed transaction processing model” en el manual
Administration Guide: Planning
v “Multisite Updates” en el manual DB2 Connect User’s Guide
Cuándo utilizar la actualización múltiple
CONNECT TO D1 CONNECT TO D1
SELECT SELECT
UPDATE UPDATE
COMMIT
CONNECT TO D2
CONNECT TO D2 INSERT
INSERT RELEASE CURRENT
COMMIT
SET CONNECTION D1
CONNECT TO D1 SELECT
SELECT RELEASE D1
COMMIT COMMIT
CONNECT RESET
Conceptos relacionados:
v “Sentencias de SQL en aplicaciones de actualización múltiple” en la página
463
Consulta relacionada:
v “CONNECT (Tipo 1) sentencia” en el manual Consulta de SQL, Volumen 2
v “CONNECT (Tipo 2) sentencia” en el manual Consulta de SQL, Volumen 2
v “sqlesetc - Set Client” en el manual Administrative API Reference
v “sqleqryi - Query Client Information” en el manual Administrative API
Reference
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Conceptos relacionados:
v “Multisite Updates” en el manual DB2 Connect User’s Guide
v “Multisite update and sync point manager” en el manual DB2 Connect
User’s Guide
Tareas relacionadas:
v “Enabling Multisite Updates using the Control Center” en el manual DB2
Connect User’s Guide
Consulta relacionada:
v “Sync Point Manager Log File Path configuration parameter -
spm_log_path” en el manual Administration Guide: Performance
v “Transaction Resync Interval configuration parameter - resync_interval” en
el manual Administration Guide: Performance
v “Transaction Manager Database Name configuration parameter -
tm_database” en el manual Administration Guide: Performance
v “Transaction Processor Monitor Name configuration parameter -
tp_mon_name” en el manual Administration Guide: Performance
v “Lock Timeout configuration parameter - locktimeout” en el manual
Administration Guide: Performance
v “Sync Point Manager Name configuration parameter - spm_name” en el
manual Administration Guide: Performance
Procedimiento:
Conceptos relacionados:
v “Aplicaciones en entornos de sistema principal o iSeries” en la página 527
Transacciones simultáneas
Las secciones siguientes describen las transacciones simultáneas y cómo evitar
problemas con las mismas.
Transacciones simultáneas
Algunas veces, resulta de utilidad para una aplicación tener varias conexiones
independientes denominadas transacciones simultáneas. Mediante la utilización
de transacciones simultáneas, una aplicación puede conectar con varias bases
de datos al mismo tiempo, y puede establecer varias conexiones distintas con
la misma base de datos.
Por ejemplo, suponga que está creando una aplicación que permite que un
usuario ejecute sentencias de SQL para una base de datos, y que mantiene un
registro de las actividades realizadas en una segunda base de datos. Puesto
que el registro se debe mantener actualizado, es necesario emitir una sentencia
COMMIT después de cada actualización del mismo, pero no se desea que las
sentencias de SQL del usuario se vean afectadas por las confirmaciones del
registro. Ésta es una situación perfecta para las transacciones simultáneas. En
la aplicación, cree dos contextos: uno conectará con la base de datos del
usuario y se utilizará para todo el SQL del usuario; el otro conectará con la
base de datos del registro y se utilizará para actualizar el registro. Mediante
este diseño, cuando confirme un cambio efectuado en la base de datos del
registro, no afectará a la unidad de trabajo actual del usuario.
Conceptos relacionados:
v “Objetivo del acceso a base de datos de varias hebras” en la página 227
Problemas potenciales con transacciones simultáneas
contexto 2
SELECT * FROM TAB1
COMMIT
contexto 1
COMMIT
Conceptos relacionados:
v “Cómo evitar puntos muertos para transacciones simultáneas” en la página
471
Cómo evitar puntos muertos para transacciones simultáneas
contexto 2
SELECT * FROM TAB1
COMMIT
contexto 1
COMMIT
Aunque las técnicas para evitar puntos muertos se describen en términos del
ejemplo, las puede aplicar a todas las aplicaciones que utilizan transacciones
simultáneas.
Conceptos relacionados:
v “Problemas potenciales con transacciones simultáneas” en la página 470
Consulta relacionada:
v “Lock Timeout configuration parameter - locktimeout” en el manual
Administration Guide: Performance
Conceptos relacionados:
v “Security considerations for XA transaction managers” en el manual
Administration Guide: Planning
v “Configuration considerations for XA transaction managers” en el manual
Administration Guide: Planning
v “XA function supported by DB2 UDB” en el manual Administration Guide:
Planning
v “Actualización múltiple con DB2 Connect” en la página 539
Tareas relacionadas:
v “Updating host or iSeries database servers with an XA-compliant
transaction manager” en el manual Administration Guide: Planning
Para producir una aplicación ejecutable, es necesario que enlace los objetos de
la aplicación con las bibliotecas de lenguajes, las bibliotecas del sistema
operativo, las bibliotecas normales del gestor de bases de datos y las
bibliotecas del supervisor TP y de los productos gestores de transacciones.
Si declara un cursor desde el cual sólo pretende leer, incluya FOR READ
ONLY o FOR FETCH ONLY en la declaración del OPEN CURSOR. (FOR
READ ONLY y FOR FETCH ONLY son sentencias equivalentes.) Los cursores
FOR READ ONLY permiten que la partición coordinadora recupere varias
filas a la vez, mejorando en gran medida el rendimiento de las sentencias
FETCH posteriores. Cuando los cursores no se declaran explícitamente como
FOR READ ONLY, la partición coordinadora los trata como cursores
actualizables. Los cursores actualizables incurren en un gasto considerable,
puesto que requieren que la partición coordinadora sólo recupere una única
fila por cada FETCH.
Conceptos relacionados:
v “DDS dirigida en entornos de bases de datos particionadas” en la página
478
v “Elusión local en entornos de bases de datos particionadas” en la página
479
DDS dirigida en entornos de bases de datos particionadas
Consulta relacionada:
v “sqlugrpn - Get Row Partitioning Number” en el manual Administrative API
Reference
v “db2atld - Mandato Cargador automático” en el manual Consulta de
mandatos
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 479
Inserciones en almacenamiento intermedio en entornos de bases de
datos particionadas
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 481
ejecuta la otra sentencia (aquélla que cierra la inserción en
almacenamiento intermedio), siempre que todas las filas se hayan
insertado satisfactoriamente.
Una aplicación que se enlaza lógicamente con INSERT BUF se debe escribir de
forma que la misma sentencia INSERT con la cláusula VALUES se reitere
repetidamente antes de que se emita cualquier sentencia o API que cierre una
inserción en almacenamiento intermedio.
Conceptos relacionados:
v “Creación y preparación del archivo fuente” en la página 79
v “Creación de paquetes mediante el mandato BIND” en la página 89
v “Consideraciones sobre la utilización de inserciones en almacenamiento
intermedio” en la página 483
v “Restricciones en la utilización de inserciones en almacenamiento
intermedio” en la página 486
Consideraciones sobre la utilización de inserciones en almacenamiento
intermedio
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 483
partición correcta. Estos almacenamientos intermedios se envían a sus
particiones de destino cuando se llenan o cuando un suceso ocasiona que se
vacíen. Cuando diseñe y codifique la aplicación, debe tener en cuenta los
aspectos siguientes:
v Existen determinadas condiciones de error de las que no se informa cuando
se ejecuta la sentencia INSERT. Se informa de ellas más tarde, cuando se
ejecuta la primera sentencia que no sea INSERT (o INSERT en otro tabla),
como por ejemplo DELETE, UPDATE, COMMIT o ROLLBACK. Cualquier
sentencia o API que cierre la sentencia de inserción en almacenamiento
intermedio puede ver el informe de errores. Asimismo, cualquier invocación
de la propia inserción puede ver un error de una fila insertada previamente.
Por otra parte, si otra sentencia informa de un error de una inserción en
almacenamiento intermedio, como por ejemplo UPDATE o COMMIT, DB2
no intentará ejecutar dicha sentencia.
v Un error detectado durante la inserción de un grupo de filas hace que se
retrotraigan todas las filas de dicho grupo. Un grupo de filas se define
como todas las filas insertadas mediante ejecuciones de una sentencia de
inserción en almacenamiento intermedio:
– Desde el principio de la unidad de trabajo,
– Desde que se preparó la sentencia (si ésta es dinámica), o
– Desde la ejecución anterior de otra sentencia de actualización. Para ver
una lista de las sentencias que cierran (o vacían) una inserción en
almacenamiento intermedio, consulte la descripción de inserciones en
almacenamiento intermedio en entornos de bases de datos particionadas.
v Es posible que una fila insertada no resulte visible inmediatamente para la
sentencias SELECT emitidas después de INSERT por el mismo programa de
aplicación, en caso de que SELECT se ejecute utilizando un cursor.
Suponga que el archivo contiene 8 000 valores, pero el valor 3 258 no es lícito
(por ejemplo, contiene una violación de la clave exclusiva). Cada 1 000
inserciones dan como resultado la ejecución de otra sentencia de SQL que, a
continuación, cierra la sentencia INSERT INTO t2. Durante el cuarto grupo de
1 000 inserciones, se detectará el error del valor 3 258. Se puede detectar
después de la inserción de más valores (y no necesariamente después del
siguiente). En esta situación, se devuelve un código de error para la sentencia
INSERT INTO t2.
En cambio, suponga que tiene que insertar 3 900 filas. Antes de que se le
indique el error de la fila número 3 258, la aplicación puede salir del bucle e
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 485
intentar emitir una sentencia COMMIT. El código de retorno de la violación
de la clave exclusiva se emitirá para la sentencia COMMIT y no se ejecutará
COMMIT. Si la aplicación desea confirmar (COMMIT) las 3000 filas que se
encuentran hasta ahora en la base de datos (la última ejecución de EXEC SQL
INSERT INTO t3 ... finaliza el punto de rescate para estas 3000 filas), habrá
que volver a emitir la sentencia COMMIT. También se aplican consideraciones
parecidas a ROLLBACK.
Conceptos relacionados:
v “Inserciones en almacenamiento intermedio en entornos de bases de datos
particionadas” en la página 480
Restricciones en la utilización de inserciones en almacenamiento
intermedio
Suponga que tiene una tabla llamada EMPLOYEE que está almacenada en 20
particiones de bases de datos, y que genera una lista de correo (FIRSTNME,
LASTNAME, JOB) de todos los empleados que pertenecen a un departamento
legítimo (es decir, en que WORKDEPT no es NULL).
En AIX, puede utilizar una propiedad de los archivos del Sistema de archivos
de red (NFS) para automatizar la fusión. Si todas las particiones dirigen sus
conjuntos de respuestas al mismo archivo de un montaje por NFS, los
resultados se fusionan. Observe que una utilización de NFS sin bloquear la
respuesta en almacenamientos intermedios grandes tiene como consecuencia
un rendimiento muy pobre.
SELECT FIRSTNME, LASTNAME, JOB FROM EMPLOYEE WHERE WORKDEPT IS NOT NULL
AND NODENUMBER(NAME) = CURRENT NODE
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 487
El resultado se puede almacenar en un archivo local (lo que significa que el
resultado final constará de 20 archivos, cada uno de los cuales contendrá una
porción del conjunto de respuestas completo), o en un solo archivo montado
por NFS.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sqlenv.h>
#include <errno.h>
#include <sys/access.h>
#include <sys/flock.h>
#include <unistd.h>
/* Inicialización */
if (argc == 3) {
strcpy( dbname, argv[2] ); /* obtener nombre de base de datos del argumento */
EXEC SQL CONNECT TO :dbname IN SHARE MODE ;
if ( SQLCODE != 0 ) {
printf( "Error: CONNECT TO the database failed. SQLCODE = %ld\n",
SQLCODE );
exit(1);
}
}
else if ( argc == 5 ) {
strcpy( dbname, argv[2] ); /* obtener nombre de base de datos del argumento */
strcpy (userid, argv[3]);
strcpy (passwd, argv[4]);
EXEC SQL CONNECT TO :dbname IN SHARE MODE USER :userid USING :passwd;
if ( SQLCODE != 0 ) {
printf( "Error: CONNECT TO the database failed. SQLCODE = %ld\n",
SQLCODE );
exit( 1 );
}
}
else
printf ("\nUSAGE: largevol txt_file database [userid passwd]\n\n");
exit( 1 ) ;
} /* endif */
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 489
/* Declarar y abrir el cursor */
do {
EXEC SQL FETCH c1 INTO :first_name, :last_name, :job_code;
buffer_len += sprintf( write_ptr, "%s %s %s\n",
first_name, last_name, job_code );
buffer_len = strlen( file_buf ) ;
/* Grabar el contenido del almac. int. en archivo */
/* si el almac. int. alcanza el límite */
if ( buffer_len >= ( BUF_SIZE - MAX_RECORD_SIZE ) ) {
/* obtener bloqueo exclusivo de grabación */
lock_rc = fcntl( iFileHandle, lock_command, &lock );
if ( lock_rc != 0 ) goto file_lock_err;
/* posicionar al final del archivo */
lock_rc = lseek( iFileHandle, 0, SEEK_END );
if ( lock_rc < 0 ) goto file_seek_err;
/* grabar el almacenamiento intermedio */
lock_rc = write( iFileHandle,
( void * ) file_buf, buffer_len );
if ( lock_rc < 0 ) goto file_write_err;
/* liberar el bloqueo */
lock_rc = fcntl( iFileHandle, lock_command, &unlock );
if ( lock_rc != 0 ) goto file_unlock_err;
file_buf[0] = ’\0’ ; /* restablecer almacenamiento intermedio */
buffer_len = 0 ; /* restablecer longitud del almacenamiento intermedio */
write_ptr = file_buf ; /* restablecer puntero de grabación */
}
else
write_ptr = file_buf + buffer_len ; /* siguiente posición de grabación */
}
} while (1) ;
Este método no sólo es aplicable a la selección de una única tabla, sino que
también sirve para consultas más complejas. No obstante, si la consulte
requiere operaciones no distribuidas (es decir, Explain muestra más de una
subsección junto a la subsección Coordinator), puede tener como consecuencia
que se produzca un número excesivo de procesos en algunas particiones, en
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 491
caso de que la consulta se ejecute en paralelo en todas las particiones. En esta
situación, puede almacenar el resultado de la consulta en una tabla temporal
TEMP, en tantas particiones como sea necesario, y luego realizar la extracción
final en paralelo desde TEMP.
Procedimiento:
Resolución de problemas
Las secciones siguientes describen cómo solucionar problemas de aplicaciones
en un entorno de bases de datos particionadas.
Consideraciones sobre el manejo de errores en entornos de bases de
datos particionadas
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 493
v Varias estructuras SQLCA fusionadas
v Cómo identificar la partición que ha devuelto el error
Conceptos relacionados:
v “Errores graves en entornos de bases de datos particionadas” en la página
494
v “Varias estructuras SQLCA fusionadas” en la página 495
v “Partición que devuelve el error” en la página 496
Tareas relacionadas:
v “Manually resolving indoubt transactions” en el manual Administration
Guide: Planning
Errores graves en entornos de bases de datos particionadas
Consulta relacionada:
v “Mandato RESTART DATABASE” en el manual Consulta de mandatos
Varias estructuras SQLCA fusionadas
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 495
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
Partición que devuelve el error
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
Aplicaciones en bucle o suspendidas
Una de las funciones del supervisor del sistema de bases de datos que resulta
útil para depurar aplicaciones consiste en visualizar el estado de todos los
agentes activos. Para sacar el máximo provecho de una instantánea, asegúrese
de que la recopilación de sentencias se realiza antes de ejecutar la aplicación
(preferiblemente inmediatamente después de ejecutar DB2START) del
siguiente modo:
db2_all "db2 UPDATE MONITOR SWITCHES USING STATEMENT ON"
Conceptos relacionados:
v “Database system monitor” en el manual System Monitor Guide and Reference
v “The database system-monitor information” en el manual Administration
Guide: Performance
Consulta relacionada:
v “Mandato GET SNAPSHOT” en el manual Consulta de mandatos
Capítulo 17. Consideraciones sobre programación para entornos de bases de datos particionadas 497
498 Programación de aplicaciones cliente
Capítulo 18. Técnicas comunes de aplicación de DB2
Columnas generadas . . . . . . . . . 499 Comparación entre puntos de rescate de
Columnas de identidad . . . . . . . . 500 la aplicación y bloques de SQL compuesto 511
Valores secuenciales y objetos de secuencia 501 Sentencias de SQL para crear y controlar
Generación de valores secuenciales . . . 502 puntos de rescate . . . . . . . . . 513
Gestión del comportamiento de Restricciones sobre el uso de puntos de
secuencias . . . . . . . . . . . 504 rescate . . . . . . . . . . . . 514
Rendimiento de la aplicación y objetos de Puntos de rescate y Lenguaje de
secuencia . . . . . . . . . . . 505 definición de datos (DDL) . . . . . . 514
Comparación entre objetos de secuencia y Puntos de rescate e inserciones en
columnas de identidad . . . . . . . 506 almacenamiento intermedio . . . . . 515
Tablas temporales declaradas y rendimiento Puntos de rescate y bloqueo de cursor 516
de la aplicación . . . . . . . . . . 506 Puntos de rescate y gestores de
Puntos de rescate y transacciones . . . . 509 transacciones que cumplen con XA . . . 517
Gestión de transacciones con puntos de Transmisión de grandes volúmenes de datos
rescate . . . . . . . . . . . . 509 a través de una red . . . . . . . . . 517
Columnas generadas
Consulta relacionada:
v “ALTER TABLE sentencia” en el manual Consulta de SQL, Volumen 2
v “CREATE TABLE sentencia” en el manual Consulta de SQL, Volumen 2
Ejemplos relacionados:
v “TbGenCol.java -- How to use generated columns (JDBC)”
Columnas de identidad
Para recuperar el valor generado después de insertar una fila nueva en una
tabla con una columna de identidad, utilice la función identity_val_local().
Conceptos relacionados:
v “Identity columns” en el manual Administration Guide: Planning
Tareas relacionadas:
v “Defining an identity column on a new table” en el manual Administration
Guide: Implementation
v “Modifying an identity column definition” en el manual Administration
Guide: Implementation
v “Altering an identity column” en el manual Administration Guide:
Implementation
Consulta relacionada:
v “ALTER TABLE sentencia” en el manual Consulta de SQL, Volumen 2
v “CREATE TABLE sentencia” en el manual Consulta de SQL, Volumen 2
Ejemplos relacionados:
v “tbident.sqc -- How to use identity columns (C)”
v “TbIdent.java -- How to use Identity Columns (JDBC)”
v “TbIdent.sqlj -- How to use Identity Columns (SQLj)”
1
-----------
1
1 registro(s) seleccionado(s).
Para visualizar el valor actual del objeto de secuencia, emita una sentencia
VALUES que utilice la expresión PREVVAL:
VALUES PREVVAL FOR id_values
1
-----------
1
1 registro(s) seleccionado(s).
1
-----------
1
1 registro(s) seleccionado(s).
1
-----------
1
1 registro(s) seleccionado(s).
1
-----------
2
1 registro(s) seleccionado(s).
1
-----------
2
1 registro(s) seleccionado(s).
Para actualizar el valor de una columna con el siguiente valor del objeto de
secuencia, incluya la expresión NEXTVAL en la sentencia UPDATE, del modo
siguiente:
UPDATE personal
SET id = NEXTVAL FOR id_values
WHERE id = 350
Para insertar una nueva fila en una tabla utilizando el siguiente valor del
objeto de secuencia, incluya la expresión NEXTVAL en la sentencia INSERT,
del modo siguiente:
INSERT INTO personal (id, nombre, dept, cargo)
VALUES (NEXTVAL FOR id_values, ‘Kandil’, 51, ‘Director’)
Consulta relacionada:
v “CREATE SEQUENCE sentencia” en el manual Consulta de SQL, Volumen 2
Ejemplos relacionados:
v “DbSeq.java -- How to create, alter and drop a sequence in a database
(JDBC)”
Por ejemplo, para crear un objeto de secuencia llamado id_values que empiece
con un valor mínimo de 0, tenga un valor máximo de 1000, incremente en 2
Consulta relacionada:
v “Límites de SQL” en el manual Consulta de SQL, Volumen 1
v “ALTER SEQUENCE sentencia” en el manual Consulta de SQL, Volumen 2
v “CREATE SEQUENCE sentencia” en el manual Consulta de SQL, Volumen 2
Rendimiento de la aplicación y objetos de secuencia
Los objetos de secuencia evitan los problemas de bloqueo que están asociados
con el enfoque de tablas de una única columna y pueden almacenar en
antememoria valores de secuencia en memoria para mejorar el tiempo de
respuesta de DB2. Para maximizar el rendimiento de aplicaciones que utilizan
objetos de secuencia, asegúrese de que el objeto de secuencia almacene en
antememoria una cantidad apropiada de valores de secuencia. La cláusula
CACHE de las sentencias CREATE SEQUENCE y ALTER SEQUENCE
especifica el número máximo de valores de secuencia que DB2 genera y
almacena en memoria.
Una tabla temporal declarada es una tabla temporal a la que sólo pueden
acceder las sentencias de SQL que emite la aplicación que ha creado la tabla
temporal. Una tabla temporal declarada no dura más que la conexión de la
aplicación con la base de datos.
Para utilizar una tabla temporal declarada, siga los pasos siguientes:
Observe que DB2 también le permite crear tablas permanentes con el esquema
SESSION. Si crea una tabla permanente con el nombre calificado
SESSION.TT3, luego puede crear una tabla temporal declarada con el nombre
calificado SESSION.TT3. En esta situación, DB2 siempre resuelve las
referencias a las tablas permanente y temporal declarada con nombres
calificados idénticos a la tabla temporal declarada. Para evitar confundir tablas
permanentes con tablas temporales declaradas, no debe crear tablas
permanentes con el esquema SESSION.
Si crea una aplicación que incluye una referencia de SQL estático a una tabla,
vista o alias calificado con el esquema SESSION, el precompilador de DB2 no
compila dicha sentencia en el momento de la vinculación y marca la sentencia
para indicar que “necesita compilación”. En el tiempo de ejecución, DB2
compila la sentencia. Este comportamiento se denomina vinculación
incremental. DB2 realiza automáticamente una vinculación incremental para
referencias de SQL estático a tablas, vistas y alias calificados con el esquema
SESSION. No hace falta que especifique la opción VALIDATE RUN en el
mandato BIND o PRECOMPILE para permitir una vinculación incremental
para dichas sentencias.
Si emite una sentencia ROLLBACK para una transacción que incluye una
sentencia DECLARE GLOBAL TEMPORARY TABLE, DB2 elimina la tabla
temporal declarada. Si emite una sentencia DROP TABLE para una tabla
temporal declarada, al emitir una sentencia ROLLBACK para dicha
Consulta relacionada:
v “DECLARE GLOBAL TEMPORARY TABLE sentencia” en el manual
Consulta de SQL, Volumen 2
Ejemplos relacionados:
v “tbsavept.sqc -- How to use external savepoints (C)”
Comparación entre puntos de rescate de la aplicación y bloques de SQL
compuesto
Los puntos de rescate ofrecen las siguientes ventajas sobre los bloques de SQL
compuesto:
v Control mejorado de transacciones
v Menor contención de bloqueo
v Integración mejorada con la lógica de la aplicación
Los bloques de SQL compuesto pueden ser de tipo ATOMIC o NOT ATOMIC.
Si una sentencia dentro de un bloque de SQL compuesto de tipo ATOMIC
falla, el bloque de SQL compuesto entero se retrotrae. Si una sentencia dentro
de un bloque de SQL compuesto de tipo NOT ATOMIC falla, la aplicación
controla la confirmación o retrotracción de la aplicación, incluido el bloque de
SQL compuesto entero. En comparación, si una sentencia dentro del ámbito
de un punto de rescate falla, la aplicación puede retrotraer todas las
sentencias del ámbito del punto de rescate pero confirmar el trabajo realizado
por sentencias externas al ámbito del punto de rescate. Esta opción se ilustra
en el siguiente ejemplo. Si el trabajo del punto de rescate se retrotrae, el
trabajo de las dos sentencias INSERT anteriores al punto de rescate se
confirma. Como alternativa, la aplicación puede confirmar el trabajo realizado
por todas las sentencias de la transacción, incluidas las sentencias dentro del
ámbito del punto de rescate.
if (strcmp(Radio..power_source(), "AC/DC"))
{
add_batteries();
}
-- Pseudo-SQL:
IF SQLSTATE = "No Power Cord"
ROLLBACK TO SAVEPOINT before_radio
COMMIT
}
Consulta relacionada:
v “ROLLBACK sentencia” en el manual Consulta de SQL, Volumen 2
v “RELEASE SAVEPOINT sentencia” en el manual Consulta de SQL, Volumen
2
v “SAVEPOINT sentencia” en el manual Consulta de SQL, Volumen 2
Ejemplos relacionados:
Conceptos relacionados:
v “Puntos de rescate y Lenguaje de definición de datos (DDL)” en la página
514
Puntos de rescate y Lenguaje de definición de datos (DDL)
Puede emitir una sentencia CLOSE para cerrar los cursores no válidos. Si
emite una sentencia FETCH contra un cursor no válido, DB2 devuelve
SQLCODE −910. Si emite una sentencia OPEN contra un cursor no válido,
DB2 devuelve SQLCODE −502. Si emite una sentencia UPDATE o DELETE
WHERE CURRENT OF contra un cursor no válido, DB2 devuelve SQLCODE
−910.
Dentro de los puntos de rescate, DB2 trata las tablas con la propiedad NOT
LOGGED INITIALLY y las tablas temporales del siguiente modo:
Tablas NOT LOGGED INITIALLY
Dentro de un punto de rescate, puede crear una tabla con la
propiedad NOT LOGGED INITIALLY o modificar una tabla para que
tenga la propiedad NOT LOGGED INITIALLY. Sin embargo, para
estos puntos de rescate DB2 trata las sentencias ROLLBACK TO
SAVEPOINT como sentencias ROLLBACK WORK y retrotrae la
transacción entera.
DECLARE TEMPORARY TABLE dentro del punto de rescate
Si se declara una tabla temporal dentro de un punto de rescate, una
sentencia ROLLBACK TO SAVEPOINT elimina la tabla temporal.
DECLARE TEMPORARY TABLE fuera del punto de rescate
Si se declara una tabla temporal fuera de un punto de rescate, una
sentencia ROLLBACK TO SAVEPOINT no elimina la tabla temporal.
Puntos de rescate e inserciones en almacenamiento intermedio
Consulta relacionada:
v “Mandato BIND” en el manual Consulta de mandatos
v “Mandato PRECOMPILE” en el manual Consulta de mandatos
Puntos de rescate y bloqueo de cursor
Consulta relacionada:
Los datos también se pueden pasar utilizando uno de los tipos de gráficos
siguientes:
v VARGRAPHIC
v LONG VARGRAPHIC
v DBCLOB
Tareas relacionadas:
v “Specifying row blocking to reduce overhead” en el manual Administration
Guide: Performance
Consulta relacionada:
v “DESCRIBE sentencia” en el manual Consulta de SQL, Volumen 2
v “Administración de los archivos JAR en el servidor de bases de datos” en el
manual Guía de desarrollo de aplicaciones: Programación de aplicaciones de
servidor
DB2 Connect le permite utilizar las API siguientes con productos de base de
datos de sistema principal, como por ejemplo DB2 Universal Database para
OS/390 y z/OS, siempre que dichos productos soporten el elemento:
v SQL incorporado, tanto estático como dinámico
v La Interfaz a nivel de llamada de DB2
v La API ODBC de Microsoft
v JDBC
DB2 Connect acepta algunas sentencias de SQL que DB2 Universal Database
no soporta. DB2 Connect pasa estas sentencias al servidor de sistema principal
o iSeries. Para obtener información sobre los límites en las distintas
plataformas, como por ejemplo la longitud máxima de columna, consulte el
tema sobre límites de SQL.
Si traslada una aplicación CICS desde OS/390 o VSE para que se ejecute bajo
otro producto CICS (por ejemplo, CICS para AIX), ésta también puede acceder
a la base de datos OS/390 o VSE utilizando DB2 Connect. Consulte los
manuales CICS/6000 Application Programming Guide y CICS Customization and
Operation para obtener más detalles.
Nota: puede utilizar DB2 Connect con una base de datos DB2 Universal
Database Versión 8, aunque sólo necesita un cliente DB2. La mayoría de
puntos de incompatibilidad relacionados en los temas siguientes no se
producirán si utiliza DB2 Connect para una base de datos DB2
Universal Database Versión 8, excepto en aquellos casos en que exista
una restricción debida a una limitación del propio DB2 Connect.
Tareas relacionadas:
v “Creación de la base de datos sample en servidores de sistema principal o
AS/400 e iSeries” en el manual Guía de desarrollo de aplicaciones: Creación y
ejecución de aplicaciones
Consulta relacionada:
v “Límites de SQL” en el manual Consulta de SQL, Volumen 1
Las sentencias DDL difieren según el producto de base de datos IBM, puesto
que el almacenamiento se maneja de forma diferente en los distintos sistemas.
En los sistemas de servidor de sistema principal o iSeries, pueden existir
varios pasos entre el diseño de una base de datos y la emisión de una
sentencia CREATE TABLE. Por ejemplo, una serie de sentencias pueden
convertir el diseño de objetos lógicos en la representación física de dichos
objetos en el almacenamiento.
Nota: una aplicación puede recibir diversos SQLCODE que indiquen errores y
seguir terminando normalmente; en este caso, DB2 Connect confirma
los datos. Si no desea que se confirmen, debe emitir un mandato
ROLLBACK.
Consulta relacionada:
v “CONNECT (Tipo 1) sentencia” en el manual Consulta de SQL, Volumen 2
v “CONNECT (Tipo 2) sentencia” en el manual Consulta de SQL, Volumen 2
Por omisión, CNULREQD se establece en YES. Esto hace que las series
terminadas en nulo se interpreten según los estándares MIA. Si se conecta a
un servidor DB2 Universal Database para OS/390 y z/OS, es altamente
recomendable establecer CNULREQD en YES. Es necesario enlazar
lógicamente las aplicaciones codificadas para los estándares SAA1 (respecto a
las series terminadas en nulo) con la opción CNULREQD establecida en NO.
De no hacerlo, estas series se interpretarán según los estándares MIA, aunque
se preparen estableciendo LANGLEVEL en SAA1.
Conceptos relacionados:
v “Series terminadas en nulo en C y C++” en la página 205
Variables SQLCODE y SQLSTATE autónomas
Notas:
1. En DB2 UDB no existe ninguna opción COMMIT equivalente que coincida con RR. DB2 UDB
para iSeries da soporte a RR bloqueando la tabla entera.
2. Resultados en RR para la Versión 3.1, y resultados en RS para la Versión 4.1 con el APAR
PN75407 o para la Versión 5.1.
3. Resultados en CS para la Versión 3.1, y resultados en UR para la Versión 4.1 o para la Versión
5.1.
4. Resultados en CS para la Versión 3.1, y resultados en UR para la Versión 4.1 con el APAR
PN60988 o para la Versión 5.1.
5. El nivel de aislamiento NC no se soporta con DB2 para VSE y VM.
Existen otras normas que varían con respecto a los niveles de cascada.
Los productos DB2 Universal Database para OS/390 y z/OS y DB2 Universal
Database ofrecen la posibilidad de marcar un tiempo de espera para un
bloqueo y enviar un código de retorno de error a las aplicaciones que están a
la espera.
Conceptos relacionados:
v “SQLCODE mapping” en el manual DB2 Connect User’s Guide
Los catálogos del sistema varían en los distintos productos de base de datos
de IBM. Muchas de las diferencias se pueden enmascarar mediante el uso de
vistas. Para obtener información, consulte le documentación correspondiente
al servidor de base de datos que utilice.
Conceptos relacionados:
v “Catalog Functions for Querying System Catalog Information in CLI
Applications” en el manual CLI Guide and Reference, Volume 1
Conceptos relacionados:
v “Procedimientos almacenados de DB2” en la página 23
Consulta relacionada:
v “CALL sentencia” en el manual Consulta de SQL, Volumen 2
El código SQL compuesto NOT ATOMIC se puede utilizar con todos los
servidores de aplicación de sistema principal o iSeries soportados. SQL
compuesto ATOMIC se puede utilizar con servidores de aplicaciones de
sistema principal soportados.
Consulta relacionada:
v “SQLCA” en el manual Administrative API Reference
Conceptos relacionados:
v “XA function supported by DB2 UDB” en el manual Administration Guide:
Planning
v “Configuring DB2 Connect with an XA compliant transaction manager” en
el manual DB2 Connect User’s Guide
Tareas relacionadas:
v “Configuring BEA Tuxedo” en el manual Administration Guide: Planning
v “Updating host or iSeries database servers with an XA-compliant
transaction manager” en el manual Administration Guide: Planning
Para conseguir el orden deseado, tiene que crear la base de datos con un
orden de clasificación definido por el usuario. Se suministra un orden de
clasificación de ejemplo solo con este objetivo con DB2 en el archivo include
sqle850a.h. El contenido de sqle850a.h se muestra a continuación.
#ifdef __cplusplus
extern "C" {
#endif
#endif /* SQL_H_SQLE850A */
Por ejemplo, supongamos que tenemos la letra ‘a’. Esta letra tiene el punto de
código X'61' para la página de códigos 850. En la matriz sqle_850_500, a la
letra ‘a’ se le asigna un peso de X'81' (es decir, el elemento número 98 de la
matriz sqle_850_500).
El orden definido por el usuario de la página de códigos 850 por peso (el
orden deseado) es:
’a’ < ’b’ < ’A’ < ’B’
o
4- 5- 6- 7- 8- 9- A- B- C- D- E- F-
2
-0 (SP) & - ø Ø ° µ ¢ { } \ 0
SP010000 SM030000 SP100000 LO610000 LO620000 SM190000 SM170000 SC040000 SM110000 SM140000 SM070000 ND100000
-1 (RSP) é / É a j ~ £ A J ÷ 1
SP300000 LE110000 SP120000 LE120000 LA010000 LJ010000 SD190000 SC020000 LA020000 LJ020000 SA060000 ND010000
-2 â ê Â Ê b k s ¥ B K S 2
LA150000 LE150000 LA160000 LE160000 LB010000 LK010000 LS010000 SC050000 LB020000 LK020000 LS020000 ND020000
-3 ä ë Ä Ë c l t C L T 3
LA170000 LE170000 LA180000 LE180000 LC010000 LL010000 LT010000 SD630000 LC020000 LL020000 LT020000 ND030000
-4 à è À È d m u © D M U 4
LA130000 LE130000 LA140000 LE140000 LD010000 LM010000 LU010000 SM520000 LD020000 LM020000 LU020000 ND040000
-5 á í Á Í e n v § E N V 5
LA110000 LI110000 LA120000 LI120000 LE010000 LN010000 LV010000 SM240000 LE020000 LN020000 LV020000 ND050000
-6 ã î Ã Î f o w ¶ F O W 6
LA190000 LI150000 LA200000 LI160000 LF010000 LO010000 LW010000 SM250000 LF020000 LO020000 LW020000 ND060000
-7 å ï Å Ï g p x ¼ G P X 7
LA270000 LI170000 LA280000 LI180000 LG010000 LP010000 LX010000 NF040000 LG020000 LP020000 LX020000 ND070000
-8 ç ì Ç Ì h q y ½ H Q Y 8
LC410000 LI130000 LC420000 LI140000 LH010000 LQ010000 LY010000 NF010000 LH020000 LQ020000 LY020000 ND080000
-9 ñ ß Ñ ` i r z ¾ I R Z 9
LN190000 LS610000 LN200000 SD130000 LI010000 LR010000 LZ010000 NF050000 LI020000 LR020000 LZ020000 ND090000
-A [ ] : « ª ¡ ¬
(SHY) ¯ ¹ ² ³
SM060000 SM080000 SM650000 SP130000 SP170000 SM210000 SP030000 SM660000 SP320000 ND011000 ND021000 ND031000
-B . $ , # » º ¿ l ô û Ô Û
SP110000 SC030000 SP080000 SM010000 SP180000 SM200000 SP160000 SM130000 LO150000 LU150000 LO160000 LU160000
-C < * % @ ð æ Ð ¯ ö ü Ö Ü
SA030000 SM040000 SM020000 SM050000 LD630000 LA510000 LD620000 SM150000 LO170000 LU170000 LO180000 LU180000
-D ( ) _ ' ý , Ý ¨ ò ù Ò Ù
SP060000 SP070000 SP090000 SP050000 LY110000 SD410000 LY120000 SD170000 LO130000 LU130000 LO140000 LU140000
-E + ; > = þ Æ Þ ´ ó ú Ó Ú
SA010000 SP140000 SA050000 SA040000 LT630000 LA520000 LT640000 SD110000 LO110000 LU110000 LO120000 LU120000
!
-F SP020000 ^ ? " ± ¤ ® × õ ÿ Õ
SD150000 SP150000 SP040000 SA020000 SC010000 SM530000 SA070000 LO190000 LY170000 LO200000 (EO)
O
0- 1- 2- 3- 4- 5- 6- 7- 8- 9- A- B- C- D- E- F-
2
+
-0 (SP) 0 @ P ` p Ç É á ð Ó
(SHY) ¯
SM590000 SP010000 ND100000 SM050000 LP020000 SD130000 LP010000 LC420000 LE120000 LA110000 SF140000 SF020000 LD630000 LO120000 SP320000
-1 ! 1 A Q a q ü æ í Ð ß ±
SS000000 SM630000 SP020000 ND010000 LA020000 LQ020000 LA010000 LQ010000 LU170000 LA510000 LI110000 SF150000 SF070000 LD620000 LS610000 SA020000
-2 " 2 B R b r é Æ ó Ê Ô
SS010000 SM760000 SP040000 ND020000 LB020000 LR020000 LB010000 LR010000 LE110000 LA520000 LO110000 SF160000 SF060000 LE160000 LO160000 SM100000
-3 !! # 3 C S c s â ô ú Ë Ò ¾
SS020000 SP330000 SM010000 ND030000 LC020000 LS020000 LC010000 LS010000 LA150000 LO150000 LU110000 SF110000 SF080000 LE180000 LO140000 NF050000
-4 ¶ $ 4 D T d t ä ö ñ È õ ¶
SS030000 SM250000 SC030000 ND040000 LD020000 LT020000 LD010000 LT010000 LA170000 LO170000 LN190000 SF090000 SF100000 LE140000 LO190000 SM250000
-5 § % 5 E U e u à ò Ñ Á 1 Õ §
SS040000 SM240000 SM020000 ND050000 LE020000 LU020000 LE010000 LU010000 LA130000 LO130000 LN200000 LA120000 SF050000 LI610000 LO200000 SM240000
-6 & 6 F V f v å û ª Â ã Í µ ÷
SS050000 SM700000 SM030000 ND060000 LF020000 LV020000 LF010000 LV010000 LA270000 LU150000 SM210000 LA160000 LA190000 LI120000 SM170000 SA060000
-8 ( 8 H X h x ê ÿ ¿ © Ï Þ °
SM570001 SM320000 SP060000 ND080000 LH020000 LX020000 LH010000 LX010000 LE150000 LY170000 SP160000 SM520000 SF380000 LI180000 LT640000 SM190000
+
-9 ) 9 I Y i y ë Ö ® Ú ¨
SM750000 SM330000 SP070000 ND090000 LI020000 LY020000 LI010000 LY010000 LE170000 LO180000 SM530000 SF230000 SF390000 SF040000 LU120000 SD170000
-A * : J Z j z è Ü ¬ + Û
SM750002 SM310000 SM040000 SP130000 LJ020000 LZ020000 LJ010000 LZ010000 LE130000 LU180000 SM660000 SF240000 SF400000 SF010000 LU160000 SD630000
-B + ; K [ k { ï ø ½ Ù ¹
SM280000 SM300000 SA010000 SP140000 LK020000 SM060000 LK010000 SM110000 LI170000 LO610000 NF010000 SF250000 SF410000 SF610000 LU140000 ND011000
-C , < L \ l l î £ ¼ 8 ý ³
SM290000 SA420000 SP080000 SA030000 LL020000 SM070000 LL010000 SM130000 LI150000 SC020000 NF040000 SF260000 SF420000 SF570000 LY110000 ND031000
-D - = M ] m } ì Ø ¡ ¢ Ý ²
SM930000 SM780000 SP100000 SA040000 LM020000 LM080000 LM010000 SM140000 LI130000 LO620000 SP030000 SC040000 SF430000 SM650000 LY120000 ND021000
-E . > N ^ n ~ Ä × « ¥ Ì ¯
SM910000 SM600000 SP110000 SA050000 LN020000 SD150000 LN010000 SD190000 LA180000 SA070000 SP170000 SC050000 SF440000 LI140000 SM150000 SM470000
/
-F SM690000 SV040000 SP120000 ? O _ o Å ƒ » + ¤ ´
(RSP)
SP150000 LO020000 SP090000 LO010000 SM790000 LA280000 SC070000 SP180000 SF030000 SC010000 SF600000 SD110000 SP300000
Conceptos relacionados:
v “Órdenes de clasificación” en la página 422
Consulta relacionada:
v “sqlecrea - Create Database” en el manual Administrative API Reference
Índice 551
comentarios consideraciones sobre programación controlador JDBC de tipo 4
sentencia de SQL incorporado (continuación) restricciones de API principal
REXX 372 FORTRAN 261 JDBC 2.1 300
SQL, normas 182, 237, 267 infraestructura de soporte de API de paquete
COMMIT WORK RELEASE, seudocódigo 49 opcional JDBC 2.1 302
sentencia interfaces soportadas 6 conversión de caracteres
no soportada en DB2 interfaz XA de X/Open 472 codificación de procedimientos
Connect 541 REXX 369 almacenados 435, 457
COMP-1, cláusula en los tipos de tipos de variables, control de codificación de sentencias de
COBOL 254 valores de datos 55 SQL 433
COMP-3, cláusula en los tipos de constantes gráficas consideraciones sobre
COBOL 254 juegos de códigos en chino programación 432
COMP-5, cláusula en los tipos de (tradicional) 447 cuando se ejecuta una
COBOL 254 juegos de códigos en aplicación 436
comparación de caracteres 424 japonés 447 cuándo se produce 437
compartición de sesiones, SQLj y consultas desbordamiento en la longitud de
JDBC 285 actualizable 124 la serie 457
compilación servicios Web 342 desbordamiento en la longitud de
programas SQLj suprimible 124 la serie sobrepasando los tipos
ejemplo de 310 consultas SQL, servicios Web 342 de datos 457
visión general 88 contenedores durante precompilación y
comportamiento de definición, Java 2 Enterprise Edition 345 vinculación 436
DYNAMICRULES 147 contextos expansión 440
comportamiento de ejecución, dependencias de aplicación páginas de códigos
DYNAMICRULES 147 entre 230 soportadas 438
comportamiento de invocación, dependencias de base de datos soporte de idioma nacional
DYNAMICRULES 147 entre 230 (NLS) 436
comportamiento de vinculación, establecimiento en aplicaciones sustituciones de caracteres 438
DYNAMICRULES 147 DB2 de varias hebras 227 Unicode (UCS2) 459
conexiones evitación de puntos muertos correlaciones de tipos de datos
agrupación, WebSphere 351 entre 231 entre OLE DB y DB2 396
CONNECT nula 531 control de relaciones de datos tabla de 396
gestión de recursos, Java 286 activadores 57 creación
implícita activadores anteriores 57 paquetes para aplicaciones
diferencias entre activadores posteriores 58 compiladas 82
plataformas 531 integridad referencial 56 creación de prototipo del código
sentencia CONNECT lógica de aplicación 58 SQL 50
RESET 531 control de valores de datos cursores
sentencia CONNECT TO 531 finalidad 52 actualizable 125
conexiones implícitas lógica de aplicación y tipo de actualizable y desplazable en
diferencias entre variable 55 aplicaciones ADO 411
plataformas 531 restricciones de comprobación de ambiguos 125
confirmación de cambios tabla 54 aplicaciones ATL
tablas 45 restricciones de integridad IBM OLE DB Provider 417
confirmación en dos fases referencial 54 bloqueo, consideraciones sobre
actualización restricciones exclusivas 53 punto de rescate 516
varias bases de datos 461 tipos de datos 53 colocación al final de la
conjunto de filas de esquema vistas con opción check 55 tabla 131
IBM OLE DB Provider 393 controlador JDBC de tipo 2 comportamiento con sentencia
consideraciones sobre programación restricciones de API principal COMMIT 120
acceso a servidores de sistema JDBC 2.1 299 comportamiento tras ROLLBACK
principal, AS/400 o iSeries 469 soporte de API de paquete TO SAVEPOINT 514
C/C++ 176 opcional JDBC 2.1 300 consideraciones sobre
COBOL 233 COMMIT 120
entornos 32
Índice 553
descriptores de contexto de diseño de aplicación (continuación) ejemplos (continuación)
descriptor recuperación de datos por declaración de referencias de
descripción 169 segunda vez 129 archivos BLOB
descriptores de contexto de entorno relaciones entre objetos de COBOL 248
descripción 169 datos 56 FORTRAN 275
descriptores de contexto de sentencia REXX declaraciones de datos
descripción 169 registro de rutinas 370 BLOB 195
destino sentencias de lista variable, declaraciones de datos
particiones, comportamiento sin proceso 164 CLOB 195
inserciones en almacenamiento sentencias necesarias 34 declaraciones de datos
intermedio 480 seudocódigo 49 DBCLOB 195
diagnóstico de aplicaciones soporte de caracteres de doble ejemplo de sección de declaración
suspendidas o en bucle 496 byte (DBCS) 433 de SQL para tipos de datos SQL
discapacidad 573 SQL dinámico, finalidad 139 soportados 216
diseño de aplicación SQL estático, ventajas 102 localizador de CLOB 198
aplicaciones Web 337 usuarios simultáneos marcadores de parámetros,
archivos include tablas temporales utilizados en búsqueda y
COBOL 234 declaradas 506 actualización 167
colocación en antememoria de utilización de marcadores de miembros de datos de clase en
SQL dinámico 102 parámetros 166 sentencias de SQL 208
consideraciones sobre EUC en versiones de paquetes con mismo programa Perl 366
japonés y chino tradicional en nombre 90 programa REXX
COBOL 258 vinculación 79 registro de SQLEXEC,
consideraciones sobre la DML (lenguaje de manipulación de SQLDBS y SQLDB2 370
conversión de caracteres 432 datos) referencia de archivos
control de valores de datos 52 entornos de sistema principal e CLOB 199
conversión de caracteres en iSeries 529 sintaxis, variables del lenguaje
sentencias de SQL 433 rendimiento de SQL principal de caracteres
conversiones de caracteres en los dinámico 141 FORTRAN 271
procedimientos DSN en campo SQLERRP en línea
almacenados 435 DB2 UDB para OS/390 531 ayuda, acceso 561
creación de estructura de DSS (subsección distribuida) enganche, estado con varias
SQLDA, directrices 158 dirigida 478 hebras 227
declaración de suficientes enlace
entidades SQLVAR 151 E descripción 88
descripción de sentencia EBCDIC entero de 64 bits (BIGINT), tipo de
SELECT 156 datos de bytes mixtos 529 datos
ejecución de sentencias sin orden de clasificación 535 soportado por DB2 Connect 529
variables 140 ejemplos Enterprise Java beans
ejemplo de Perl 366 applets Java 297 finalidad 348
guardar peticiones de usuario declaración de BLOB entidades SQLVAR
final 165 FORTRAN 273 declaración del número
lógica en el servidor 59 declaración de BLOB utilizando suficiente 155
manejo de errores, directrices 41 COBOL 246 número variable,
órdenes de clasificación, declaración de CLOB declaración 151
directrices 422 COBOL 246 entorno, API de
pasar datos, directrices 162 FORTRAN 273 archivo include
precompilación 79 declaración de DBCLOB FORTRAN 263
proceso de cursor 120 COBOL 246 archivo include para C/C 177
programas de ejemplo 132 declaración de localizador de archivo include para
prototipo en Perl 363 archivos CLOB COBOL 234
puntos de código para caracteres FORTRAN 274 entorno de aplicación, para
especiales 433 declaración de localizador de programación 32
recepción de valores NULL 110 BLOB
COBOL 248
Índice 555
expansión de datos (continuación) Extended UNIX Code (EUC) FORTRAN, lenguaje (continuación)
servidor OS/390 529 (continuación) incorporación de sentencias de
expresión CURVAL 502 tipos de datos de longitud SQL 77
expresión NEXTVAL 502 variable 456 incorporación de SQL 267
Extended UNIX Code (EUC) validación de parámetros basada juegos de caracteres de varios
Archivos DBCLOB 447 en el cliente 453 bytes 278
consideraciones sobre el chino Extended UNIX Code mixto, líneas condicionales 262
tradicional 447 consideraciones 446 líneas de comentario 262
consideraciones sobre la Extensible Markup Language (XML) no hay mejoras planificadas 32
clasificación 447 base para servicios Web 337 no hay soporte para acceso a
consideraciones sobre UDF descripción 20 bases de datos de varias
(función definida por el extensiones de archivos de entrada hebras 262
usuario) 447 para C/C 176 precompilación 262
constantes gráficas 447 extensiones de archivos de salida restricciones 262
conversiones de caracteres, C/C++ 176 sección de declaración de
procedimientos extracción de grandes volúmenes de SQL 276
almacenados 457 datos 487 tipos de datos 276
chino (tradicional) ubicación de los archivos
C/C 215 F include 266
consideraciones en filas variables de indicador 273
COBOL 258 captación tras paquete variables del lenguaje principal
FORTRAN 278 invalidado 120 declaración 270
chino (tradicional) en REXX 372 posicionamiento en tabla 131 denominación 269
desbordamiento en la conversión recuperación con cursor 125 finalidad 269
de caracteres 457 recuperación de varias 118 referencia 267
desbordamiento en la longitud de recuperación mediante variables SQLCODE 279
la serie de caracteres 457 SQLDA 157 variables SQLSTATE 279
ejemplos de expansión 453 segunda recuperación FORTRAN, tipos de datos
expansión en el servidor 449 métodos 129 BLOB 276
expansión en la aplicación 449 orden de filas 130 BLOB_FILE 276
Japonés filas, bloqueo BLOB_LOCATOR 276
C/C 215 personalización para el CLOB 276
FORTRAN 278 rendimiento 517 CLOB_FILE 276
japonés en REXX 372 finalización de transacciones de CLOB_LOCATOR 276
japonés y chino tradicional forma implícita 48 conversión con DB2 276
consideraciones en FORCE, mandato CHARACTER*n 276
COBOL 258 diferencias entre sistemas INTEGER*2 276
juegos de caracteres 442 operativos 531 INTEGER*4 276
juegos de códigos en chino FORTRAN, lenguaje REAL*2 276
(tradicional) 444 archivos de entrada y salida 262 REAL*4 276
juegos de códigos en archivos include 263 REAL*8 276
japonés 444 consideraciones sobre el chino fuentes
manipulación de datos tradicional 278 aplicaciones de SQL
gráficos 447 consideraciones sobre el incorporado 86
páginas de códigos de doble japonés 278 archivos fuente modificados 84
byte 446 consideraciones sobre extensiones de archivos SQL 79
páginas de códigos programación 261 extensiones de nombre de
desiguales 449 declaraciones de datos LOB 273 archivo 84
páginas de códigos mixtas 446 declaraciones de localizadores de funciones de preprocesador
procedimientos LOB 274 y el precompilador de SQL 200
almacenados 447 declaraciones de referencias de funciones de programación de
sentencia DESCRIBE 454 archivos 275 DB2 22
tipos de datos de longitud depuración 262 funciones de tabla OLE DB 391
fija 456 inclusión de archivos 266
Índice 557
interfaz de programación de Java (continuación) Java (continuación)
aplicaciones (API) applets SQLj (SQL incorporado para
para establecer contextos entre distribución y ejecución 297 Java) (continuación)
hebras soporte 293 variables del lenguaje
sqleAttachToCtx() 227 soporte con controlador de principal 290
sqleBeginCtx() 227 tipo 4 293 visión general 302
sqleDetachFromCtx() 227 archivos de clases, dónde SQLMSG 335
sqleEndCtx() 227 colocarlos 288 SQLSTATE 335
sqleGetCurrentCtx() 227 archivos de salida 287 variable de entorno
sqleInterruptCtx() 227 archivos fuente 287 CLASSPATH 288
sqleSetTypeCtx() 227 bibliotecas de clases 288 visión general 284
restricciones en un entorno comparaciones Java 2 Enterprise Edition
XA 472 con otros lenguajes 285 contenedores 345
sintaxis para REXX 385 SQLj con JDBC 284 Enterprise Java beans 348
tipos de 52 consideraciones sobre archivo gestión de transacciones 347
usos de 52 db2java.zip para applets 298 requisitos 346
visión general de 52 depuración 313 servidor 346
Interfaz XA de X/Open distribución y ejecución de soporte de aplicaciones 344
aplicación de una soba aplicaciones 297 visión general 343
hebra 472 Enterprise Java beans 348 Java Database Connectivity (JDBC)
aplicación de varias hebras 472 incorporación de sentencias de visión general 15
características del proceso de SQL 77 Java Naming and Directory Interface
transacciones 472 JDBC (JNDI) 346
cursores declarados WITH especificación 295 JDBC
HOLD 472 programa de ejemplo 296 codificación de aplicaciones y
DISCONNECT 472 paquetes 290 applets 294
enlace de aplicaciones 476 paquetes y clases 294 COM.ibm.db2.jdbc
entorno CICS 472 paquetes y clases, .app.DB2Driver 294
entorno XA 472 COM.ibm.db2.app 291 COM.ibm.db2.jdbc
finalidad 472 parámetro de configuración .net.DB2Driver 294
puntos de rescate 517 javaheapsz 288 comparación con SQLj 284
RELEASE no soportado 472 parámetro de configuración compartición de sesiones con
restricciones de la API 472 jdk11path 288 SQLj 285
sentencia COMMIT 472 seguridad 286 controladores 299
sentencia ROLLBACK 472 soporte de DB2 292 gestión de recursos de
SQL CONNECT 472 SQLCODE 335 conexión 286
transacciones 472 SQLj (SQL incorporado para interoperatividad de SQLj 284
XASerialize 472 Java) programa de ejemplo 296
interrupción SIGUSR1 136 applets 304 visión general 15
interrupciones, SIGUSR1 136 cláusulas de ejemplo 306 JNDI (Java Naming and Directory
ISO declaración de cursores 307 Interface) 346
estándar 10646 444 declaración de iteradores 307 JTA (API de transacciones de
estándar 2022 444 especificación 295 Java) 347
iteradores 307 JTS (servicio de transacciones de
J llamada a procedimientos Java) 347
japonés y chino tradicional, juegos almacenados 309 juegos de caracteres
de códigos EUC programa de ejemplo 308 doble byte 441
consideraciones en COBOL 258 restricciones 304 Extended UNIX Code
Java sentencia DELETE (EUC) 442
actualización de clases 289 posicionada 307 varios bytes, FORTRAN 278
aplicaciones sentencia UPDATE juegos de caracteres de doble byte
soporte con controlador de posicionada 307 (DBCS) 441
tipo 2 292 sentencias de SQL consideraciones sobre el chino
soporte con controlador de incorporado 306 tradicional 447
tipo 4 293 consideraciones sobre orden 447
Índice 559
lenguaje REXX (continuación) mandatos marcadores de parámetros
registro de SQLEXEC, SQLDBS y FORCE (continuación)
SQLDB2 370 diferencias entre en proceso de sentencias
requisitos de datos plataformas 531 arbitrarias 164
cliente 389 manejadores de excepciones entradas SQLVAR 166
servidor 389 consideraciones sobre COMMIT y Perl 365
restricciones 370 ROLLBACK 136 tipificados 166
sentencias de SQL 372 finalidad 136 uso en SQL dinámico 166
sintaxis de API 385 manejadores de interrupciones uso en SQLExecDirect 169
tipos de datos 381 consideraciones sobre COMMIT y memoria
variables de indicador 375 ROLLBACK 136 asignación para páginas de
variables del lenguaje principal finalidad 136 códigos desiguales 449
denominación 375 manejadores de señales mensajes de aviso
finalidad 374 con sentencias de SQL 136 truncamiento 110
referencia 375 consideraciones sobre COMMIT y mensajes de error
variables del lenguaje principal ROLLBACK 136 distintivo de condición de
LOB, borrado 380 finalidad 136 aviso 134
variables predefinidas 376 instalación, programas de distintivo de condición de
liberación de conexiones, ejemplo 132 error 134
aplicaciones CMS 45 manejo de errores distintivo de condición de
local aplicaciones en bucle 496 excepción 134
elusión 479 aplicaciones suspendidas 496 estructura de SQLCA 134
lógica de aplicación archivo include para C/C 177 estructura SQLWARN 134
activadores 59 archivos include SQLSTATE 134
control de relaciones de C/C 177 métodos
datos 58 COBOL 234 visión general 24
control de valores de datos 55 FORTRAN 263 métodos definidos por el usuario
funciones definidas por el durante la precompilación 84 llamada, SQLJ 309
usuario 59 entorno de bases de datos Microsoft OLE DB Provider para
procedimientos almacenados 59 particionadas 493 ODBC
servidor 59 entornos de bases de datos soporte de OLE DB 403
particionadas 494 Microsoft Visual C
M estructura de SQLCA 495 macro automática de proyectos
macro #include estructuras de SQLCA de IBM DB2 Universal
restricciones en C/C 180 varias estructuras Database 69
macro automática de herramientas fusionadas 495 miembros de datos de clase
de IBM DB2 Universal Database identificación de la partición de variables del lenguaje principal
para Microsoft Visual C 74 base de datos que devuelve el en C/C 208
macro automática de proyectos de error 496 modelo para programación de
IBM DB2 Universal Database para notificación 495 DB2 49
Microsoft Visual C Perl 366 MQSeries
activación 73 precompilador de lenguaje soporte de aplicaciones 21
finalidad 69 C/C 180 múltiples bytes, consideraciones
macros #line sentencia WHENEVER 41 japonés y chino tradicional,
restricciones en C/C 180 SQLCODE 495 juegos de códigos EUC
mandato BIND utilización del SQLCA 40 COBOL 258
creación de paquetes 89 manejo de interrupciones con juegos de códigos en chino
opción INSERT BUF 480 sentencias de SQL 136 (tradicional)
mandato BIND PACKAGE manuales de DB2 C/C 215
volver a vincular 98 petición 560 FORTRAN 278
mandato PREP (PRECOMPILE) manuales impresos, solicitud 560 REXX 372
descripción 84 marcador de parámetro juegos de códigos en japonés
ejemplo 84 tipificado 166 C/C 215
marcadores de parámetros FORTRAN 278
ejemplo de programación 167 REXX 372
Índice 561
paquetes (continuación) precompilación (continuación) procesador de línea de mandatos
revinculación durante unidad de indicaciones horarias 96 (CLP) (continuación)
trabajo opción de cursor sentencias de SQL
comportamiento de actualizable 125 soportadas 521
cursor 120 programa de utilidad del valores de antememoria de
soporte de aplicaciones marcador 86 variable de entorno
REXX 384 señal de coherencia 96 DB2INCLUDE 180
versiones, privilegios 90 soporte de sentencias de SQL programa de utilidad del marcador
versiones con mismo nombre 90 dinámico 140 utilización en precompilación 86
parámetro de configuración visión general 84 programas de aplicación
javaheapsz 288 precompilador estructura 33
parámetro de configuración COBOL 233 requisitos previos 32
jdk11path 288 depuración en lenguaje sentencias necesarias 34
parámetro de configuración C/C 180 SQLj
locktimeout 231 FORTRAN 261 ejemplo de ejecución 310
parámetros de COLLECTION 92 juego de caracteres de C/C 176 programas de utilidad, API de
parámetros de configuración lenguaje C/C 209 archivo include
actualización múltiple 467 número de sección 541 aplicaciones FORTRAN 263
locktimeout 231 opción LANGLEVEL archivo include para aplicaciones
parámetro de configuración SQL92E 533 C/C 177
javaheapsz 288 opciones 84 archivos include
parámetro de configuración secuencias de tri-grafo de aplicaciones COBOL 234
jdk11path 288 C/C 176 propiedades
partición coordinadora, sin tipos de salida 84 propiedades de OLE DB
inserciones en almacenamiento visión general 77 soportadas 406
intermedio 480 PREPARE, sentencia punto de código 422
pase de contextos entre hebras 227 finalidad 140 definición 422
Perl no soportada en DB2 puntos de rescate
conexión con base de datos 364 Connect 541 activadores 514
consideraciones sobre proceso de sentencias anidados 514
programación 363 arbitrarias 163 comparación con SQL
controladores 363 procedimientos almacenados compuesto 511
devolución de datos 364 aplicaciones REXX 387 consideraciones sobre bloqueo de
ejemplo de aplicación 366 consideración sobre lógica de cursor 516
especificación Interfaz de bases aplicación 59 control 513
de datos (DBI) 18 conversión de caracteres 435 creación 513
marcadores de parámetros 365 conversión de caracteres, gestión de transacciones 509
no hay soporte para acceso a EUC 457 gestores de transacciones
bases de datos de varias inicialización XA 517
hebras 364 variables REXX 387 inserciones en almacenamiento
restricciones 363 juegos de códigos en chino intermedio 480, 515
SQLCODE 366 (tradicional) 447 lenguaje de definición de datos
SQLSTATE 366 juegos de códigos en (DDL) 514
peso, definición 422 japonés 447 restricciones 514
PICTURE (PIC), cláusula en los tipos llamada SET INTEGRITY, sentencia 514
de COBOL 254 REXX 387 SQL compuesto atómico 514
portabilidad cuando se utiliza CLI SQLj 309 puntos muertos
en lugar de SQL incorporado 171 plataformas soportadas 537 en aplicaciones de varias
precompilación 86 visión general 23 hebras 230
acceso a servidor de aplicaciones procesador de línea de mandatos error en inserción en
de sistema principal o AS/400 a (CLP) almacenamiento
través de DB2 Connect 86 llamada desde aplicación intermedio 483
acceso a varios servidores 86 REXX 385 evitación de varios
ejemplo 84 prototipo 50 contextos 231
FORTRAN 262
Índice 563
sentencia DESCRIBE (continuación) sentencia SELECT (continuación) sentencias de SQL
no soportada en DB2 inserciones en almacenamiento aplicaciones de actualización
Connect 541 intermedio 483 múltiple 463
proceso de sentencias lista variable 164 CONNECT
arbitrarias 163 recuperación valores de
sentencia END DECLARE datos una segunda vez 129 SQLCA.SQLERRD 449
SECTION 34 varias filas 118 guardar peticiones de usuario
sentencia EXEC SQL INCLUDE sentencia DECLARE final 165
restricciones en C/C 180 CURSOR 119 manejadores de excepciones 136
sentencia EXECUTE sentencia SET CURRENT, no manejadores de
finalidad 140 soportada en DB2 Connect 541 interrupciones 136
sentencia EXECUTE IMMEDIATE sentencia SET CURRENT manejadores de señales 136
finalidad 140 PACKAGESET 92 REXX 372
sentencia FETCH sentencia WHENEVER sintaxis de C/C 182
acceso repetido a datos 128 manejo de errores 41 sintaxis en COBOL 237
estructura de SQLDA 157 sentencias sintaxis en FORTRAN 267
variables del lenguaje ACQUIRE, no soportada en DB2 sintaxis en REXX 372
principal 150 UDB 541 sentencias de SQL dinámico
sentencia INCLUDE 43 BEGIN DECLARE SECTION 34 no soportada en DB2
sentencia INCLUDE SQLCA CALL, plataformas Connect 541
seudocódigo 40 soportadas 537 sentencias de SQL no ejecutables
sentencia INCLUDE SQLDA 43 CALL USING DECLARE CURSOR 43
creación de estructura de DESCRIPTOR 537 INCLUDE 43
SQLDA 158 colocación en antememoria, INCLUDE SQLDA 43
sentencia LABEL ON, no WebSphere 358 sentencias dinámicas
soportada 541 COMMIT 45 vinculación 91
sentencia PUT, no soportada en DB2 COMMIT WORK RELEASE 541 señal de coherencia 96
Connect 541 CONNECT 531 señales
sentencia RELEASE CREATE SEQUENCE 502 truncamiento, estructura de
SAVEPOINT 513 DB2 Connect SQLCA 135
sentencia ROLLBACK no soportadas 541 series
asociación con cursor 120 soportados 541 opción C, CNULREQD BIND
deshacer los cambios 46 DECLARE, no soportada en DB2 terminada en nulo 533
diferencias entre UDB 541 series C terminadas en nulo 533
plataformas 531 DECLARE CURSOR 43 series gráficas
finalización de transacciones 48 DESCRIBE 541 conversión de caracteres 440
retrotraer cambios 46 END DECLARE SECTION 34 series terminadas en nulo
sentencia ROLLBACK TO INCLUDE 43 opción CNULREQD BIND 533
SAVEPOINT INCLUDE SQLCA 40 servicio de transacciones de Java
comportamiento de cursor 514 INCLUDE SQLDA 43 (JTS) 347
sentencia ROLLBACK WORK LABEL ON, no soportada en DB2 servicios en tiempo de ejecución
RELEASE UDB 541 varias hebras
no soportada en DB2 preparación mediante estructura efecto en enganches 227
Connect 541 de SQLDA mínima 153 servicios Web
sentencia SAVEPOINT RELEASE SAVEPOINT 513 acceso a datos de DB2 341
control de transacciones 513 ROLLBACK archivo de extensión de
sentencia SELECT diferencias entre definición de acceso a
actualización de datos plataformas 531 documentos (DADX) 343
recuperados 131 finalización de arquitectura 339
asociación con sentencia transacciones 46 consulta basada en SQL 342
EXECUTE 140 tablas temporales consulta basada en XML 342
declaración en SQLDA 151 declaradas 506 definición de acceso a
descripción después de asignar ROLLBACK TO documentos 342
SQLDA 156 SAVEPOINT 513 definición de operaciones 343
SAVEPOINT 513 finalidad 337, 339
Índice 565
SQLAPREP, archivo include SQLDA, archivo include SQLERRD(1) 440, 449
(continuación) (continuación) SQLERRD(2) 440, 449
aplicaciones FORTRAN 263 aplicaciones COBOL 234 SQLERRD(3) 472
SQLCA, archivo include aplicaciones FORTRAN 263 SQLERRMC, campo de
aplicaciones C/C 177 SQLDA (área de descriptor de SQL) SQLCA 440, 531, 539
aplicaciones COBOL 234 consideraciones sobre la SQLERRP, campo de SQLCA 531
aplicaciones FORTRAN 263 utilización de varias sqleSetTypeCtx(), API 227
SQLCA (área de comunicaciones de hebras 229 SQLETSD, archivo include 234
SQL) SQLDACT, archivo include 263 SQLException
campo SQLERRP identifica SQLDB2, API de REXX 369, 385 manejo 137
RDBMS 531 sqldbchar, tipo de datos recuperación de SQLCODE 335
consideraciones sobre la selección 211 recuperación de SQLMSG 335
utilización de varias tipo de columna recuperación de SQLSTATE 335
hebras 229 equivalente 218 SQLEXEC, API de REXX
informe de errores en inserciones SQLDBS, API de REXX 369 proceso de sentencias de
en almacenamiento SQLE819A, archivo include SQL 372
intermedio 483 aplicaciones C/C 177 registro 370
inserciones incompletas cuando aplicaciones COBOL 234 SQL incorporado 369
se producen errores 483 aplicaciones FORTRAN 263 SQLEXT, archivo include
SQLERRMC, campo 531, 539 SQLE819B, archivo include aplicaciones CLI 177
SQLCA, variable predefinida 376 aplicaciones C/C 177 SQLISL, variable predefinida 376
SQLCA_92, archivo include aplicaciones COBOL 234 SQLj (SQL incorporado para Java)
aplicaciones COBOL 234 aplicaciones FORTRAN 263 aplicaciones
aplicaciones FORTRAN 263 SQLE850A, archivo include ejemplos 310
SQLCA_92, estructura 263 aplicaciones COBOL 234 applets
SQLCA_CN, archivo include 263 aplicaciones FORTRAN 263 restricciones 304
SQLCA_CS, archivo include 263 SQLE850B, archivo include cláusulas, ejemplos 306
SQLCLI, archivo include 177 aplicaciones COBOL 234 comparación con Java Database
SQLCLI1, archivo include 177 aplicaciones FORTRAN 263 Connectivity (JDBC) 284
SQLCODE SQLE859A, archivo include compartición de sesiones con
autónoma 533 aplicaciones C/C 177 JDBC 285
campo, estructura de SQLE859B, archivo include cursores, declaración 307
SQLCA 134 aplicaciones C/C 177 interoperatividad de Java
códigos de error 40 SQLE932A, archivo include Database Connectivity
diferencias entre aplicaciones C/C 177 (JDBC) 284
plataformas 536 aplicaciones COBOL 234 iteradores 307
estructura 134 aplicaciones FORTRAN 263 opciones de conversor 312
inclusión de SQLCA 40 SQLE932B, archivo include procedimientos almacenados
notificación de errores 495 aplicaciones C/C 177 llamada 309
programas Java 335 aplicaciones COBOL 234 programas
SQLCODE -1015 aplicaciones FORTRAN 263 ejemplo 308
entornos de bases de datos sqleAttachToCtx(), API 227 restricciones 304
particionadas 494 SQLEAU, archivo include sentencia DELETE,
SQLCODE -1034 aplicaciones C/C 177 posicionada 307
entornos de bases de datos aplicaciones COBOL 234 sentencia UPDATE,
particionadas 494 aplicaciones FORTRAN 263 posicionada 307
SQLCODE -30081 sqleBeginCtx(), API 227 sentencias de SQL
entornos de bases de datos sqleDetachFromCtx(), API 227 incorporado 306
particionadas 494 sqleEndCtx(), API 227 variables del lenguaje
SQLCODES, archivo include sqleGetCurrentCtx(), API 227 principal 290
aplicaciones C/C 177 sqleInterruptCtx(), API 227 visión general 302
aplicaciones COBOL 234 SQLENV, archivo include SQLJACB, archivo include
aplicaciones FORTRAN 263 aplicaciones C/C 177 aplicaciones C/C 177
SQLDA, archivo include aplicaciones COBOL 234 SQLMON, archivo include
aplicaciones C/C 177 aplicaciones FORTRAN 263 aplicaciones COBOL 234
Índice 567
tipo de datos DECIMAL tipo de datos LONG VARCHAR tipo de datos VARCHAR
(continuación) (continuación) (continuación)
FORTRAN 276 REXX 381 COBOL 254
Java 291 tipo de datos LONG VARGRAPHIC en columnas de tablas 113
REXX 381 C/C++, conversión 218 formato estructurado,
tipo de datos DOUBLE 113 COBOL 254 C/C++ 218
tipo de datos FLOAT 113 en programas de SQL FORTRAN 276
CC, conversión 218 estático 113 Java 291
COBOL 254 FORTRAN 276 REXX 381
FORTRAN 276 Java 291 tipo de datos VARGRAPHIC
Java 291 REXX 381 C/C++ 218
REXX 381 tipo de datos NUMERIC C/C++, conversión 218
tipo de datos FOR BIT DATA CC, conversión 218 COBOL 254
C/C 222 COBOL 254 FORTRAN 276
tipo de datos GRAPHIC FORTRAN 276 Java 291
CC, conversión 218 Java 291 lista 113
COBOL 254 REXX 381 REXX 381
FORTRAN, no soportado 276 tipo de datos REAL tipo double CC 218
Java 291 CC, conversión 218 tipo float CC 218
REXX 381 COBOL 254 tipo long C/C++ 218
selección 211 FORTRAN 276 tipo long int C/C++ 218
tipo de datos INTEGER 113 Java 291 tipo long long C/C++ 218
CC, conversión 218 lista 113 tipo long long int C/C++ 218
COBOL 254 REXX 381 tipo short C/C++ 218
FORTRAN 276 tipo de datos REAL*2 tipo short int C/C++ 218
Java 291 FORTRAN 276 tipo sqlint64 CC 218
REXX 381 tipo de datos REAL*4 tipos de datos
tipo de datos INTEGER*2 FORTRAN 276 BINARY
FORTRAN 276 tipo de datos REAL*8 COBOL 257
tipo de datos INTEGER*4 FORTRAN 276 C/C 218
FORTRAN 276 tipo de datos SMALLINT CC, conversión 218
tipo de datos integer de 64 bits C/C++, conversión 218 CLOB en C/C 222
soportado por DB2 Connect 529 COBOL 254 COBOL 254
tipo de datos Java FORTRAN 276 consideraciones sobre Extended
BigDecimal 291 Java 291 UNIX Code 456
Blob 291 REXX 381 control de valores de datos 53
Double 291 sentencia CREATE TABLE 113 conversión
Int 291 tipo de datos TIME entre DB2 y COBOL 254
java.math.BigDecimal 291 C/C++, conversión 218 entre DB2 y FORTRAN 276
Short 291 COBOL 254 entre DB2 y REXX 381
String 291 en sentencia CREATE conversión entre DB2 y CC 218
tipo de datos Java BigDecimal 291 TABLE 113 DATALINK
tipo de datos Java double 291 FORTRAN 276 variable del lenguaje
tipo de datos Java Int 291 Java 291 principal, restricción 276
tipo de datos Java REXX 381 DECIMAL
java.math.BigDecimal 291 tipo de datos TIMESTAMP FORTRAN 276
tipo de datos Java short 291 C/C++, conversión 218 desbordamiento en la conversión
tipo de datos Java String 291 COBOL 254 de caracteres 457
tipo de datos LONG VARCHAR descripción 113 descripción 34
C/C++, conversión 218 FORTRAN 276 FOR BIT DATA
COBOL 254 Java 291 COBOL 257
en programas de SQL REXX 381 FOR BIT DATA en C/C 222
estático 113 tipo de datos VARCHAR FORTRAN 276
FORTRAN 276 C/C++, conversión 218 Java 291
Java 291 C o C++ 222
Índice 569
valores secuenciales variables del lenguaje principal variables del lenguaje principal
generación 502 (continuación) (continuación)
variable de entorno declaraciones de LOB selección de tipos de datos
CLASSPATH 288 FORTRAN 273 gráficos 211
variable de registro declaraciones de localizadores de series terminadas en nulo,
DB2CODEPAGE 430 LOB manejo en C/C 205
variables C/C 198 SQL estático 106
declaración 34 FORTRAN 274 SQLj 290
interactuación con gestor de REXX 378 truncamiento 110
bases de datos 34 declaraciones de referencias de variables del lenguaje principal de
representación de objetos de archivos gráficos
SQL 35 COBOL 248 C/C 192
REXX, predefinido 376 FORTRAN 275 COBOL 245
SQLCODE 224, 257, 279 REXX 379 variables del lenguaje principal de
SQLSTATE 224, 257, 279 declaraciones de referencias de tipo carácter
variables de entorno archivos en C/C 199 fijas y terminadas en nulo en
DB2INCLUDE 180, 266 definición 106 C/C 189
variables de indicador definición para utilizar con FORTRAN 271
C/C 191 columnas 39 longitud de variable en
COBOL 246 denominación C/C 190
declaración 110 C/C 185 variables del lenguaje principal
durante INSERT o UPDATE 110 COBOL 241 numéricas
finalidad 110 FORTRAN 269 C/C 187
FORTRAN 273 REXX 375 COBOL 242
REXX 375 en sentencia de lenguaje de FORTRAN 271
truncamiento 110 sistema principal 106 vinculación
utilización en columnas que en sentencia de SQL 106 consideraciones 93
pueden tener valores null 116 en SQL dinámico 140 diferir 94
variables del lenguaje principal finalidad 183 opciones 89
COBOL, tipos de datos 254 FORTRAN 269 programa de utilidad de
codificación de caracteres de gráfico descripción de archivos de
múltiples bytes 210 FORTRAN 278 vinculación, db2bfd 95
datos gráficos 191 inicialización en C/C 200 sentencias dinámicas 91
declaración LOB visión general 89
C/C 186 borrado en REXX 380 violación de clave exclusiva,
COBOL 242 miembros de datos de clase en inserciones en almacenamiento
ejemplos 108 C/C 208 intermedio 483
FORTRAN 270 no soportado en Perl 364 vistas
normas 106 opción WCHARTYPE del catálogos del sistema 537
programas de ejemplo 132 precompilador 211 control de valores de datos 55
utilización de sentencia de pase de bloques de datos 517 vistas de prueba, creación 65
lista de variables 164 precompilador considera como vistas del catálogo del sistema
declaración como punteros a global en un módulo en programa de utilidad de creación
tipos de datos 207 C/C 185 de prototipos 50
declaración de gráficas referencia Visual Basic
COBOL 245 C/C 183 aplicaciones
declaración de localizador de COBOL 240 conexión con fuente de
LOB FORTRAN 267 datos 410
COBOL 248 REXX 375 consideraciones sobre cursor 411
declaraciones de datos gráficos referencia desde SQL 106, 110 soportado en DB2 17
C/C 191 relacionadas con sentencia de soporte de control de datos 411
declaraciones de datos LOB SQL 39 Visual C
C/C 195 restricción de DATALINK 276 macro automática de proyectos
COBOL 246 REXX de IBM DB2 Universal
REXX 378 finalidad 374 Database 69
W
wchar_t, tipo de datos
selección 211
WCHARTYPE
directrices 211
opción de precompilación 211
tipos de datos disponibles con la
opción NOCONVERT 218
WebSphere
acceso a datos de la
empresa 351
agrupación de conexiones
ajuste 352
beneficios 357
finalidad 351
colocación en antememoria de
sentencias 358
fuentes de datos 351
WebSphere Studio 19
Windows
páginas de códigos 430
variable de registro
DB2CODEPAGE 430
X
XML
acceso a aplicación
reiniciada 339
consultas 342
definición de acceso a
documentos 342
infraestructura para servicios
Web 337
lenguaje de descripción de
servicios Web (WSDL) 339
mensajes XML en sobres
SOAP 339
XML Extender
visión general 20
Índice 571
572 Programación de aplicaciones cliente
Información técnica sobre DB2 Universal Database
donde:
v víaaccesocdhtml es el directorio donde está instalado el CD de HTML.
v %L es el identificador de idioma. Por ejemplo, es_ES.
v categoría es el identificador de categoría. Por ejemplo, core para la
información básica de DB2.
Idioma Identificador
Alemán g
Búlgaro u
Checo x
Chino simplificado c
Chino tradicional t
Coreano k
Croata 9
Danés d
Eslovaco 7
Esloveno l
Español z
Finlandés y
Francés f
Griego a
Holandés q
Húngaro h
Inglés e
Italiano i
Japonés j
Sin número de documento indica que el manual sólo está disponible en línea
y no tiene una versión impresa.
Información de administración
La información de esta categoría incluye los temas necesarios para diseñar,
implementar y mantener de forma efectiva bases de datos de DB2, depósitos
de datos y sistemas federados.
Información de aprendizaje
La información de aprendizaje presenta las características de DB2 y explica
cómo realizar diversas tareas.
Nota: La versión HTML de las notas del release está disponible en el Centro
de información y en los CD-ROM del producto. Para ver el archivo
ASCII en plataformas basadas en UNIX, consulte el archivo
Release.Notes. Este archivo se encuentra en el directorio
DB2DIR/Readme/%L, donde %L representa el nombre de entorno
nacional y DB2DIR representa:
v /usr/opt/db2_08_01 en AIX
v /opt/IBM/db2/V8.1 en todos los demás sistemas operativos UNIX
Tareas relacionadas:
v “Impresión de manuales de DB2 desde archivos PDF” en la página 581
v “Solicitud de manuales de DB2 impresos” en la página 582
v “Acceso a la ayuda en línea” en la página 583
v “Búsqueda de información de productos mediante el acceso al Centro de
información de DB2 desde las herramientas de administración” en la página
587
v “Cómo ver documentación técnica en línea directamente desde el CD de
documentación HTML de DB2” en la página 589
Prerrequisitos:
Procedimiento:
Tareas relacionadas:
v “Solicitud de manuales de DB2 impresos” en la página 582
v “Búsqueda de información de productos mediante el acceso al Centro de
información de DB2 desde las herramientas de administración” en la página
587
v “Cómo ver documentación técnica en línea directamente desde el CD de
documentación HTML de DB2” en la página 589
Consulta relacionada:
v “Visión general de la información técnica de DB2 Universal Database” en la
página 573
Procedimiento:
También puede obtener manuales de DB2 impresos si solicita los Doc Pack
para el producto DB2 a su distribuidor de IBM. Los Doc Pack son
Tareas relacionadas:
v “Impresión de manuales de DB2 desde archivos PDF” en la página 581
v “Búsqueda de temas mediante el acceso al Centro de información de DB2
desde un navegador” en la página 585
v “Cómo ver documentación técnica en línea directamente desde el CD de
documentación HTML de DB2” en la página 589
Consulta relacionada:
v “Visión general de la información técnica de DB2 Universal Database” en la
página 573
La ayuda en línea que viene con todos los componentes de DB2 está
disponible en tres tipos:
v Ayuda de ventana y de cuaderno
v Ayuda de línea de mandatos
v Ayuda de sentencia de SQL
Nota: Para los sistemas operativos UNIX no hay ayuda de SQL disponible.
Procedimiento:
Tareas relacionadas:
Prerrequisitos:
Restricciones:
Procedimiento:
Conceptos relacionados:
v “Accesibilidad” en la página 595
v “Acceso al Centro de información de DB2 desde un navegador” en la
página 597
Tareas relacionadas:
v “Búsqueda de información de productos mediante el acceso al Centro de
información de DB2 desde las herramientas de administración” en la página
587
v “Actualización de la documentación HTML instalada en la máquina” en la
página 590
v “Resolución de problemas de búsqueda de documentación de DB2 con
Netscape 4.x” en la página 592
v “Búsqueda en la documentación de DB2” en la página 593
Consulta relacionada:
v “Visión general de la información técnica de DB2 Universal Database” en la
página 573
Prerrequisitos:
Procedimiento:
Conceptos relacionados:
v “Accesibilidad” en la página 595
v “Acceso al Centro de información de DB2 desde un navegador” en la
página 597
Tareas relacionadas:
Restricciones:
Procedimiento:
1. Inserte el CD de documentación HTML de DB2. En los sistemas operativos
UNIX, monte el CD de documentación HTML de DB2. Consulte el manual
Iniciación rápida para obtener información más detallada sobre cómo
montar un CD en sistemas operativos UNIX.
2. Inicie el navegador HTML y abra el archivo apropiado:
v Para sistemas operativos Windows:
e:\archivos de programa\IBM\SQLLIB\doc\htmlcd\%L\index.htm
Tareas relacionadas:
v “Búsqueda de temas mediante el acceso al Centro de información de DB2
desde un navegador” en la página 585
v “Copia de archivos desde el CD de documentación HTML de DB2 en un
servidor Web” en la página 591
Consulta relacionada:
Procedimiento:
Tareas relacionadas:
v “Copia de archivos desde el CD de documentación HTML de DB2 en un
servidor Web” en la página 591
Consulta relacionada:
v “Visión general de la información técnica de DB2 Universal Database” en la
página 573
Procedimiento:
Tareas relacionadas:
v “Búsqueda en la documentación de DB2” en la página 593
Consulta relacionada:
v “Idiomas, entornos locales y páginas de códigos soportados por DB2” en el
manual Guía rápida de iniciación para servidores de DB2
v “Visión general de la información técnica de DB2 Universal Database” en la
página 573
Procedimiento:
Tareas relacionadas:
v “Búsqueda en la documentación de DB2” en la página 593
Prerrequisitos:
Restricciones:
Tareas relacionadas:
v “Resolución de problemas de búsqueda de documentación de DB2 con
Netscape 4.x” en la página 592
Conceptos relacionados:
v “Acceso al Centro de información de DB2 desde un navegador” en la
página 597
Tareas relacionadas:
v “Búsqueda de información de productos mediante el acceso al Centro de
información de DB2 desde las herramientas de administración” en la página
587
Accesibilidad
Entrada de teclado
Puede trabajar con las Herramientas de DB2 utilizando sólo el teclado. Puede
utilizar teclas o combinaciones de teclas para llevar a cabo la mayoría de las
operaciones que también se pueden realizar con el ratón.
Valores de font
Las Herramientas de DB2 permiten seleccionar el color, el tamaño y el font
para el texto de los menús y las ventanas de diálogo, utilizando el cuaderno
Valores de herramientas.
Antes de empezar:
Para poder acceder a estas guías de aprendizaje utilizando los enlaces que
figuran abajo, deberá instalar las guías de aprendizaje desde el CD de
documentación HTML de DB2.
Tareas relacionadas:
v “Búsqueda de temas mediante el acceso al Centro de información de DB2
desde un navegador” en la página 585
v “Búsqueda de información de productos mediante el acceso al Centro de
información de DB2 desde las herramientas de administración” en la página
587
v “Actualización de la documentación HTML instalada en la máquina” en la
página 590
Las referencias hechas en esta publicación a sitios Web que no son de IBM se
proporcionan sólo para la comodidad del usuario y no constituyen un aval de
esos sitios Web. La información contenida en esos sitios Web no forma parte
de la información del presente producto IBM y el usuario es responsable de la
utilización de dichos sitios Web.
LICENCIA DE COPYRIGHT:
Avisos 601
Marcas registradas
Los términos siguientes son marcas registradas de International Business
Machines Corporation en los EE.UU. y/o en otros países y se han utilizado
como mínimo en uno de los documentos de la biblioteca de documentación
de DB2 UDB.
Java y todas las marcas registradas basadas en Java son marcas registradas de
Sun Microsystems, Inc. en los EE.UU. y/o en otros países.
UNIX es marca registrada de The Open Group en los EE.UU. y/o en otros
países.
Avisos 603
604 Programación de aplicaciones cliente
Cómo ponerse en contacto con IBM
En los EE.UU., puede ponerse en contacto con IBM llamando a uno de los
siguientes números:
v 1-800-237-5511 para servicio al cliente
v 1-888-426-4343 para obtener información sobre las opciones de servicio
técnico disponibles
v 1-800-IBM-4YOU (426-4968) para márketing y ventas de DB2
Para localizar una oficina de IBM en su país o región, consulte IBM Directory
of Worldwide Contacts en el sitio Web www.ibm.com/planetwide
Para obtener información sobre cómo ponerse en contacto con IBM desde
fuera de los EE.UU., vaya a la página IBM Worldwide en el sitio
www.ibm.com/planetwide
SC10-3723-00