esselware.com.mxesselware.com.mx/IBMi_en_Espanol/CursoRpg/SQLDB2.pdf · Caracteres.............69...

1706
IBM ® DB2 ® Universal Database Consulta de SQL Versión 7 SC10-3497-01 IBM

Transcript of esselware.com.mxesselware.com.mx/IBMi_en_Espanol/CursoRpg/SQLDB2.pdf · Caracteres.............69...

  • IBM®

    DB2®

    Universal Database

    Consulta de SQL

    Versión 7

    SC10-3497-01

    IBM

  • IBM®

    DB2®

    Universal Database

    Consulta de SQL

    Versión 7

    SC10-3497-01

    IBM

  • Antes de utilizar esta información y el producto al que da soporte, asegúrese de leer la información general incluidaen el “Apéndice S. Avisos” en la página 1649.

    Esta publicación es la traducción del original inglés IBM DB2 SQL Reference Version 7 (SC09-2974-01).

    Este documento contiene información sobre productos patentados de IBM. Se proporciona de acuerdo con un contratode licencia y está protegido por la ley de la propiedad intelectual. La presente publicación no incluye garantías delproducto y las declaraciones que contiene no deben interpretarse como tales.

    Puede solicitar publicaciones a través del representante de IBM o sucursal de IBM de su localidad, o bien llamando alos números de teléfono 1-800-879-2755, en los Estados Unidos, o 1-800-IBM-4YOU, en Canadá.

    Cuando envía información a IBM, otorga a IBM un derecho no exclusivo para utilizar o distribuir dicha informaciónen la forma en que IBM considere adecuada, sin contraer por ello ninguna obligación con el remitente.

    © Copyright International Business Machines Corporation 1993, 2001. Reservados todos los derechos.

  • Contenido

    Capítulo 1. Introducción . . . . . . . . 1Quién debe utilizar este manual. . . . . . 1Forma de utilizar este manual . . . . . . 1

    Estructura de este manual. . . . . . . 1Lectura de los diagramas de sintaxis . . . . 3Convenios utilizados en este manual . . . . 6

    Condiciones de error . . . . . . . . 6Convenios de resaltado . . . . . . . 6

    Documentación relacionada para este manual 6

    Capítulo 2. Conceptos . . . . . . . . 9Definiciones de base de datos relacional . . . 9Lenguaje de consulta estructurada (SQL) . . . 9Autorización y privilegios . . . . . . . 10Esquemas . . . . . . . . . . . . . 13

    Control de la utilización de esquemas . . 13Tablas . . . . . . . . . . . . . . 14Vistas . . . . . . . . . . . . . . 15Seudónimos . . . . . . . . . . . . 16Índices . . . . . . . . . . . . . . 16Claves . . . . . . . . . . . . . . 17

    Claves de unicidad. . . . . . . . . 17Claves primarias . . . . . . . . . 17Claves foráneas . . . . . . . . . . 17Claves de particionamiento . . . . . . 17

    Restricciones . . . . . . . . . . . . 18Restricciones de unicidad . . . . . . 18Restricciones de referencia . . . . . . 19Restricciones de comprobación de tabla . . 22

    Nivel de aislamiento . . . . . . . . . 23Lectura repetible (RR) . . . . . . . . 24Estabilidad de lectura (RS) . . . . . . 25Estabilidad del cursor (CS) . . . . . . 26Lectura no confirmada (UR). . . . . . 26Comparación de los niveles de aislamiento 26

    Consultas . . . . . . . . . . . . . 26Expresiones de tabla . . . . . . . . . 27

    Expresiones de tabla comunes . . . . . 27Procesos, simultaneidad y recuperación deaplicaciones . . . . . . . . . . . . 27SQL interactivo . . . . . . . . . . . 30SQL incorporado . . . . . . . . . . 30

    SQL estático . . . . . . . . . . . 30SQL dinámico . . . . . . . . . . 31

    Interfaz de nivel de llamada (CLI) de DB2 yOpen Database Connectivity (ODBC) . . . 31Programas JDBC (Java Database Connectivity)y SQLJ (SQL incorporado para Java) . . . . 32Paquetes . . . . . . . . . . . . . 32Vistas de catálogo . . . . . . . . . . 32Conversión de caracteres . . . . . . . . 33

    Juegos de caracteres y páginas de códigos 34Atributos de páginas de códigos . . . . 35

    Supervisores de sucesos . . . . . . . . 37Desencadenantes . . . . . . . . . . 37Espacios de tablas y otras estructuras dealmacenamiento. . . . . . . . . . . 39Partición de datos entre múltiples particiones 40

    Mapas de particionamiento . . . . . . 42Colocación de tablas . . . . . . . . 43

    Base de datos relacional distribuida . . . . 43Servidores de aplicaciones . . . . . . 44CONNECT (Tipo 1) y CONNECT (Tipo 2) 45Unidad de trabajo remota . . . . . . 45Unidad de trabajo distribuida dirigida poraplicación . . . . . . . . . . . . 49Consideraciones acerca de larepresentación de datos . . . . . . . 55

    Sistemas federados DB2 . . . . . . . . 56Servidor federado, base de datos federaday fuentes de datos . . . . . . . . . 56Tareas realizadas en un sistema federadoDB2 . . . . . . . . . . . . . . 56Reiniciadores y módulos de reiniciador . . 59Definiciones de servidor y opciones deservidor . . . . . . . . . . . . 59Correlaciones de usuarios y opciones deusuario. . . . . . . . . . . . . 62Correlaciones de tipos de datos . . . . 62Correlaciones de funciones, plantillas defunciones y opciones de correlación defunciones . . . . . . . . . . . . 63Apodos y opciones de columna . . . . 64Especificaciones de índice . . . . . . 65Peticiones distribuidas . . . . . . . 66Compensación . . . . . . . . . . 67Paso a través. . . . . . . . . . . 68

    Capítulo 3. Elementos del lenguaje . . . 69

    © Copyright IBM Corp. 1993, 2001 iii

  • Caracteres. . . . . . . . . . . . . 69Consideraciones acerca de MBCS . . . . 70

    Símbolos . . . . . . . . . . . . . 70Consideraciones acerca de MBCS . . . . 71

    Identificadores . . . . . . . . . . . 71Identificadores SQL . . . . . . . . 72Identificadores de sistema principal . . . 72

    Convenios de denominación y calificacionesimplícitas de nombres de objetos . . . . . 72Seudónimos . . . . . . . . . . . . 78ID de autorización y nombres-autorización. . 79

    Características del SQL dinámico en laejecución . . . . . . . . . . . . 81Los ID de autorización y la preparación desentencias . . . . . . . . . . . . 82

    Tipos de datos . . . . . . . . . . . 82Nulos . . . . . . . . . . . . . 84Gran objeto (LOB) . . . . . . . . . 84Series de caracteres . . . . . . . . 87Series gráficas . . . . . . . . . . 88Serie binaria . . . . . . . . . . . 89Números . . . . . . . . . . . . 90Valores de indicación de fecha y hora . . 91Valores DATALINK . . . . . . . . 95Tipos definidos por el usuario . . . . . 96

    Promoción de los tipos de datos . . . . . 100Conversión entre tipos de datos . . . . . 101Asignaciones y comparaciones . . . . . 105

    Asignaciones numéricas. . . . . . . 106Asignaciones de series . . . . . . . 107Asignaciones de indicación de fecha yhora . . . . . . . . . . . . . 110Asignaciones de DATALINK . . . . . 111Asignaciones de los tipos definidos por elusuario . . . . . . . . . . . . 113Asignaciones de tipos de referencia . . . 114Comparaciones numéricas . . . . . . 114Comparaciones de series . . . . . . 115Comparaciones de indicación de fecha yhora . . . . . . . . . . . . . 119Comparaciones de tipos definidos por elusuario . . . . . . . . . . . . 119Comparaciones de tipos de referencia . . 120

    Reglas para los tipos de datos del resultado 120Series de caracteres . . . . . . . . 121Series gráficas . . . . . . . . . . 122Gran objeto binario (BLOB) . . . . . 122Numérico . . . . . . . . . . . 122DATE . . . . . . . . . . . . . 123TIME . . . . . . . . . . . . . 123

    TIMESTAMP . . . . . . . . . . 123DATALINK . . . . . . . . . . . 123Tipos definidos por el usuario . . . . 123Atributo de posibilidad de nulo delresultado. . . . . . . . . . . . 124

    Reglas para las conversiones de series . . . 124Compatibilidad entre particiones. . . . . 127Constantes . . . . . . . . . . . . 129

    Constantes enteras . . . . . . . . 129Constantes de coma flotante . . . . . 129Constantes decimales . . . . . . . 130Constantes de tipo serie. . . . . . . 130Constantes hexadecimales . . . . . . 130Constantes gráficas de tipo serie . . . . 131Utilización de constantes con tiposdefinidos por el usuario. . . . . . . 131

    Registros especiales . . . . . . . . . 132CLIENT ACCTNG . . . . . . . . 132CLIENT APPLNAME . . . . . . . 132CLIENT USERID . . . . . . . . . 133CLIENT WRKSTNNAME . . . . . . 133CURRENT DATE . . . . . . . . . 134CURRENT DEFAULT TRANSFORMGROUP . . . . . . . . . . . . 134CURRENT DEGREE . . . . . . . . 135CURRENT EXPLAIN MODE . . . . . 136CURRENT EXPLAIN SNAPSHOT . . . 137CURRENT NODE . . . . . . . . 138CURRENT PATH . . . . . . . . . 138CURRENT QUERY OPTIMIZATION . . 139CURRENT REFRESH AGE. . . . . . 140CURRENT SCHEMA . . . . . . . 140CURRENT SERVER . . . . . . . . 141CURRENT TIME . . . . . . . . . 141CURRENT TIMESTAMP . . . . . . 142CURRENT TIMEZONE . . . . . . . 142USER . . . . . . . . . . . . . 143

    Nombres de columna . . . . . . . . 143Nombres de columna calificados . . . . 144Nombres de correlación . . . . . . . 144Calificadores de nombres de columnapara evitar ambigüedad. . . . . . . 147Calificadores de nombres de columna enreferencias correlacionadas . . . . . . 149

    Referencias a variables del lenguaje principal 151Variables del lenguaje principal en el SQLdinámico. . . . . . . . . . . . 152Referencias a las variables del lenguajeprincipal BLOB, CLOB y DBCLOB . . . 154Referencias a variables localizadoras . . 155

    iv Consulta de SQL

  • Referencias a las variables de referencia aarchivos BLOB, CLOB y DBCLOB . . . 155Referencias a variables de lenguajeprincipal de tipo estructurado. . . . . 158

    Funciones . . . . . . . . . . . . 159Funciones definidas por el usuarioexternas, de SQL y derivadas . . . . . 160Funciones definidas por el usuario:escalares, de columna, de fila y de tabla . 160Signaturas de función . . . . . . . 161Vía de acceso de SQL . . . . . . . 161Resolución de funciones . . . . . . 162Invocación de función . . . . . . . 167

    Métodos . . . . . . . . . . . . . 168Métodos definidos por el usuario:externos y SQL . . . . . . . . . 168Signaturas de método . . . . . . . 169Invocación de métodos . . . . . . . 169Resolución de métodos . . . . . . . 170Método de elección de la mejor opción 171Ejemplo de resolución de método . . . 173Invocación de métodos . . . . . . . 173

    Semántica de enlace conservador . . . . 174Expresiones . . . . . . . . . . . . 176

    Sin operadores . . . . . . . . . . 177Con el operador de concatenación . . . 177Con operadores aritméticos . . . . . 180Dos operandos enteros . . . . . . . 182Operandos enteros y decimales . . . . 182Dos operandos decimales . . . . . . 182Aritmética decimal en SQL. . . . . . 182Operandos de coma flotante . . . . . 183Tipos definidos por el usuario comooperandos . . . . . . . . . . . 183Selección completa escalar . . . . . . 184Operaciones de fecha y hora y duraciones 184Aritmética de fecha y hora en SQL . . . 185Prioridad de operaciones . . . . . . 190Expresiones CASE . . . . . . . . 190Especificaciones CAST . . . . . . . 193Operaciones de desreferencia . . . . . 196Funciones OLAP . . . . . . . . . 197Invocación de métodos . . . . . . . 204Tratamiento de los subtipos . . . . . 206Referencia de secuencia . . . . . . . 207

    Predicados . . . . . . . . . . . . 212Predicado básico . . . . . . . . . 213Predicado cuantificado . . . . . . . 214Predicado BETWEEN . . . . . . . 217Predicado EXISTS . . . . . . . . . 219

    Predicado IN . . . . . . . . . . 220Predicado LIKE . . . . . . . . . 223Predicado NULL . . . . . . . . . 229Predicado TYPE . . . . . . . . . 230

    Condiciones de búsqueda . . . . . . . 232Ejemplos . . . . . . . . . . . . 234

    Capítulo 4. Funciones . . . . . . . . 235Funciones de columna . . . . . . . . 257

    AVG . . . . . . . . . . . . . 258CORRELATION . . . . . . . . . 260COUNT . . . . . . . . . . . . 261COUNT_BIG . . . . . . . . . . 263COVARIANCE. . . . . . . . . . 265GROUPING . . . . . . . . . . 266MAX . . . . . . . . . . . . . 268MIN . . . . . . . . . . . . . 270Funciones REGRESSION . . . . . . 272STDDEV . . . . . . . . . . . . 276SUM . . . . . . . . . . . . . 277VARIANCE . . . . . . . . . . . 278

    Funciones escalares . . . . . . . . . 279ABS o ABSVAL . . . . . . . . . 280ACOS. . . . . . . . . . . . . 281ASCII . . . . . . . . . . . . . 282ASIN . . . . . . . . . . . . . 283ATAN. . . . . . . . . . . . . 284ATAN2 . . . . . . . . . . . . 285BIGINT . . . . . . . . . . . . 286BLOB . . . . . . . . . . . . . 287CEILING o CEIL . . . . . . . . . 288CHAR . . . . . . . . . . . . 289CHR . . . . . . . . . . . . . 295CLOB . . . . . . . . . . . . . 296COALESCE . . . . . . . . . . . 297CONCAT . . . . . . . . . . . 298COS . . . . . . . . . . . . . 299COT . . . . . . . . . . . . . 300DATE . . . . . . . . . . . . . 301DAY . . . . . . . . . . . . . 303DAYNAME . . . . . . . . . . . 305DAYOFWEEK . . . . . . . . . . 306DAYOFWEEK_ISO . . . . . . . . 307DAYOFYEAR . . . . . . . . . . 308DAYS . . . . . . . . . . . . . 309DBCLOB. . . . . . . . . . . . 310DECIMAL . . . . . . . . . . . 311DECRYPT_BIN y DECRYPT_CHAR . . 314DEGREES . . . . . . . . . . . 316DEREF . . . . . . . . . . . . 317

    Contenido v

  • DIFFERENCE . . . . . . . . . . 318DIGITS . . . . . . . . . . . . 319DLCOMMENT. . . . . . . . . . 320DLLINKTYPE . . . . . . . . . . 321DLURLCOMPLETE . . . . . . . . 322DLURLPATH . . . . . . . . . . 323DLURLPATHONLY . . . . . . . . 324DLURLSCHEME . . . . . . . . . 325DLURLSERVER . . . . . . . . . 326DLVALUE . . . . . . . . . . . 327DOUBLE. . . . . . . . . . . . 329ENCRYPT . . . . . . . . . . . 331EVENT_MON_STATE . . . . . . . 334EXP . . . . . . . . . . . . . 335FLOAT . . . . . . . . . . . . 336FLOOR . . . . . . . . . . . . 337GETHINT . . . . . . . . . . . 338GENERATE_UNIQUE . . . . . . . 339GRAPHIC . . . . . . . . . . . 341HEX . . . . . . . . . . . . . 342HOUR . . . . . . . . . . . . 344IDENTITY_VAL_LOCAL . . . . . . 345INSERT . . . . . . . . . . . . 351INTEGER . . . . . . . . . . . 353JULIAN_DAY . . . . . . . . . . 355LCASE o LOWER. . . . . . . . . 356LCASE (esquema SYSFUN) . . . . . 357LEFT . . . . . . . . . . . . . 358LENGTH . . . . . . . . . . . 359LN. . . . . . . . . . . . . . 361LOCATE . . . . . . . . . . . . 362LOG . . . . . . . . . . . . . 363LOG10 . . . . . . . . . . . . 364LONG_VARCHAR . . . . . . . . 365LONG_VARGRAPHIC . . . . . . . 366LTRIM . . . . . . . . . . . . 367LTRIM (esquema SYSFUN) . . . . . 368MICROSECOND . . . . . . . . . 369MIDNIGHT_SECONDS . . . . . . . 370MINUTE. . . . . . . . . . . . 371MOD . . . . . . . . . . . . . 372MONTH . . . . . . . . . . . . 373MONTHNAME . . . . . . . . . 374MQPUBLISH . . . . . . . . . . 375MQREAD . . . . . . . . . . . 378MQRECEIVE . . . . . . . . . . 380MQSEND . . . . . . . . . . . 382MQSUBSCRIBE . . . . . . . . . 384MQUNSUBSCRIBE . . . . . . . . 386MULTIPLY_ALT . . . . . . . . . 388

    NODENUMBER . . . . . . . . . 390NULLIF . . . . . . . . . . . . 392PARTITION. . . . . . . . . . . 393POSSTR . . . . . . . . . . . . 395POWER . . . . . . . . . . . . 398QUARTER . . . . . . . . . . . 399RADIANS . . . . . . . . . . . 400RAISE_ERROR. . . . . . . . . . 401RAND . . . . . . . . . . . . 403REAL . . . . . . . . . . . . . 404REC2XML . . . . . . . . . . . 405REPEAT . . . . . . . . . . . . 411REPLACE . . . . . . . . . . . 412RIGHT . . . . . . . . . . . . 413ROUND . . . . . . . . . . . . 414RTRIM . . . . . . . . . . . . 416RTRIM (esquema SYSFUN) . . . . . 417SECOND . . . . . . . . . . . 418SIGN . . . . . . . . . . . . . 419SIN . . . . . . . . . . . . . 420SMALLINT . . . . . . . . . . . 421SOUNDEX . . . . . . . . . . . 422SPACE . . . . . . . . . . . . 423SQRT . . . . . . . . . . . . . 424SUBSTR . . . . . . . . . . . . 425TABLE_NAME. . . . . . . . . . 429TABLE_SCHEMA . . . . . . . . . 431TAN . . . . . . . . . . . . . 434TIME . . . . . . . . . . . . . 435TIMESTAMP . . . . . . . . . . 436TIMESTAMP_ISO . . . . . . . . . 438TIMESTAMPDIFF. . . . . . . . . 439TRANSLATE . . . . . . . . . . 441TRUNCATE o TRUNC . . . . . . . 444TYPE_ID. . . . . . . . . . . . 445TYPE_NAME . . . . . . . . . . 446TYPE_SCHEMA . . . . . . . . . 447UCASE o UPPER . . . . . . . . . 448VALUE . . . . . . . . . . . . 449VARCHAR . . . . . . . . . . . 450VARGRAPHIC. . . . . . . . . . 452WEEK . . . . . . . . . . . . 454WEEK_ISO . . . . . . . . . . . 455YEAR . . . . . . . . . . . . . 456

    Funciones de tabla . . . . . . . . . 457MQREADALL . . . . . . . . . . 458MQRECEIVEALL . . . . . . . . . 461SQLCACHE_SNAPSHOT . . . . . . 464

    Procedimientos . . . . . . . . . . 465GET_ROUTINE_SAR . . . . . . . 466

    vi Consulta de SQL

  • PUT_ROUTINE_SAR . . . . . . . 467Funciones definidas por el usuario . . . . 469

    Capítulo 5. Consultas . . . . . . . . 471subselección . . . . . . . . . . . 472

    cláusula-select . . . . . . . . . . 473cláusula-from . . . . . . . . . . 478referencia-tabla. . . . . . . . . . 479tabla-unida . . . . . . . . . . . 483cláusula-where . . . . . . . . . . 486Cláusula group-by . . . . . . . . 487cláusula-having . . . . . . . . . 494

    Ejemplos de subselecciones . . . . . . 496Ejemplos de uniones . . . . . . . . . 499Ejemplos de conjuntos de agrupación, Cubey Rollup . . . . . . . . . . . . . 503selección completa . . . . . . . . . 512

    Ejemplos de una selección completa . . 515sentencia-select . . . . . . . . . . 518

    expresión-común-tabla . . . . . . . 519cláusula-order-by . . . . . . . . . 522cláusula-update . . . . . . . . . 526cláusula-read-only . . . . . . . . 527cláusula-fetch-first . . . . . . . . 528cláusula-optimize-for. . . . . . . . 529Ejemplos de una sentencia-select . . . . 530

    Capítulo 6. Sentencias de SQL . . . . . 533Cómo se invocan las sentencias de SQL . . 537

    Incorporación de una sentencia en unprograma de aplicación . . . . . . . 538Preparación y ejecución dinámicas . . . 539Invocación estática de una sentencia-select 540Invocación dinámica de unasentencia-select . . . . . . . . . 540Invocación interactiva . . . . . . . 541Utilización de SQL con otros sistemasprincipales . . . . . . . . . . . 541

    Códigos de retorno de SQL . . . . . . 542SQLCODE . . . . . . . . . . . 542SQLSTATE . . . . . . . . . . . 543

    comentarios de SQL . . . . . . . . . 544ALTER BUFFERPOOL . . . . . . . . 545ALTER NICKNAME . . . . . . . . . 548ALTER NODEGROUP . . . . . . . . 552ALTER SEQUENCE . . . . . . . . . 556ALTER SERVER . . . . . . . . . . 561ALTER TABLE . . . . . . . . . . . 565ALTER TABLESPACE . . . . . . . . 597ALTER TYPE (Estructurado) . . . . . . 603

    ALTER USER MAPPING . . . . . . . 610ALTER VIEW . . . . . . . . . . . 613BEGIN DECLARE SECTION . . . . . . 615CALL . . . . . . . . . . . . . . 617CLOSE . . . . . . . . . . . . . 626COMMENT. . . . . . . . . . . . 628COMMIT . . . . . . . . . . . . 640SQL compuesto (dinámico) . . . . . . 642SQL compuesto (incorporado). . . . . . 648CONNECT (Tipo 1) . . . . . . . . . 653CONNECT (Tipo 2) . . . . . . . . . 662CREATE ALIAS . . . . . . . . . . 670CREATE BUFFERPOOL. . . . . . . . 673CREATE DISTINCT TYPE . . . . . . . 677CREATE EVENT MONITOR . . . . . . 684CREATE FUNCTION . . . . . . . . 695CREATE FUNCTION (Escalar externa). . . 696CREATE FUNCTION (Tabla externa) . . . 723CREATE FUNCTION (Tabla externa OLEDB) . . . . . . . . . . . . . . 741CREATE FUNCTION (fuente o plantilla) . . 750CREATE FUNCTION (SQL, escalar, de tablao de fila) . . . . . . . . . . . . . 761CREATE FUNCTION MAPPING . . . . 769CREATE INDEX . . . . . . . . . . 774CREATE INDEX EXTENSION . . . . . 782CREATE METHOD . . . . . . . . . 790CREATE NICKNAME . . . . . . . . 795CREATE NODEGROUP. . . . . . . . 801CREATE PROCEDURE . . . . . . . . 804CREATE SCHEMA . . . . . . . . . 822CREATE SEQUENCE . . . . . . . . 826CREATE SERVER . . . . . . . . . . 831CREATE TABLE . . . . . . . . . . 835CREATE TABLESPACE . . . . . . . . 893CREATE TRANSFORM . . . . . . . . 903CREATE TRIGGER . . . . . . . . . 910CREATE TYPE (Estructurado). . . . . . 923CREATE TYPE MAPPING . . . . . . . 950CREATE USER MAPPING . . . . . . . 955CREATE VIEW . . . . . . . . . . 957CREATE WRAPPER . . . . . . . . . 974DECLARE CURSOR . . . . . . . . . 976DECLARE GLOBAL TEMPORARY TABLE 982DELETE . . . . . . . . . . . . . 991DESCRIBE . . . . . . . . . . . . 997DISCONNECT . . . . . . . . . . 1002DROP . . . . . . . . . . . . . 1005END DECLARE SECTION . . . . . . 1034EXECUTE . . . . . . . . . . . . 1036

    Contenido vii

  • EXECUTE IMMEDIATE . . . . . . . 1042EXPLAIN . . . . . . . . . . . . 1045FETCH . . . . . . . . . . . . . 1050FLUSH EVENT MONITOR . . . . . . 1054FREE LOCATOR. . . . . . . . . . 1055GRANT (autorizaciones de base de datos) 1056GRANT (privilegios de índice) . . . . . 1059GRANT (privilegios de paquete) . . . . 1061GRANT (privilegios de esquema) . . . . 1064GRANT (privilegios de secuencia) . . . . 1067GRANT (Privilegios de servidor) . . . . 1068GRANT (privilegios de apodo, vista otabla) . . . . . . . . . . . . . 1070GRANT (privilegios para espacios detablas) . . . . . . . . . . . . . 1078INCLUDE . . . . . . . . . . . . 1080INSERT . . . . . . . . . . . . . 1082LOCK TABLE. . . . . . . . . . . 1092OPEN . . . . . . . . . . . . . 1094PREPARE . . . . . . . . . . . . 1099REFRESH TABLE . . . . . . . . . 1110RELEASE (Conexión) . . . . . . . . 1111RELEASE SAVEPOINT. . . . . . . . 1113RENAME TABLE . . . . . . . . . 1114RENAME TABLESPACE . . . . . . . 1116REVOKE (autorizaciones de bases de datos) 1118REVOKE (privilegios de índice) . . . . . 1122REVOKE (privilegios de paquete) . . . . 1124REVOKE (privilegios de esquema) . . . . 1127REVOKE (Privilegios de servidor) . . . . 1129REVOKE (privilegios de apodo, vista otabla) . . . . . . . . . . . . . 1131REVOKE (privilegios para espacios detablas) . . . . . . . . . . . . . 1137ROLLBACK . . . . . . . . . . . 1139SAVEPOINT . . . . . . . . . . . 1142SELECT. . . . . . . . . . . . . 1144SELECT INTO . . . . . . . . . . 1145SET CONNECTION . . . . . . . . 1147SET CURRENT DEFAULT TRANSFORMGROUP . . . . . . . . . . . . . 1149SET CURRENT DEGREE . . . . . . . 1151SET CURRENT EXPLAIN MODE . . . . 1153SET CURRENT EXPLAIN SNAPSHOT . . 1155SET CURRENT PACKAGESET . . . . . 1157SET CURRENT QUERY OPTIMIZATION 1159SET CURRENT REFRESH AGE . . . . . 1162SET ENCRYPTION PASSWORD . . . . 1164SET EVENT MONITOR STATE . . . . . 1166SET INTEGRITY . . . . . . . . . . 1168

    SET PASSTHRU . . . . . . . . . . 1179SET PATH . . . . . . . . . . . . 1181SET SCHEMA . . . . . . . . . . 1184SET SERVER OPTION . . . . . . . . 1186SET variable . . . . . . . . . . . 1188UPDATE . . . . . . . . . . . . 1193VALUES . . . . . . . . . . . . 1204VALUES INTO . . . . . . . . . . 1205WHENEVER . . . . . . . . . . . 1207

    Capítulo 7. Sentencias de control deSQL . . . . . . . . . . . . . 1209Sentencia de procedimiento SQL . . . . 1210Sentencia ALLOCATE CURSOR . . . . 1212Sentencia de asignación . . . . . . . 1214Sentencia ASSOCIATE LOCATORS . . . 1216Sentencia CASE . . . . . . . . . . 1218Sentencia FOR . . . . . . . . . . 1221Sentencia GET DIAGNOSTICS . . . . . 1223Sentencia GOTO . . . . . . . . . . 1225Sentencia IF . . . . . . . . . . . 1227Sentencia ITERATE . . . . . . . . . 1229Sentencia LEAVE . . . . . . . . . 1230Sentencia LOOP . . . . . . . . . . 1231Sentencia compuesta (procedimiento) . . . 1233Sentencia REPEAT . . . . . . . . . 1240Sentencia RESIGNAL . . . . . . . . 1242Sentencia RETURN . . . . . . . . . 1245Sentencia SIGNAL . . . . . . . . . 1248Sentencia WHILE . . . . . . . . . 1251

    Apéndice A. Límites de SQL . . . . . 1253

    Apéndice B. Comunicaciones SQL(SQLCA) . . . . . . . . . . . . 1261Visualización de SQLCA interactivamente 1261Descripciones de los campos de la SQLCA 1261Orden del informe de errores . . . . . 1265Utilización de la SQLCA por DB2Enterprise - Extended Edition . . . . . 1266

    Apéndice C. Área de descriptores SQL(SQLDA) . . . . . . . . . . . . 1267Descripciones de los campos. . . . . . 1268

    Campos en la cabecera SQLDA . . . . 1269Campos de una ocurrencia de unaSQLVAR base . . . . . . . . . . 1270Campos de una ocurrencia de unaSQLVAR secundaria . . . . . . . 1272

    Efecto de DESCRIBE en la SQLDA. . . . 1274

    viii Consulta de SQL

  • SQLTYPE y SQLLEN . . . . . . . . 1276SQLTYPES no soportados y noreconocibles . . . . . . . . . . 1278Números decimales empaquetados . . 1279Campo SQLLEN para decimal . . . . 1280

    Apéndice D. Vistas de catálogo . . . . 1281Vistas de catálogo actualizables . . . . . 1282‘Guía’ de las vistas de catálogo . . . . . 1282‘Guía’ de las vistas de catálogoactualizables . . . . . . . . . . . 1285SYSIBM.SYSDUMMY1 . . . . . . . . 1286SYSCAT.ATTRIBUTES . . . . . . . . 1287SYSCAT.BUFFERPOOLNODES . . . . . 1289SYSCAT.BUFFERPOOLS . . . . . . . 1290SYSCAT.CASTFUNCTIONS . . . . . . 1291SYSCAT.CHECKS . . . . . . . . . 1292SYSCAT.COLAUTH. . . . . . . . . 1293SYSCAT.COLCHECKS . . . . . . . . 1294SYSCAT.COLDIST . . . . . . . . . 1295SYSCAT.COLOPTIONS . . . . . . . 1296SYSCAT.COLUMNS . . . . . . . . 1297SYSCAT.CONSTDEP . . . . . . . . 1303SYSCAT.DATATYPES . . . . . . . . 1304SYSCAT.DBAUTH . . . . . . . . . 1306SYSCAT.EVENTMONITORS . . . . . . 1308SYSCAT.EVENTS . . . . . . . . . 1310SYSCAT.FULLHIERARCHIES . . . . . 1311SYSCAT.FUNCDEP . . . . . . . . . 1312SYSCAT.FUNCMAPOPTIONS . . . . . 1313SYSCAT.FUNCMAPPARMOPTIONS . . . 1314SYSCAT.FUNCMAPPINGS . . . . . . 1315SYSCAT.FUNCPARMS . . . . . . . . 1316SYSCAT.FUNCTIONS . . . . . . . . 1318SYSCAT.HIERARCHIES . . . . . . . 1324SYSCAT.INDEXAUTH . . . . . . . . 1325SYSCAT.INDEXCOLUSE . . . . . . . 1326SYSCAT.INDEXDEP . . . . . . . . 1327SYSCAT.INDEXES . . . . . . . . . 1328SYSCAT.INDEXOPTIONS. . . . . . . 1332SYSCAT.KEYCOLUSE . . . . . . . . 1333SYSCAT.NAMEMAPPINGS . . . . . . 1334SYSCAT.NODEGROUPDEF . . . . . . 1335SYSCAT.NODEGROUPS . . . . . . . 1336SYSCAT.PACKAGEAUTH . . . . . . 1337SYSCAT.PACKAGEDEP . . . . . . . 1338SYSCAT.PACKAGES . . . . . . . . 1339SYSCAT.PARTITIONMAPS . . . . . . 1344SYSCAT.PASSTHRUAUTH . . . . . . 1345SYSCAT.PROCEDURES . . . . . . . 1346

    SYSCAT.PROCOPTIONS . . . . . . . 1349SYSCAT.PROCPARMOPTIONS . . . . . 1350SYSCAT.PROCPARMS . . . . . . . . 1351SYSCAT.REFERENCES. . . . . . . . 1353SYSCAT.REVTYPEMAPPINGS . . . . . 1354SYSCAT.SCHEMAAUTH . . . . . . . 1356SYSCAT.SCHEMATA . . . . . . . . 1357SYSCAT.SEQUENCES . . . . . . . . 1358SYSCAT.SERVEROPTIONS . . . . . . 1360SYSCAT.SERVERS . . . . . . . . . 1361SYSCAT.STATEMENTS . . . . . . . 1362SYSCAT.TABAUTH . . . . . . . . . 1363SYSCAT.TABCONST . . . . . . . . 1365SYSCAT.TABLES. . . . . . . . . . 1366SYSCAT.TABLESPACES . . . . . . . 1371SYSCAT.TABOPTIONS. . . . . . . . 1373SYSCAT.TBSPACEAUTH . . . . . . . 1374SYSCAT.TRIGDEP . . . . . . . . . 1375SYSCAT.TRIGGERS . . . . . . . . . 1376SYSCAT.TYPEMAPPINGS . . . . . . 1378SYSCAT.USEROPTIONS . . . . . . . 1380SYSCAT.VIEWDEP . . . . . . . . . 1381SYSCAT.VIEWS . . . . . . . . . . 1382SYSCAT.WRAPOPTIONS . . . . . . . 1383SYSCAT.WRAPPERS . . . . . . . . 1384SYSSTAT.COLDIST . . . . . . . . . 1385SYSSTAT.COLUMNS . . . . . . . . 1386SYSSTAT.FUNCTIONS. . . . . . . . 1388SYSSTAT.INDEXES . . . . . . . . . 1390SYSSTAT.TABLES . . . . . . . . . 1394

    Apéndice E. Vistas de catálogo parautilizar con tipos estructurados . . . . 1397‘Guía’ de las vistas de catálogo . . . . . 1399OBJCAT.INDEXES . . . . . . . . . 1400OBJCAT.INDEXEXPLOITRULES . . . . 1404OBJCAT.INDEXEXTENSIONDEP . . . . 1405OBJCAT.INDEXEXTENSIONMETHODS 1406OBJCAT.INDEXEXTENSIONPARMS . . . 1407OBJCAT.INDEXEXTENSIONS . . . . . 1408OBJCAT.PREDICATESPECS . . . . . . 1409OBJCAT.TRANSFORMS . . . . . . . 1410

    Apéndice F. Sistemas federados . . . . 1411Tipos de servidor . . . . . . . . . 1411Opciones SQL para sistemas federados 1412

    Opciones de columna . . . . . . . 1413Opciones de correlación de funciones 1414Opciones de servidor . . . . . . . 1415Opciones de usuario . . . . . . . 1420

    Contenido ix

  • Correlaciones de tipos de datos por omisión 1421Correlaciones de tipos por omisión entrefuentes de datos DB2 y DB2 UniversalDatabase para OS/390 (y DB2 paraMVS/ESA) . . . . . . . . . . 1422Correlaciones de tipos por omisión entrefuentes de datos DB2 y 2 UniversalDatabase para AS/400 (y DB2 paraOS/400) . . . . . . . . . . . 1422Correlaciones de tipos por omisión entrefuentes de datos DB2 y Oracle . . . . 1422Correlaciones de tipos por omisión entrefuentes de datos DB2 y DB2 para VM yVSE (y SQL/DS) . . . . . . . . . 1423

    Proceso del recurso de paso a través . . . 1423Proceso SQL en sesiones de paso através . . . . . . . . . . . . 1423Consideraciones y restricciones . . . . 1424

    Apéndice G. Tablas de la base de datosde ejemplo . . . . . . . . . . . 1427La base de datos de muestra. . . . . . 1428

    Para crear la base de datos SAMPLE 1428Para borrar la base de datos de muestra 1428Tabla CL_SCHED . . . . . . . . 1429Tabla DEPARTMENT . . . . . . . 1429Tabla EMPLOYEE . . . . . . . . 1429Tabla EMP_ACT . . . . . . . . . 1433Tabla EMP_PHOTO. . . . . . . . 1435Tabla EMP_RESUME . . . . . . . 1435Tabla IN_TRAY . . . . . . . . . 1436Tabla ORG. . . . . . . . . . . 1436Tabla PROJECT . . . . . . . . . 1437Tabla SALES . . . . . . . . . . 1438Tabla STAFF . . . . . . . . . . 1439Tabla STAFFG . . . . . . . . . 1440

    Archivos de muestra con tipos de datosBLOB y CLOB . . . . . . . . . . 1441

    Foto de Quintana . . . . . . . . 1441Currículum vitae de Quintana . . . . 1441Foto de Nicholls . . . . . . . . . 1442Currículum vitae de Nicholls . . . . 1443Foto de Adamson . . . . . . . . 1444Currículum vitae de Adamson . . . . 1444Foto de Walker . . . . . . . . . 1445Currículum vitae de Walker . . . . . 1446

    Apéndice H. Nombres de esquemareservados y palabras reservadas . . . 1447Esquemas reservados . . . . . . . . 1447

    Palabras reservadas . . . . . . . . . 1447Palabras reservadas de SQL de IBM . . . 1449Palabras reservadas de ISO/ANS SQL92 1451

    Apéndice I. Comparación de niveles deaislamiento . . . . . . . . . . . 1453

    Apéndice J. Interacción dedesencadenantes y restricciones . . . 1455

    Apéndice K. Tablas de Explain ydefiniciones . . . . . . . . . . . 1459Tabla EXPLAIN_ARGUMENT . . . . . 1460Tabla EXPLAIN_INSTANCE . . . . . . 1464Tabla EXPLAIN_OBJECT . . . . . . . 1467Tabla EXPLAIN_OPERATOR . . . . . 1469Tabla EXPLAIN_PREDICATE . . . . . 1472Tabla EXPLAIN_STATEMENT . . . . . 1474Tabla EXPLAIN_STREAM . . . . . . 1477Tabla ADVISE_INDEX . . . . . . . . 1479Tabla ADVISE_WORKLOAD . . . . . 1482Definiciones de tabla para tablas de Explain 1483

    Definición de tablaEXPLAIN_ARGUMENT . . . . . . 1484Definición de tablaEXPLAIN_INSTANCE . . . . . . . 1485Definición de tabla EXPLAIN_OBJECT 1486Definición de tablaEXPLAIN_OPERATOR. . . . . . . 1487Definición de tablaEXPLAIN_PREDICATE . . . . . . 1488Definición de tablaEXPLAIN_STATEMENT . . . . . . 1489Definición de tabla EXPLAIN_STREAM 1490Definición de tabla ADVISE_INDEX 1491Definición de tablaADVISE_WORKLOAD . . . . . . 1493

    Apéndice L. Valores de registro deexplicaciones . . . . . . . . . . 1495

    Apéndice M. Ejemplo de recurrencia:Lista de material . . . . . . . . . 1499Ejemplo 1: Explosión de primer nivel . . . 1499Ejemplo 2: Explosión resumida . . . . . 1501Ejemplo 3: Control de profundidad . . . 1502

    Apéndice N. Tablas de excepciones 1505Reglas para crear una tabla de excepciones 1505Manejo de filas en las tablas de excepciones 1508

    x Consulta de SQL

  • Consulta de las tablas de excepciones . . . 1508

    Apéndice O. Consideraciones acerca deEUC de japonés y de chino tradicional . 1511Elementos del lenguaje. . . . . . . . 1511

    Caracteres . . . . . . . . . . . 1511Símbolos . . . . . . . . . . . 1511Identificadores . . . . . . . . . 1512Tipos de datos . . . . . . . . . 1512Asignaciones y comparaciones . . . . 1512Reglas para los tipos de datos delresultado . . . . . . . . . . . 1513Reglas para las conversiones de series 1514Constantes . . . . . . . . . . . 1515Funciones . . . . . . . . . . . 1515Expresiones . . . . . . . . . . 1515Predicados . . . . . . . . . . . 1516

    Funciones . . . . . . . . . . . . 1517LENGTH . . . . . . . . . . . 1517SUBSTR . . . . . . . . . . . 1517TRANSLATE . . . . . . . . . . 1517VARGRAPHIC . . . . . . . . . 1517

    Sentencias . . . . . . . . . . . . 1518CONNECT . . . . . . . . . . 1518PREPARE . . . . . . . . . . . 1518

    Apéndice P. Especificaciones BNF paralos enlaces de datos . . . . . . . . 1521

    Apéndice Q. Glosario . . . . . . . 1525

    Apéndice R. Utilización de la bibliotecade DB2 . . . . . . . . . . . . 1629Archivos PDF y manuales impresos sobreDB2 . . . . . . . . . . . . . . 1629

    Información sobre DB2 . . . . . . 1629Impresión de los manuales PDF . . . 1640Solicitud de los manuales impresos . . 1640

    Documentación en línea de DB2 . . . . 1642Acceso a la ayuda en línea . . . . . 1642Visualización de información en línea 1644Utilización de los asistentes de DB2 . . 1646Configuración de un servidor dedocumentos . . . . . . . . . . 1647Búsqueda de información en línea . . . 1648

    Apéndice S. Avisos . . . . . . . . 1649Marcas registradas . . . . . . . . . 1652

    Índice . . . . . . . . . . . . . 1655

    Cómo ponerse en contacto con IBM 1689Información sobre productos. . . . . . 1689

    Contenido xi

  • xii Consulta de SQL

  • Capítulo 1. Introducción

    Este capítulo preliminar:v Identifica la finalidad de este manual y las personas a las que va dirigidov Explica el modo de utilizar el manual y su estructurav Explica la notación de los diagramas de sintaxis, los convenios de

    denominación y de resaltado que se utilizan en el manualv Lista la documentación relacionadav Presenta una visión general de la familia de productos

    Quién debe utilizar este manual

    Este manual va dirigido a aquellas personas que deseen utilizar el Lenguajede consulta estructurada (SQL) para acceder a una base de datos.Principalmente, es para los programadores y los administradores de bases dedatos, pero también puede utilizarlo el usuario general que utiliza elprocesador de línea de mandatos.

    Este manual sirve más de consulta que de guía de aprendizaje. Supone que vaa escribir programas de aplicación y, por lo tanto, presenta todas las funcionesdel gestor de bases de datos.

    Forma de utilizar este manual

    Este manual define el lenguaje SQL que utiliza DB2 Universal DatabaseVersión 7. Utilícelo como un manual de consulta para informarse sobre losconceptos de bases de datos relacionales, elementos del lenguaje, lasfunciones, los formatos de las consultas y la sintaxis y semántica de lassentencias de SQL. Los apéndices se pueden utilizar para averiguar los límitese información sobre componentes importantes.

    Estructura de este manualEste manual de consulta está dividido en dos volúmenes. El Volumen 1contiene las secciones siguientes:v El “Capítulo 1. Introducción”, indica la finalidad, los destinatarios y la

    utilización del manual.v El “Capítulo 2. Conceptos” en la página 9, explica los conceptos básicos de

    las bases de datos relacionales y del SQL.v El “Capítulo 3. Elementos del lenguaje” en la página 69, describe la sintaxis

    básica del SQL y los elementos del lenguaje que son comunes a muchassentencias de SQL.

    © Copyright IBM Corp. 1993, 2001 1

  • v El “Capítulo 4. Funciones” en la página 235, contiene diagramas de sintaxis,descripciones semánticas, normas y ejemplos de utilización de las funcionesde columna y funciones escalares del SQL.

    v El “Capítulo 5. Consultas” en la página 471, describe los distintos formatosde una consulta.

    v Los apéndices incluidos en el Volumen 1 contienen la información siguiente:– El “Apéndice A. Límites de SQL” en la página 1253, contiene las

    limitaciones del SQL.– El “Apéndice B. Comunicaciones SQL (SQLCA)” en la página 1261,

    contiene la estructura SQLCA.– El “Apéndice C. Área de descriptores SQL (SQLDA)” en la página 1267,

    contiene la estructura SQLDA.– El “Apéndice D. Vistas de catálogo” en la página 1281, contiene las vistas

    de catálogo de la base de datos.– El “Apéndice E. Vistas de catálogo para utilizar con tipos estructurados”

    en la página 1397, contiene las vistas de catálogo de tipo estructurado dela base de datos.

    – El “Apéndice F. Sistemas federados” en la página 1411, contiene opcionesy correlaciones de tipos para sistemas federados.

    – El “Apéndice G. Tablas de la base de datos de ejemplo” en lapágina 1427, contiene las tablas de muestra utilizadas para los ejemplos.

    – El “Apéndice H. Nombres de esquema reservados y palabras reservadas”en la página 1447, contiene los nombres de esquemas reservados y las

    palabras reservadas correspondientes a los estándares SQL de IBM ySQL92 ISO/ANS.

    – El “Apéndice I. Comparación de niveles de aislamiento” en lapágina 1453, contiene un resumen de los niveles de aislamiento.

    – El “Apéndice J. Interacción de desencadenantes y restricciones” en lapágina 1455, explica la interacción de los desencadenantes y lasrestricciones referenciales.

    – El “Apéndice K. Tablas de Explain y definiciones” en la página 1459,contiene las tablas de Explain y cómo están definidas.

    – El “Apéndice L. Valores de registro de explicaciones” en la página 1495,describe la interacción entre sí de los valores de registro especialesCURRENT EXPLAIN MODE y CURRENT EXPLAIN SNAPSHOT y losmandatos PREP y BIND.

    – El “Apéndice M. Ejemplo de recurrencia: Lista de material” en lapágina 1499, contiene un ejemplo de una consulta recursiva.

    – El “Apéndice N. Tablas de excepciones” en la página 1505, contieneinformación sobre tablas creadas por el usuario que se utilizan con lasentencia SET INTEGRITY.

    2 Consulta de SQL

  • – El “Apéndice O. Consideraciones acerca de EUC de japonés y de chinotradicional” en la página 1511, lista las consideraciones cuando se utilizanlos juegos de caracteres EUC.

    – El “Apéndice P. Especificaciones BNF para los enlaces de datos” en lapágina 1521, contiene las especificaciones en formato BNF para valoresDATALINK.

    El Volumen 2 contiene las secciones siguientes:v El “Capítulo 6. Sentencias de SQL” en la página 533, contiene diagramas de

    sintaxis, descripciones semánticas, normas y ejemplos de todas lassentencias de SQL.

    v El “Capítulo 7. Sentencias de control de SQL” en la página 1209, contienediagramas de sintaxis, descripciones semánticas, normas y ejemplos desentencias de procedimiento de SQL.

    Lectura de los diagramas de sintaxis

    En este manual, la sintaxis se describe utilizando la estructura definida de lasiguiente manera:

    Lea los diagramas de sintaxis de izquierda a derecha y de arriba a abajo,siguiendo la línea.

    El símbolo ÊÊ─── indica el inicio de una sentencia.

    El símbolo ───Ê indica que la sintaxis de la sentencia continúa en la líneasiguiente.

    El símbolo Ê─── indica que continúa la sentencia de la línea anterior.

    El símbolo ──ÊÍ indica el final de una sentencia.

    Los elementos necesarios aparecen en la línea horizontal (la línea principal).

    ÊÊ SENTENCIA elemento necesario ÊÍ

    Los elementos opcionales aparecen debajo de la línea principal.

    ÊÊ SENTENCIAelemento opcional

    ÊÍ

    Capítulo 1. Introducción 3

  • Si aparece un elemento opcional por encima de la línea principal, dichoelemento no tiene ningún efecto en la ejecución de la sentencia y sólo seutiliza para una lectura más sencilla.

    ÊÊ SENTENCIAelemento opcional

    ÊÍ

    Si puede elegir entre dos o más elementos, aparecen en una pila.

    Si debe elegir uno de los elementos, un elemento de la pila aparece en la rutaprincipal.

    ÊÊ SENTENCIA opción1 necesariaopción2 necesaria

    ÊÍ

    Si se puede elegir no seleccionar ninguno de los elementos, toda la pilaaparece por debajo de la línea principal.

    ÊÊ SENTENCIAopción1 opcionalopción2 opcional

    ÊÍ

    Si uno de los elementos es el valor por omisión, aparecerá por encima de lalínea principal y el resto de las opciones se mostrarán por debajo.

    ÊÊ SENTENCIAopción por omisión

    opción opcionalopción opcional

    ÊÍ

    Una flecha que vuelve a la izquierda, por encima de la línea principal, indicaun elemento que se puede repetir. En este caso, los elementos repetidos debenir separados por uno o varios espacios en blanco.

    ÊÊ SENTENCIA » elemento repetible ÊÍ

    Si la flecha de repetición contiene una coma, debe separar los elementosrepetidos con una coma.

    4 Consulta de SQL

  • ÊÊ SENTENCIA »

    ,

    elemento repetible ÊÍ

    Una flecha de repetición por encima de una pila indica que puede elegir másde una opción de entre los elementos apilados o repetir una sola opción.

    Las palabras clave aparecen en mayúsculas (por ejemplo, FROM). Debenescribirse exactamente igual a como aparecen en la sintaxis. Las variablesaparecen en minúsculas (por ejemplo, nombre-columna). Representan nombressuministrados por el usuario o valores de la sintaxis.

    Si aparecen signos de puntuación, paréntesis, operadores aritméticos u otrossímbolos, debe entrarlos como parte de la sintaxis.

    A veces, una sola variable representa un conjunto de varios parámetros. Porejemplo, en el diagrama siguiente, la variable bloque-parámetros se puedesustituir por cualquiera de las interpretaciones del diagrama cuya cabecera esbloque-parámetros:

    ÊÊ SENTENCIA bloque-parámetros ÊÍ

    bloque-parámetros:

    parámetro1parámetro2 parámetro3

    parámetro4

    Los segmentos adyacentes que aparecen entre “puntos grandes” (*) sepueden especificar en cualquier secuencia.

    ÊÊ SENTENCIA elemento1 * elemento2 * elemento3 * elemento4 ÊÍ

    El diagrama anterior muestra que el elemento2 y el elemento3 se puedenespecificar en cualquier orden. Son válidos los dos diagramas siguientes:SENTENCIA elemento1 elemento2 elemento3 elemento4SENTENCIA elemento1 elemento3 elemento2 elemento4

    Capítulo 1. Introducción 5

  • Convenios utilizados en este manual

    Esta sección especifica algunos convenios que se utilizan coherentemente eneste manual.

    Condiciones de errorUna condición de error se indica en el texto del manual listando entreparéntesis el SQLSTATE asociado al error. Por ejemplo: Una signaturaduplicada genera un error SQL (SQLSTATE 42723).

    Convenios de resaltadoSe utilizan los siguientes convenios en este manual.

    Negrita Indica mandatos, palabras clave y otros elementos cuyos nombresestán predefinidos por el sistema.

    Cursiva Indica una de las siguientes circunstancias:v Nombres o valores (variables) que debe suministrar el usuariov Énfasis generalv La presentación de un término nuevov Una referencia a otra fuente de información.

    Monoespaciado Indica una de las siguientes circunstancias:v Archivos o directoriosv Información que se indica al usuario que escriba en un indicador

    de mandatos o en una ventana.v Ejemplos de valores de datos específicosv Ejemplos de texto similar a lo que puede mostrar el sistemav Ejemplos de mensajes del sistema.

    Documentación relacionada para este manual

    Las siguientes publicaciones pueden ser útiles en la preparación deaplicaciones:v Administration Guide

    – Contiene la información necesaria para diseñar, implantar y manteneruna base de datos a la que se va a acceder de forma local o en unentorno de cliente/servidor.

    v Application Development Guide– Explica el proceso de desarrollo de aplicaciones y la forma de codificar,

    compilar y ejecutar programas de aplicación que utilizan SQL intercaladoy API para acceder a la base de datos.

    v DB2 Universal Database for iSeries SQL Reference– Este manual define el Lenguaje de consulta estructurada (SQL) soportado

    por DB2 Query Manager y SQL Development Kit en iSeries (AS/400).Contiene información de consulta para las tareas de administración delsistema, administración de la base de datos, programación de

    6 Consulta de SQL

  • aplicaciones y operación. Este manual incluye sintaxis, notas acerca deluso, palabras claves y ejemplos para cada una de las sentencias de SQLutilizadas en sistemas iSeries (AS/400) que ejecutan DB2.

    v DB2 Universal Database for OS/390 and z/OS SQL Reference– Este manual define el Lenguaje de consulta estructurada (SQL) utilizado

    en DB2 para z/OS (OS/390). Este manual proporciona formularios deconsulta, sentencias de SQL, sentencias de procedimientos de SQL,límites de DB2, SQLCA, SQLDA, tablas de catálogos y palabrasreservadas de SQL para sistemas z/OS (OS/390) que ejecutan DB2.

    v DB2 Spatial Extender Guía del usuario y de consulta– Describe cómo escribir aplicaciones para crear y utilizar un sistema de

    información geográfica (geographic information system, GIS). Para creary utilizar un GIS es necesario proporcionar una base de datos conrecursos y luego consultar los datos para obtener información, tal comoubicaciones, distancias y distribuciones dentro de zonas geográficas.

    v Consulta de SQL de IBM– Este manual contiene todos los elementos comunes del SQL que están

    distribuidos por toda la biblioteca IBM de productos de base de datos.Proporciona límites y normas que pueden servir de ayuda en lapreparación de programas portables que utilicen bases de datos IBM.Proporciona una lista de extensiones SQL e incompatibilidades entre lossiguientes estándares y productos: SQL92E, XPG4-SQL, IBM-SQL y losproductos de base de datos relacionales IBM.

    v American National Standard X3.135-1992, Database Language SQL– Contiene la definición estándar ANSI del SQL.

    v ISO/IEC 9075:1992, Database Language SQL– Contiene la definición del SQL proporcionada por la norma 1992 de ISO.

    v ISO/IEC 9075-2:1999, Database Language SQL -- Part 2: Foundation(SQL/Foundation)

    – Contiene una gran parte de la definición del SQL proporcionada por lanorma 1999 de ISO.

    v ISO/IEC 9075-4:1999, Database Language SQL -- Part 4: Persistent StoredModules (SQL/PSM)

    – Contiene la definición de las sentencias de control de los procedimientosSQL, tal como aparece en la norma 1999 de ISO.

    v ISO/IEC 9075-5:1999, Database Language SQL -- Part 4: Host Language Bindings(SQL/Bindings)

    – Contiene la definición de los enlaces de lenguaje principal y del SQLdinámico, tal como aparece en la norma 1999 de ISO.

    Capítulo 1. Introducción 7

  • 8 Consulta de SQL

  • Capítulo 2. Conceptos

    Este capítulo proporciona una visión general de los conceptos utilizados máscomúnmente en el Lenguaje de consulta estructurada (SQL). La intención deeste capítulo es proporcionar una visión de alto nivel de los conceptos. Lainformación de consulta que le sigue proporciona una visión más detallada.

    Definiciones de base de datos relacional

    Una base de datos relacional es una base de datos que se trata como un conjuntode tablas y se manipula de acuerdo con el modelo de datos relacional.Contiene un conjunto de objetos que se utilizan para almacenar y gestionarlos datos, así como para acceder a los mismos. Las tablas, vistas, índices,funciones, desencadenantes y paquetes son ejemplos de estos objetos.

    Una base de datos relacional particionada es una base de datos relacional en laque los datos se gestionan repartidos en múltiples particiones (tambiéndenominadas nodos). Esta separación de los datos entre particiones estransparente para los usuarios de la mayoría de sentencias de SQL. Sinembargo, algunas sentencias DDL (Lenguaje de definición de datos)1 tienen encuenta la información sobre particiones (por ejemplo, CREATENODEGROUP).

    Una base de datos federada es una base de datos relacional en la que los datosestán almacenados en varias fuentes de datos (tales como bases de datosrelacionales separadas). Los datos son tratados como si pertenecieran a unasola gran base de datos y se pueden acceder mediante las consultas SQLnormales. Los cambios en los datos se pueden dirigir explícitamente hacia lafuente datos apropiada. Vea “Sistemas federados DB2” en la página 56 paraobtener más información.

    Lenguaje de consulta estructurada (SQL)

    SQL es un lenguaje estandarizado que sirve para definir y manipular los datosde una base de datos relacional. De acuerdo con el modelo relacional dedatos, la base de datos se crea como un conjunto de tablas, las relaciones serepresentan mediante valores en las tablas y los datos se recuperanespecificando una tabla de resultados que puede derivarse de una o mástablas base.

    1. Lenguaje de definición de datos (Data Definition Language - DDL) es el subconjunto de sentencias de SQLutilizadas para describir las relaciones de los datos en una base de datos.

    © Copyright IBM Corp. 1993, 2001 9

  • Las sentencias de SQL las ejecuta un gestor de bases de datos. Una de lasfunciones del gestor de bases de datos es transformar la especificación de unatabla resultante en una secuencia de operaciones internas que optimicen larecuperación de datos. Esta transformación se produce en dos fases:preparación y enlace lógico.

    Todas las sentencias de SQL ejecutables deben prepararse antes de suejecución. El resultado de esta preparación es el formato operativo o ejecutablede la sentencia. El método de preparación de una sentencia de SQL y lapersistencia de su formato operativo distinguen el SQL estático del SQLdinámico.

    Autorización y privilegios

    Una autorización permite a un usuario o grupo realizar una tarea generalcomo, por ejemplo, la conexión a una base de datos, la creación de tablas o laadministración de un sistema. Un privilegio da a un usuario o a un grupo elderecho a acceder a un objeto específico de la base de datos de una maneraespecificada.

    El gestor de bases de datos necesita que un usuario esté específicamenteautorizado, ya sea implícita o explícitamente, para utilizar cada función debase de datos necesaria para que ese usuario realice una tarea específica. Lasautorizaciones o los privilegios explícitos se otorgan al usuario(GRANTEETYPE de U). Las autorizaciones o los privilegios implícitos seotorgan a un grupo al que pertenece el usuario (GRANTEETYPE de G). Deeste modo, para crear una tabla, un usuario debe tener autorización para creartablas; para modificar una tabla, un usuario debe tener autorización paramodificar la tabla y así sucesivamente.

    10 Consulta de SQL

  • La persona o personas con autorización de administrador se encargan de latarea de controlar el gestor de bases de datos y son responsables de laseguridad e integridad de los datos. Controlan quién va a tener acceso algestor de bases de datos y hasta qué punto tiene acceso cada usuario.

    El gestor de bases de datos proporciona dos autorizaciones de administración:v SYSADM - autorización de administrador del sistemav DBADM - autorización de administrador de bases de datosEl gestor de bases de datos también proporciona dos autorizaciones de controldel sistema:v SYSCTRL - autorización de control del sistemav SYSMAINT - autorización de mantenimiento del sistema

    La autorización SYSADM es el nivel más alto de autorización y tiene controlsobre todos los recursos que crea y mantiene el gestor de bases de datos. Laautorización SYSADM incluye todos los privilegios de DBADM, SYSCTRL ySYSMAINT, así como la autorización para otorgar o revocar autorizacionesDBADM.

    La autorización DBADM es la autorización de administración específica parauna sola base de datos. Esta autorización incluye privilegios para crearobjetos, emitir mandatos de la base de datos y acceder a los datos de sustablas mediante sentencias de SQL. La autorización DBADM también incluyela autorización para otorgar o revocar el privilegio CONTROL y privilegiosindividuales.

    Figura 1. Jerarquía de autorizaciones y privilegios

    Capítulo 2. Conceptos 11

  • La autorización SYSCTRL corresponde al nivel más alto de autorización decontrol del sistema y sólo se aplica a las operaciones que afectan a losrecursos del sistema. No permite el acceso directo a los datos. Estaautorización incluye privilegios para crear, actualizar o eliminar una base dedatos, detener una instancia o base de datos y eliminar o crear una espacio detablas.

    La autorización SYSMAINT es el segundo nivel de autorización de control delsistema. Un usuario con autorización SYSMAINT puede realizar operacionesde mantenimiento en todas las bases de datos asociadas a una instancia. Nopermite el acceso directo a los datos. Esta autorización incluye privilegios paraactualizar archivos de configuración de la base de datos, realizar una copia deseguridad de una base de datos o un espacio de tablas, restaurar una base dedatos existente y supervisar una base de datos.

    Las autorizaciones de base de datos se aplican a aquellas actividades que unadministrador ha permitido realizar a un usuario que no se aplican a unainstancia específica de un objeto de base de datos. Por ejemplo, puedeotorgarse a un usuario la autorización para crear paquetes pero no para creartablas.

    Los privilegios se aplican aquellas actividades que un administrador o unpropietario de un objeto han permitido que un usuario pudiese realizar enobjetos de la base de datos. Los usuarios con privilegios pueden crear objetos,aunque se les aplican algunas restricciones, a diferencia de un usuario conuna autorización como SYSADM o DBADM. Por ejemplo, un usuario puedetener el privilegio para crear una vista en una tabla pero no undesencadenante en la misma tabla. Los usuarios con privilegios tienen accesoa los objetos de los que son propietarios y pueden transmitir privilegios sobresus propios objetos a otros usuarios utilizando la sentencia GRANT.

    El privilegio CONTROL permite al usuario acceder a un objeto de base dedatos específico del modo necesario y otorgar (GRANT) y revocar (REVOKE)privilegios a otros usuarios sobre ese objeto. Para conceder el privilegioCONTROL se necesita la autorización DBADM.

    Los privilegios individuales y las autorizaciones de bases de datos permitenuna función específica pero no incluyen el derecho a otorgar los mismosprivilegios o autorizaciones a otros usuarios. El derecho para otorgarprivilegios de tabla, vista o esquema a otros puede ampliarse a otros usuariosutilizando WITH GRANT OPTION en la sentencia GRANT.

    12 Consulta de SQL

  • Esquemas

    Un esquema es un conjunto de objetos con nombre. Los esquemasproporcionan una clasificación lógica de los objetos de la base de datos. Unesquema puede contener tablas, vistas, apodos, desencadenantes, funciones,paquetes y otros objetos.

    Un esquema también es un objeto en la base de datos. Se crea explícitamenteutilizando la sentencia CREATE SCHEMA con el usuario actual registradocomo propietario del esquema. También se puede crear implícitamente cuandose crea otro objeto, a condición de que el usuario tenga la autorizaciónIMPLICIT_SCHEMA.

    El nombre de esquema se utiliza como la parte más a la izquierda de un nombrede objeto de dos partes. Si el objeto se califica específicamente con un nombrede esquema al crearse, se asigna el objeto a dicho esquema. Si no se especificaningún nombre de esquema al crear el objeto, se utiliza el nombre de esquemapor omisión.

    Por ejemplo, un usuario con autorización DBADM crea un esquema llamadoC para el usuario A:

    CREATE SCHEMA C AUTHORIZATION A

    El usuario A puede emitir la siguiente sentencia para crear una tabla llamadaX en el esquema C:

    CREATE TABLE C.X (COL1 INT)

    Control de la utilización de esquemasCuando se crea una base de datos, todos los usuarios tienen la autorizaciónIMPLICIT_SCHEMA. Esto permite a cualquier usuario crear objetos encualquier esquema que aún no exista. Un esquema creado implícitamentepermite a cualquier usuario crear otros objetos en dicho esquema. Laposibilidad de crear seudónimos, tipos diferenciados, funciones ydesencadenantes se amplía a los esquemas creados implícitamente. Losprivilegios por omisión de un esquema creado implícitamente proporcionancompatibilidad con las versiones anteriores.

    Si se revoca la autorización IMPLICIT_SCHEMA de PUBLIC, los esquemas secrean explícitamente utilizando la sentencia CREATE SCHEMA o los creanimplícitamente los usuarios (por ejemplo, los que tienen autorizaciónDBADM) a los que se otorga la autorización IMPLICIT_SCHEMA. Aunque larevocación de la autorización IMPLICIT_SCHEMA de PUBLIC incrementa elcontrol sobre la utilización de los nombres de esquema, también puedeproducir errores de autorización en aplicaciones existentes cuando estasaplicaciones intentan crear objetos.

    Capítulo 2. Conceptos 13

  • Los esquemas también tienen privilegios asociados, que permiten alpropietario del esquema controlar qué usuarios tienen privilegio para crear,modificar y eliminar objetos del esquema. A un propietario de esquema se ledan inicialmente todos estos privilegios en el esquema, con la posibilidad deotorgarlos a otros usuarios. Un esquema creado implícitamente es depropiedad del sistema y a todos los usuarios se les proporciona inicialmente elprivilegio de crear objetos en dicho esquema. Un usuario con lasautorizaciones DBADM o SYSADM puede cambiar los privilegios que poseenlos usuarios en cualquier esquema. Por consiguiente, se puede controlar elacceso para crear, modificar y eliminar objetos en cualquier esquema (inclusouno creado implícitamente).

    Tablas

    Las tablas son estructuras lógicas mantenidas por el gestor de bases de datos.Las tablas están formadas por columnas y filas. Las filas de una tabla no estánnecesariamente ordenadas (el orden lo determina el programa de aplicación).En la intersección de cada columna con una fila hay un elemento de datosespecífico denominado valor. Una columna es un conjunto de valores delmismo tipo o de uno de sus subtipos. Una fila es una secuencia de valoresordenados de forma que el valor n sea el valor de la columna n de la tabla.

    Una tabla base se crea con la sentencia CREATE TABLE y se utiliza paraconservar los datos habituales de los usuarios. Una tabla resultante es unconjunto de filas que el gestor de bases de datos selecciona o genera a partirde una o varias tablas base para satisfacer una consulta.

    Una tabla de resumen es una tabla definida por una consulta que se utilizatambién para determinar los datos de la tabla. Las tablas de resumen sepueden utilizar para mejorar el rendimiento de las consultas. Si el gestor debases de datos determina que se puede resolver una parte de una consultautilizando una tabla de resumen, el gestor de bases de datos puede volver aescribir la consulta para utilizar la tabla de resumen. Esta decisión se basa enlos valores de configuración de base de datos tales como los registrosespeciales CURRENT REFRESH AGE y CURRENT QUERY OPTIMIZATION.

    Una tabla puede definir el tipo de datos de cada columna por separado obasar los tipos de las columnas en los atributos de un tipo estructuradodefinido por el usuario. Esto se denomina tabla con tipo. Un tipo estructuradodefinido por el usuario puede formar parte de una jerarquía de tipos. Unsubtipo hereda los atributos de su supertipo. De manera similar, una tabla contipo puede formar parte de una jerarquía de tablas. Una subtabla hereda lascolumnas de su supertabla. Tenga en cuenta que el término subtipo se aplica aun tipo estructurado definido por el usuario y a todos los tipos estructuradosdefinidos por el usuario que están por debajo del mismo en la jerarquía detipos. Un subtipo correspondiente de un tipo estructurado T es un tipo

    14 Consulta de SQL

  • estructurado por debajo de T en la jerarquía de tipos. De forma similar, eltérmino subtabla se aplica a una tabla con tipo y a todas las tablas con tipoque están por debajo de la misma en la jerarquía de tablas. Una subtablacorrespondiente de una tabla T es una tabla que está por debajo de T en lajerarquía de tablas.

    Una tabla temporal declarada se crea mediante una sentencia DECLAREGLOBAL TEMPORARY TABLE y se utiliza para contener datos temporalespara una aplicación individual. Esta tabla se elimina implícitamente cuando laaplicación se desconecta de la base de datos.

    Vistas

    Una vista proporciona una manera alternativa de consultar los datos de una ovarias tablas.

    Una vista es una especificación de una tabla resultante a la que se le da unnombre. La especificación es una sentencia SELECT que se ejecuta siempreque se hace referencia a la vista en una sentencia de SQL. Puede considerarque una vista tiene columnas y filas igual que una tabla base. Para efectuaruna recuperación, se pueden utilizar todas las vistas como si fueran tablasbase. El hecho de que una vista pueda utilizarse en una operación deinserción, actualización o supresión dependerá de su definición, tal como seexplica en la descripción de la sentencia CREATE VIEW. Vea “CREATEVIEW” en la página 957 para obtener más información.

    Cuando la columna de una vista se obtiene directamente de una columna deuna tabla base, esa columna hereda todas las restricciones aplicables a lacolumna de la tabla base. Por ejemplo, si una vista incluye una clave foráneade su tabla base, las operaciones INSERT y UPDATE que utilicen dicha vistaestarán sujetas a las mismas restricciones de referencia que la tabla base.Asimismo, si la tabla base de una vista es una tabla padre, las operacionesDELETE y UPDATE que utilicen dicha vista estarán sujetas a las mismasreglas que las operaciones DELETE y UPDATE de la tabla base.

    Una vista puede obtener el tipo de datos de cada columna de la tablaresultante o basar los tipos para las columnas en los atributos de un tipoestructurado definido por el usuario. Esta vista se denomina vista con tipo. Demanera similar a una tabla con tipo, una vista con tipo puede formar parte deuna jerarquía de vistas. Una subvista hereda las columnas de su supervista. Eltérmino subvista se aplica a una vista con tipo y a todas las vistas con tipo queestán por debajo de la misma en la jerarquía de vistas. Una subvistacorrespondiente de una vista V es una vista por debajo de V en la jerarquía devistas con tipo.

    Capítulo 2. Conceptos 15

  • Una vista puede quedar no operativa (por ejemplo, si se elimina la tablabase); si ocurre esto, la vista ya no estará disponible para las sentencias deSQL.

    Seudónimos

    Un seudónimo es un nombre alternativo para una tabla o una vista. Se puedeutilizar para hacer referencia a una tabla o vista en aquellos casos en los quese puede hacer referencia a una tabla o vista existente. Una seudónimo nopuede utilizarse en todos los contextos. Por ejemplo, no puede utilizarse en lacondición de comprobación de una restricción de comprobación. Unseudónimo tampoco puede hacer referencia a una tabla temporal declarada.

    Al igual que las tablas y las vistas, un seudónimo puede crearse, eliminarse ytener comentarios asociados. Sin embargo, a diferencia de las tablas, losseudónimos pueden hacerse referencia entre sí en un proceso llamadoencadenamiento. Los seudónimos son nombres referidos públicamente, por loque no es necesaria ninguna autorización ni privilegio especial parautilizarlos. Sin embargo, para acceder a las tablas y vistas a las que hacereferencia el seudónimo es necesario tener la autorización apropiada para elcontexto actual.

    Además de los seudónimos de la tabla, existen otros tipos de seudónimoscomo, por ejemplo, los seudónimos de base de datos y los de red. También sepueden crear seudónimos para los apodos (vistas o tablas de datos ubicadas ensistemas federados).

    Consulte el apartado “Seudónimos” en la página 78 y el apartado “CREATEALIAS” en la página 670 para obtener más información sobre los seudónimos.

    Índices

    Un índice es un conjunto ordenado de punteros para filas de una tabla base.Cada índice se basa en los valores de los datos de una o varias columnas dela tabla. Un índice es un objeto que está separado de los datos de la tabla.Cuando se crea un índice, el gestor de bases de datos crea esta estructura y lamantiene automáticamente.

    El gestor de bases de datos utiliza los índices para:v Mejorar el rendimiento. En la mayoría de los casos, el acceso a los datos es

    más rápido que sin índices.No puede crearse un índice para una vista. Sin embargo, un índice creadopara una tabla en la que se basa una vista puede mejorar a veces elrendimiento de las operaciones en la vista.

    16 Consulta de SQL

  • v Asegurar la exclusividad. Una tabla con un índice de unicidad no puedetener filas con claves idénticas.

    Claves

    Una clave es un conjunto de columnas que se pueden utilizar para identificaro para acceder a una fila o filas determinadas. La clave viene identificada enla descripción de una tabla, índice o restricción de referencia. Una mismacolumna puede formar parte de más de una clave.

    Una clave compuesta de más de una columna se denomina una clavecompuesta. En una tabla con una clave compuesta, el orden de las columnasdentro de la clave compuesta no está restringido por el orden de las columnasen la tabla. El valor de una clave compuesta indica un valor compuesto. Así,por ejemplo la regla “el valor de la clave foránea debe ser igual al valor de laclave primaria” significa que cada componente del valor de la clave foráneadebe ser igual al componente del valor correspondiente de la clave primaria.

    Claves de unicidadUna clave de unicidad es una clave restringida de manera que no puede tenerdos valores iguales. Las columnas de una clave de unicidad no puedencontener valores nulos. El gestor de bases de datos impone la restriccióndurante la ejecución de cualquier operación que cambie los valores de losdatos como, por ejemplo, INSERT o UPDATE. El mecanismo utilizado paraimponer la restricción se denomina índice de unicidad. De este modo, cadaclave de unicidad es una clave de un índice de unicidad. También se dice quedichos índices tienen el atributo UNIQUE. Vea “Restricciones de unicidad” enla página 18 para obtener una descripción más detallada.

    Claves primariasUna clave primaria es un caso especial de clave de unicidad. Una tabla nopuede tener más de una clave primaria. Consulte el apartado “Claves deunicidad” para obtener una descripción más detallada.

    Claves foráneasUna clave foránea es una clave que se especifica en la definición de unarestricción de referencia. Consulte el apartado “Restricciones de referencia” enla página 19 para obtener una descripción más detallada.

    Claves de particionamientoUna clave de particionamiento es una clave que forma parte de la definición deuna tabla de una base de datos particionada. La clave de particionamiento seutiliza para determinar la partición en la que se almacena la fila de datos. Sise define una clave de particionamiento, las claves de unicidad y las clavesprimarias deben incluir las mismas columnas que la clave departicionamiento, pero pueden tener columnas adicionales. Una tabla nopuede tener más de una clave de particionamiento.

    Capítulo 2. Conceptos 17

  • Restricciones

    Una restricción es una regla que impone el gestor de bases de datos.

    Hay tres tipos de restricciones:v Una restricción de unicidad es una regla que prohíbe los valores duplicados

    en una o varias columnas de una tabla. Las restricciones de unicidad a lasque se da soporte son la clave de unicidad y la clave primaria. Por ejemplo,se puede definir una restricción de unicidad en el identificador deproveedor de la tabla de proveedores para asegurarse de que no se da elmismo identificador de proveedor a dos proveedores.

    v Una restricción de referencia es una regla lógica acerca de los valores de unao varias columnas de una o varias tablas. Por ejemplo, un conjunto detablas que comparte información sobre los proveedores de una empresa.Ocasionalmente, el nombre de un proveedor cambia. Puede definir unarestricción de referencia que indique que el ID del proveedor de una tabladebe coincidir con un ID de proveedor de la información de proveedor.Esta restricción impide que se realicen inserciones, actualizaciones osupresiones, que de lo contrario, harán que falte información del proveedor.

    v Una restricción de comprobación de tabla establece restricciones en los datosque se añaden a una tabla específica. Por ejemplo, la restricción puederestringir el nivel salarial de un empleado para que no sea inferior a 70.000pts siempre que se añadan o se actualicen datos salariales en una tabla quecontiene información de personal.

    Las restricciones de referencia y de comprobación de tabla pueden activarse ydesactivarse. Normalmente, la aplicación de una restricción se desactivacuando se cargan grandes cantidades de datos en la base de datos. Losdetalles sobre la activación o desactivación de las restricciones se describen enel apartado “SET INTEGRITY” en la página 1168.

    Restricciones de unicidadUna restricción de unicidad es la regla que establece que los valores de unaclave sólo son válidos si son exclusivos en una tabla. Las restricciones deunicidad son opcionales y pueden definirse en las sentencias CREATE TABLEo ALTER TABLE utilizando la cláusula PRIMARY KEY o la cláusula UNIQUE.Las columnas especificadas en una restricción de unicidad deben definirsecomo NOT NULL. El gestor de bases de datos utiliza un índice de unicidadpara forzar la unicidad de la clave durante los cambios en las columnas de larestricción de unicidad.

    Una tabla puede tener un número arbitrario de restricciones de unicidad ycomo máximo una restricción de unicidad definida como la clave primaria.Una tabla no puede tener más de una restricción de unicidad en el mismoconjunto de columnas.

    18 Consulta de SQL

  • Una restricción de unicidad a la que hace referencia la clave foránea de unarestricción de referencia se denomina clave padre.

    Cuando se define una restricción de unicidad en una sentencia CREATETABLE, el gestor de bases de datos crea automáticamente un índice deunicidad y lo designa como un índice principal o de unicidad necesario parael sistema.

    Cuando se define una restricción de unicidad en una sentencia ALTER TABLEy existe un índice en las mismas columnas, dicho índice se designa como deunicidad y necesario para el sistema. Si no existe tal índice, el gestor de basesde datos crea automáticamente el índice de unicidad y lo designa como uníndice principal o de unicidad necesario para el sistema.

    Observe que existe una distinción entre la definición de una restricción deunicidad y la creación de un índice de unicidad. Aunque ambos impongan laexclusividad, un índice de unicidad permite la existencia de columnas quepueden contener valores nulos y generalmente no puede utilizarse como unaclave padre.

    Restricciones de referenciaLa integridad de referencia es el estado de una base de datos en la que todos losvalores de todas las claves foráneas son válidos. Una clave foránea es unacolumna o un conjunto de columnas de una tabla cuyos valores debencoincidir obligatoriamente con, como mínimo, un valor de una clave primariao de una clave de unicidad de una fila de su tabla padre. Una restricción dereferencia es la regla que establece que los valores de la clave foránea sólo sonválidos si se cumple una de estas condiciones:v Aparecen como valores de una clave padre.v Algún componente de la clave foránea es nulo.

    La tabla que contiene la clave padre se denomina la tabla padre de larestricción de referencia y se dice que la tabla que contiene la clave foránea esdependiente de dicha tabla.

    Las restricciones de referencia son opcionales y pueden definirse en sentenciasCREATE TABLE y ALTER TABLE. Las restricciones de referencia las imponeel gestor de bases de datos durante la ejecución de las sentencias INSERT,UPDATE, DELETE, ALTER TABLE, ADD CONSTRAINT y SET INTEGRITY.Esta imposición se hace efectiva al finalizar la sentencia.

    Las restricciones de referencia con una regla de supresión o actualización deRESTRICT se imponen antes que el resto de restricciones de referencia. Lasrestricciones de referencia con una regla de supresión o actualización de NO

    Capítulo 2. Conceptos 19

  • ACTION tienen un funcionamiento igual que RESTRICT, en la mayoría decasos. Sin embargo, en determinadas sentencias de SQL pueden existirdiferencias.

    Tenga en cuenta que la integridad de referencia, las restricciones decomprobación y los desencadenantes pueden combinarse en la ejecución. Paraobtener más información sobre la combinación de estos tres elementos,consulte el “Apéndice J. Interacción de desencadenantes y restricciones” en lapágina 1455.

    En las reglas de integridad de referencia se utilizan los conceptos yterminología siguientes:

    Clave padreClave primaria o clave de unicidad de una restricción de referencia.

    Fila padreFila que tiene, como mínimo, una fila dependiente.

    Tabla padreTabla que contiene la clave padre de una restricción de referencia. Unatabla puede definirse como padre en un número arbitrario derestricciones de referencia. Una tabla que es padre en una restricciónde referencia también puede ser dependiente de una restricción dereferencia.

    Tabla dependienteTabla que contiene como mínimo una restricción de referencia en sudefinición. Una tabla puede definirse como dependiente en unnúmero arbitrario de restricciones de referencia. Una tabla que esdependiente en una restricción de referencia también puede ser padrede una restricción de referencia.

    Tabla descendienteUna tabla es descendiente de la tabla T si es dependiente de T odescendiente de una tabla dependiente de T.

    Fila dependienteFila que tiene, como mínimo, una fila padre.

    Fila descendienteUna fila es descendiente de la fila r si es dependiente de r odescendiente de una dependiente de r.

    Ciclo de referenciaConjunto de restricciones de referencia en el que cada tabla delconjunto es descendiente de sí misma.

    Fila de autorreferenciaFila que es padre de sí misma.

    20 Consulta de SQL

  • Tabla autorreferenteTabla que es padre y dependiente en la misma restricción dereferencia. La restricción se denomina restricción de autorreferencia.

    Regla de inserciónLa regla de inserción de una restricción de referencia es la que establece queun valor de inserción que no sea nulo de la clave foránea debe coincidir conalgún valor de la clave padre de la tabla padre. El valor de la clave foráneacompuesta será nulo si algún componente del valor es nulo. Es una reglaimplícita cuando se especifica una clave foránea.

    Regla de actualizaciónLa regla de actualización de una restricción de referencia se especifica aldefinir la restricción de referencia. Las opciones son NO ACTION yRESTRICT. La regla de actualización se aplica al actualizar una fila de la tablapadre o una fila de la tabla dependiente.

    En el caso de una fila padre, cuando se actualiza un valor de una columna dela clave padre, se aplican estas reglas:v Si cualquier fila de la tabla dependiente coincide con el valor original de la

    clave, se rechaza la actualización cuando la regla de actualización esRESTRICT.

    v Si cualquier fila de la tabla dependiente no tiene una clave padrecorrespondiente cuando se completa la sentencia de actualización(excluyendo los desencadenantes AFTER), se rechaza la actualizacióncuando la regla de actualización es NO ACTION.

    En el caso de una fila dependiente, la regla de actualización NO ACTION esimplícita cuando se especifica una clave foránea. NO ACTION significa queun valor de actualización que no sea nulo de una clave foránea debe coincidircon algún valor de la clave padre de la tabla padre cuando se complete lasentencia de actualización.

    El valor de la clave foránea compuesta será nulo si algún componente delvalor es nulo.

    Regla de supresiónLa regla de supresión de una restricción de referencia se especifica al definirla restricción de referencia. Las opciones son NO ACTION, RESTRICT,CASCADE o SET NULL. SET NULL sólo puede especificarse si hay algunacolumna de la clave foránea que permita valores nulos.

    La regla de supresión de una restricción de referencia se aplica al suprimiruna fila de la tabla padre. Para ser más exactos, esta regla se aplica cuandouna fila de la tabla padre es el objeto de una operación de supresión o desupresión propagada (definida a continuación) y dicha fila tiene dependientes

    Capítulo 2. Conceptos 21

  • en la tabla dependiente de la restricción de referencia. Examinemos unejemplo donde P es la tabla padre, D es la tabla dependiente y p es una filapadre que es el objeto de una operación de supresión o de supresiónpropagada. La regla de supresión funciona del modo siguiente:v Para RESTRICT o NO ACTION, se produce un error y no se suprime

    ninguna fila.v Para CASCADE, la operación de supresión se propaga a los dependientes

    de p en la tabla D.v Para SET NULL, cada columna con posibilidad de nulos de la clave foránea

    de cada dependiente de p en la tabla D se establece en nulo.

    Cada restricción de referencia en la que una tabla sea padre tiene su propiaregla de supresión, y todas las reglas de supresión aplicables se utilizan paradeterminar el resultado de la operación de supresión. Así, una fila no puedesuprimirse si tiene dependientes en una restricción de referencia con una reglade supresión RESTRICT o NO ACTION o la supresión se propaga en cascadaa cualquiera de sus descendientes que sean dependientes en una restricción dereferencia con la regla de supresión RESTRICT o NO ACTION.

    La supresión de una fila de la tabla padre P implica a otras tablas y puedeafectar a las filas de dichas tablas:v Si la tabla D es dependiente de P y la regla de supresión es RESTRICT o

    NO ACTION, D se implicará en la operación pero no se verá afectada porla misma.

    v Si D es dependiente de P y la regla de supresión es SET NULL, D estaráimplicada en la operación y las filas de D podrán actualizarse durante laoperación.

    v Si D es dependiente de P y la regla de supresión es CASCADE, D estaráimplicada en la operación y las filas de D podrán suprimirse durante laoperación.Si se suprimen filas de D, se dice que la operación de supresión en P sepropaga a D. Si D es también una tabla padre, las acciones descritas en estalista se aplican a su vez a los elementos dependientes de D.

    De cualquier tabla que pueda estar implicada en una operación de supresiónen P se dice que está conectada por supresión a P. Así, una tabla está conectadapor supresión a la tabla P si es dependiente de P o es dependiente de unatabla hacia la que se propagan en cascada operaciones de supresión desde P.

    Restricciones de comprobación de tablaUna restricción de comprobación de tabla es una regla que especifica los valorespermitidos en una o varias columnas de cada fila de una tabla. Unarestricción es opcional y puede definirse utilizando las sentencias de SQLCREATE TABLE y ALTER TABLE. La especificación de restricciones de

    22 Consulta de SQL

  • comprobación de tabla se realiza mediante una forma restringida de condiciónde búsqueda. Una de las restricciones consiste en que un nombre de columnade una restricción de comprobación de tabla de la tabla T debe identificar unacolumna de T.

    Una tabla puede tener un número arbitrario de restricciones de comprobaciónde tabla. Éstas se imponen cuando se inserta una fila en la tabla o se actualizauna fila de la tabla.

    Una restricción de comprobación de tabla se impone aplicando su condiciónde búsqueda en cada fila que se inserte o actualice. Si el resultado de lacondición de búsqueda es falso en cualquiera de las filas, se produce un error.

    Cuando hay una o varias restricciones de comprobación de tabla definidas enla sentencia ALTER TABLE para una tabla en la que existen datos, éstos secomprueban con la nueva condición antes de que se completesatisfactoriamente la sentencia ALTER TABLE. La tabla puede ponerse enestado pendiente de comprobación lo que permitirá que la sentencia ALTERTABLE se realice satisfactoriamente sin tener que comprobar los datos. Lasentencia SET INTEGRITY se utiliza para poner la tabla en estado pendientede comprobación. También se utiliza para reanudar la comparación de cadafila con la restricción.

    Nivel de aislamiento

    El nivel de aislamiento asociado con un proceso de aplicación define el grado deaislamiento de dicho proceso de aplicación respecto a otros procesos deaplicación que se ejecutan concurrentemente. Por consiguiente, el nivel deaislamiento de un proceso de aplicación especifica:v El grado al que las filas leídas y actualizadas por la aplicación están

    disponibles para otros procesos de aplicación que se ejecutanconcurrentemente.

    v El grado al que puede afectar a la aplicación la actividad de actualizaciónde otros procesos de aplicación que se ejecutan concurrentemente.

    El nivel de aislamiento se especifica como un atributo de un paquete y seaplica a los procesos de aplicación que hacen uso del paquete. El nivel deaislamiento se especifica en el proceso de preparación del proceso. En funcióndel tipo de bloqueo, limita o impide el acceso a los datos por parte deprocesos de aplicación concurrentes. Para obtener detalles sobre los diferentestipos y atributos de bloqueos específicos, consulte la publicaciónAdministration Guide. Las tablas temporales declaradas y sus filas no sebloquean, pues sólo pueden ser accedidas por la aplicación que declaró lastablas temporales. Por lo tanto, la información siguiente sobre el bloqueo y losniveles de aislamiento no es aplicable a las tablas temporales declaradas.

    Capítulo 2. Conceptos 23

  • El gestor de bases de datos da soporte a tres categorías generales de bloqueos:

    CompartimientoLimita los procesos de aplicación concurrentes a operaciones de sólolectura de los datos.

    ActualizaciónLimita los procesos de aplicación concurrentes a operaciones de sólolectura de los datos, siempre que dichos procesos no hayan declaradoque pueden actualizar la fila. El gestor de bases de datos supone queel proceso que consulta actualmente la fila puede actualizarla.

    ExclusividadEvita que los procesos de aplicación concurrentes accedan a los datosde cualquier modo, excepto los procesos de aplicación con un nivel deaislamiento de lectura no confirmada, que pueden leer los datos pero nomodificarlos. (Consulte el apartado “Lectura no confirmada (UR)” enla página 26.)

    El bloqueo se produce en la fila de la tabla base. Sin embargo, el gestor debases de datos puede sustituir múltiples bloqueos de filas por un solo bloqueode tabla. Esto se denomina escalada de bloqueos. Un proceso de aplicación tienegarantizado al menos el nivel mínimo de bloqueo solicitado.

    El gestor de bases de datos de DB2 Universal Database da soporte a cuatroniveles de aislamiento. Independientemente del nivel de aislamiento, el gestorde bases de datos coloca bloqueos de exclusividad en cada fila que se inserta,actualiza o suprime. Por lo tanto, los niveles de aislamiento aseguran que lasfilas que cambia el proceso de aplicación durante una unidad de trabajo nolas pueda modificar ningún otro proceso de aplicación hasta que la unidad detrabajo haya finalizado. Los niveles de aislamiento son:

    Lectura repetible (RR)El nivel de Lectura repetible asegura que:v Cualquier fila leída durante una unidad de trabajo2 no sea modificada por

    otros procesos de aplicación hasta que la unidad de trabajo se hayacompletado.3

    v Las filas modificadas por otro proceso de aplicación no se pueden leer hastaque dicho proceso de aplicación las confirme.

    2. Las filas se leen en la misma unidad de trabajo que la sentencia OPEN correspondiente. Consulte WITH HOLD enel apartado “DECLARE CURSOR” en la página 976.

    3. El uso de la cláusula WITH RELEASE opcional en la sentencia CLOSE significa que, si se vuelve a abrir el cursor,ya no se aplicará ninguna garantía respecto a las lecturas no repetibles y no se aplicarán ya lecturas fantasma aninguna fila a la que se haya accedido anteriormente.

    24 Consulta de SQL

  • El nivel de Lectura repetible no permite ver las filas fantasma (consulteEstabilidad de lectura).

    Además de los bloqueos de exclusividad, un proceso de aplicación que seejecute en el nivel RR adquiere, como mínimo, bloqueos de compartimientoen todas las filas a las que hace referencia. Además, el bloqueo se realiza deforma que el proceso de aplicación quede completamente aislado de losefectos de los procesos de aplicación concurrentes.

    Estabilidad de lectura (RS)Igual que el nivel de Lectura repetible, el nivel de Estabilidad de lecturaasegura que:v Cualquier fila leída durante una unidad de trabajo4 no sea modificada por

    otros procesos de aplicación hasta que la unidad de trabajo se hayacompletado.5

    v Las filas modificadas por otro proceso de aplicación no se pueden leer hastaque dicho proceso de aplicación las confirme.

    A diferencia de la Lectura repetible, el nivel de Estabilidad de lectura no aíslacompletamente el proceso de aplicación de los efectos de procesos deaplicación concurrentes. En el nivel RS, los procesos de aplicación que emitenla misma consulta más de una vez pueden ver filas adicionales producidaspor la adición de información nueva a la base de datos que realizan otrosprocesos de aplicación. Estas filas adicionales se denominan filas fantasma.

    Por ejemplo, puede aparecer una fila fantasma en la situación siguiente:1. El proceso de aplicación P1 lee el conjunto de filas n que satisfacen alguna

    condición de búsqueda.2. Entonces el proceso de aplicación P2 inserta una o más filas que satisfacen

    la condición de búsqueda y confirma esas nuevas inserciones.3. P1 lee nuevamente el conjunto de filas con la misma condición de

    búsqueda y obtiene tanto las filas originales como las filas insertadas porP2.

    Además de los bloqueos de exclusividad, un proceso de aplicación que seejecute al nivel RS adquiere, como mínimo, bloqueos de compartimiento entodas las filas calificadas para ello.

    4. Las filas se leen en la misma unidad de trabajo que la sentencia OPEN correspondiente. Consulte WITH HOLD enel apartado “DECLARE CURSOR” en la página 976.

    5. El uso de la cláusula WITH RELEASE opcional en la sentencia CLOSE significa que, si se vuelve a abrir el cursor,ya no se aplicará ninguna garantía respecto a las lecturas no repetibles a ninguna fila a la que se haya accedidoanteriormente.

    Capítulo 2. Conceptos 25

  • Estabilidad del cursor (CS)Al igual que el nivel de Lectura repetible, la Estabilidad del cursor aseguraque cualquier fila que haya sido modificada por otro proceso de aplicación nopueda leerse hasta que sea confirmada por dicho proceso de aplicación.

    Sin embargo, a diferencia del nivel de Lectura repetible, la Estabilidad delcursor sólo asegura que otros procesos de aplicación no modifiquen la filaactual de cada cursor actualizable. De este modo, las filas leídas durante unaunidad de trabajo pueden ser modificadas por otros procesos de aplicación.

    Además de los bloqueos de exclusividad, un proceso de aplicación que seejecute al nivel CS tiene, como mínimo, un bloqueo de compartimiento para lafila actual de cada cursor.

    Lectura no confirmada (UR)Para una operación SELECT INTO, una operación FETCH con un cursor desólo lectura, una operación de selección completa utilizada en INSERT, unaoperación de selección completa de fila en UPDATE o una operación deselección completa escalar (dondequiera que se utilice), el nivel de Lectura noconfirmada permite que:v Otros procesos de aplicación cambian cualquier fila leída durante la unidad

    de trabajo.v Se lea cualquier fila cambiada por otro proceso de aplicación incluso si

    dicho proceso de aplicación no ha confirmado el cambio.

    Para otras operaciones, se aplican las reglas del nivel CS.

    Comparación de los niveles de aislamientoEn el “Apéndice I. Comparación de niveles de aislamiento” en la página 1453se puede encontrar una comparación de los cuatro niveles de aislamiento.

    Consultas

    Una consulta es un componente de determinadas sentencias de SQL queespecifica una tabla resultante (temporal).

    Para obtener una descripción completa de las consultas, consulte el“Capítulo 5. Consultas” en la página 471.

    26 Consulta de SQL

  • Expresiones de tabla

    Una expresión de tabla crea una tabla resultante temporal a pa