Fundamentos de SQL Tercera edición Andy Oppel Robert Sheldon Traducción Carlos Fabián Jiménez Castillo Traductor profesional MÉXICO • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • MADRID • NUEVA YORK SAN JUAN • SANTIAGO • SÃO PAULO • AUCKLAND • LONDRES • MILÁN • MONTREAL NUEVA DELHI • SAN FRANCISCO • SINGAPUR • ST. LOUIS • SIDNEY • TORONTO 00_Oppel SQL Front Matters.indd i 1/18/10 4:11:10 PM Director editorial: Fernando Castellanos Rodríguez Editor: Miguel Ángel Luna Ponce Supervisor de producción: Zeferino García García FUNDAMENTOS DE SQL Tercera edición Prohibida la reproducción total o parcial de esta obra, por cualquier medio, sin la autorización escrita del editor. DERECHOS RESERVADOS © 2010, respecto a la primera edición en español por McGRAW-HILL INTERAMERICANA EDITORES, S.A. DE C.V. A Subsidiary of The McGraw-Hill Companies, Inc. Corporativo Punta Santa Fe, Prolongación Paseo de la Reforma 1015, Torre A Piso 17, Colonia Desarrollo Santa Fe, Delegación Álvaro Obregón C.P. 01376, México, D.F. Miembro de la Cámara Nacional de la Industria Editorial Mexicana, Reg. Núm. 736 ISBN: 978-607-15-0251-3 Translated from the 3rd English edition of SQL: A Beginner’s Guide By: Andrew Oppel and Robert Sheldon Copyright © 2009 by The McGraw-Hill Companies. All rights reserved. ISBN: 978-0-07-154864-9 1234567890 109876543210 Impreso en México Printed in Mexico 00_Oppel SQL Front Matters.indd ii 1/18/10 4:11:12 PM Acerca de los autores Andrew (Andy) J. Oppel es graduado de la Latin School de Mrayland y la Transylvania Uni- versity (Lexington, Kentucky) donde obtuvo un grado en ciencias de la computación en 1974. Desde entonces ha sido empleado continuamente en una amplia variedad de puestos sobre tecnologías de la información, incluyendo programador, programador/analista, arquitecto en sistemas, administrador de proyectos, administrador senior de base de datos, administrador del grupo de bases de datos, asesor, diseñador de bases de datos, modelador de datos y arqui- tecto de datos. Además, ha sido instructor de medio tiempo para un campus de la Universidad de California (Berkeley) durante más de 20 años, y recibió el premio de Instructor Honorario durante el año 2000. Su labor en la enseñanza incluye el desarrollo de tres cursos para el cam- pus de la Universidad de California, “Conceptos de Sistemas de Administración de Bases de Datos”, “Introducción a los Sistemas de Administración de Bases de Datos Relacionales”, y “Modelado de Datos y Diseño de Bases de Datos”. También obtuvo la certificación Oracle 9i Database Associate en 2003. Actualmente se encuentra empleado como modelador de datos senior para Blue Shield de California. Muy aparte de los sistemas de cómputo, Andy disfruta la música (la guitarra y el canto), el radio amateur (vicedirector de la Pacific Division, Ameri- can Radio Relay League) y el fútbol (instructor de árbitros, U.S. Soccer). Andy ha diseñado e implementado cientos de bases de datos para un amplio rango de aplicaciones, incluyendo investigación médica, para la banca, seguros, fabricación de indu- mentaria, telecomunicaciones, comunicaciones inalámbricas y recursos humanos. Es el autor de Databases Demystified (McGraw-Hill/Osborne, 2004) y SQL Demystified (McGraw-Hill/ Osborne, 2005). Su experiencia en productos de bases de datos incluye IMS, DB2, Sybase, Microsoft SQL Server, Microsoft Access, MySQL y Oracle (versiones 7, 8, 8i, 9i y 10g). Robert Sheldon ha trabajado como asesor y escritor técnico durante muchos años. Como asesor, ha administrado el desarrollo y mantenimiento de aplicaciones basadas en Web y aplicaciones servidor-cliente y las bases de datos que soportan a esas aplicaciones. Ha di- señado e implementado diferentes bases de datos de Access y SQL y ha utilizado SQL para construir bases de datos, crear y modificar objetos de las bases de datos, consultar y modificar los datos, y para solucionar problemas relacionados con los datos y con los sistemas. Robert también ha escrito o coescrito ocho libros sobre diferentes tecnologías de red y de servidor, uno de los cuales recibió un certificado al mérito del Puget Sound Chapter de la Society for Technical Communication. Además, dos de los libros que Robert ha escrito se enfocan ex- 00_Oppel SQL Front Matters.indd iii 1/18/10 4:11:13 PM clusivamente al diseño e implementación de SQL Server. Robert también ha escrito y editado una gran cantidad de material relacionado con las bases de datos SQL y otras tecnologías de computación. Su trabajo en escritura no sólo incluye material sobre la industria de la compu- tación (también ha escrito un poco de todo, desde artículos de noticias hasta trabajos en docu- mentación legal) y ha recibido dos premios de la Colorado Press Association. Acerca del revisor técnico James Seymour es graduado de la universidad de North Carolina en Chapel Hill con grado en historia y ciencias políticas, y de la universidad de Kentucky con una maestría en histo- ria. Se involucró por primera vez con tecnología computacional en 1965 con el entorno de la computadora central en North Carolina. En el ejército de Estados Unidos durante la guerra de Vietnam perteneció al pequeño equipo que trabajó con la puesta en marcha de la computadora central del Pentágono para diferentes escenarios de estrategia militar. Desde 1972 está involucrado en diferentes entornos de computación con el segundo pro- yecto punto de venta y control de inventarios en la industria de venta al público, programas analíticos e iniciativas de bases de datos para industrias de seguros y ayuda social, la puesta en marcha de controles de pérdida, y otros proyectos de control de inventario y rastreo de ven- tas a través de diferentes industrias. De 1987 a 1995, James fue instructor de manejo de bases de datos en el sistema de uni- versidades comunitarias en el estado de Kentucky. Con esta capacidad creó los primeros cur- sos de manejo de bases de datos y de programación en C en el estado de Kentucky y ayudó a las entidades tanto públicas como privadas con sus necesidades urgentes de entrenamiento, incluyendo la programación de sistemas guía para los misiles crucero para Tormenta del De- sierto. Antes de 1985 fue administrador de sistemas, administrador de redes, programador y ad- ministrador de bases de datos. A partir de 1985, James ha sido administrador senior de bases de datos y ha trabajado principalmente con DBMS de DB2 y Oracle en múltiples plataformas, incluyendo SQL Server desde la versión 7.0. Actualmente es el administrador senior de bases de datos y arquitecto de datos para una compañía del Fortune 100 supervisando proyectos ma- yores en Estados Unidos, Canadá y el Reino Unido. 00_Oppel SQL Front Matters.indd iv 1/18/10 4:11:14 PM Contenido ACERCA DE LOS AUTORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii AGRADECIMIENTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi INTRODUCCIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Parte 1 Bases de datos relacionales y SQL Introducción a las bases de datos relacionales y a SQL . . . . . . . . . . . . . . . 3 1 Entienda las bases de datos relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 El modelo relacional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Aprenda acerca de SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 La evolución de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Tipos de instrucciones de SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Tipos de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 El estándar SQL frente a las implementaciones de producto. . . . . . . . . . . . . 21 Trabajo con el entorno SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2 Entienda el entorno SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Entienda los catálogos SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Esquemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Objetos de esquema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 ¿Qué es una base de datos?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Nombrado de objetos en un entorno SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Nombres calificados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Creación de un esquema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Creación de una base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 00_Oppel SQL Front Matters.indd v 1/18/10 4:11:14 PM vi Contenido Creación y modificación de tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3 Creación de tablas en SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Especificación de los tipos de datos en una columna . . . . . . . . . . . . . . . . . . . . . . . 54 Tipos de datos de cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Tipos de datos numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Tipos de datos de fecha y hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Tipo de datos de intervalo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Tipo de datos booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Utilice tipos de datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Creación de tipos definidos por el usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Especificación de los valores predeterminados en una columna. . . . . . . . . . . . . . . 64 Eliminación de tablas en SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Implementación de la integridad de datos. . . . . . . . . . . . . . . . . . . . . . . . . . 73 4 Entienda las restricciones de integridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Utilice restricciones NOT NULL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Añada restricciones UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Añada restricciones PRIMARY KEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Añada restricciones FOREIGN KEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 La cláusula MATCH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 La cláusula <acción referencial desencadenada>. . . . . . . . . . . . . . . . . . . . . . 89 Defina restricciones CHECK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Defina afirmaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Creación de dominios y restricciones de dominio . . . . . . . . . . . . . . . . . . . . . 98 Creación de vistas en SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5 Añada vistas a la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Definición de vistas de SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Creación de vistas actualizables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Utilice la cláusula WITH CHECK OPTION . . . . . . . . . . . . . . . . . . . . . . . . . 116 Eliminación de vistas de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Gestión de seguridad en la base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6 Entienda el modelo de seguridad de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Sesiones SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Acceda a objetos de base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Creación y eliminación de roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Otorgue y revoque privilegios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Revoque privilegios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Otorgue y revoque roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Revoque roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 00_Oppel SQL Front Matters.indd vi 1/18/10 4:11:14 PM Contenido vii Parte II Acceso y modificación de datos Consulta de datos de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 7 Utilice la instrucción SELECT para la recuperación de datos. . . . . . . . . . . . . . . . . 146 La cláusula SELECT y la cláusula FROM. . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Utilice la cláusula WHERE para definir condiciones de búsqueda. . . . . . . . . . . . . 152 Defina la cláusula WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Utilice la cláusula GROUP BY para agrupar los resultados de una consulta . . . . . 159 Utilice la cláusula HAVING para especificar un grupo de condiciones de búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Utilice la cláusula ORDER BY para ordenar los resultados de una consulta . . . . . 166 Modificar datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 8 Insertar datos SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Insertar valores desde una instrucción SELECT . . . . . . . . . . . . . . . . . . . . . . 180 Actualizar datos SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Actualizar valores desde una instrucción SELECT . . . . . . . . . . . . . . . . . . . . 185 Eliminar datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Utilizar predicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 9 Comparar datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Utilizar el predicado BETWEEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Arrojar valores nulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Arrojar valores similares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Hacer referencia a fuentes adicionales de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Utilizar el predicado IN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Utilizar el predicado EXISTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Determinar la cantidad de predicadosde comparación . . . . . . . . . . . . . . . . . . . . . . 216 Utilizar los predicados SOME y ANY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Utilizar el predicado ALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Trabajar con funciones y expresiones de valor . . . . . . . . . . . . . . . . . . . . . . 225 10 Utilizar funciones Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Utilizar la función COUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Utilizar las funciones MAX y MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Utilizar la función SUM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Utilizar la función AVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Utilizar funciones de valor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Trabajar con funciones de valor de cadena. . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Trabajar con funciones de valor de fecha y hora . . . . . . . . . . . . . . . . . . . . . . 236 Utilizar expresiones de valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Trabajar con expresiones de valor numéricas. . . . . . . . . . . . . . . . . . . . . . . . . 238 00_Oppel SQL Front Matters.indd vii 1/18/10 4:11:15 PM viii Contenido Utilizar la expresión de valor CASE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Utilizar la expresión de valor CAST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Utilizar valores especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Acceder a múltiples tablas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 11 Realizar operaciones básicas join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Utilizar nombres de correlación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Crear operaciones join con más de dos tablas . . . . . . . . . . . . . . . . . . . . . . . . 258 Crear la operación cross join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Crear la operación self-join. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Unir tablas con nombres de columna compartidos . . . . . . . . . . . . . . . . . . . . . . . . . 261 Crear el método join natural. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Crear el método join de columna nombrada. . . . . . . . . . . . . . . . . . . . . . . . . . 263 Utilizar el método join de condición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Crear la inner join. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Crear la outer join. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Realizar operaciones de unión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Utilizar subconsultas para acceder y modificar datos. . . . . . . . . . . . . . . . . 277 12 Crear subconsultas que arrojen múltiples filas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Utilizar el predicado IN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Utilizar el predicado EXISTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Utilizar predicados de comparación cuantificados. . . . . . . . . . . . . . . . . . . . . 282 Crear subconsultas que arrojen un solo valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Trabajar con subconsultas correlacionadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Utilizar subconsultas anidadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Utilizar subconsultas para modificar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Utilizar subconsultas para insertar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Utilizar subconsultas para actualizar datos. . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Utilizar subconsultas para eliminar datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Parte III Acceso avanzado a los datos Crear rutinas invocadas por SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 13 Entender las rutinas invocadas por SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Procedimientos y funciones invocadas por SQL . . . . . . . . . . . . . . . . . . . . . . 301 Trabajar con la sintaxis básica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Crear procedimientos invocados por SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 Invocar procedimientos invocados por SQL. . . . . . . . . . . . . . . . . . . . . . . . . . 305 Agregar parámetros de entrada a sus procedimientos . . . . . . . . . . . . . . . . . . . . . . . 306 Utilizar procedimientos para modificar datos. . . . . . . . . . . . . . . . . . . . . . . . . 309 Agregar variables locales a sus procedimientos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 00_Oppel SQL Front Matters.indd viii 1/18/10 4:11:15 PM Contenido ix Trabajar con instrucciones de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Crear instrucciones compuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Crear instrucciones condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Crear instrucciones de repetición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Agregar parámetros de salida a sus procedimientos . . . . . . . . . . . . . . . . . . . . . . . . 320 Crear funciones invocadas por SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Crear activadores SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 14 Entender los activadores SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Contexto de ejecución del activador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Crear activadores SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Referenciar valores antiguos y nuevos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Quitar activadores SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Crear activadores de inserción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Crear activadores de actualización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Crear activadores de eliminación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Utilizar cursores SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 15 Entender los cursores SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Declarar y abrir cursores SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Declarar un cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Trabajar con elementos opcionales de la sintaxis . . . . . . . . . . . . . . . . . . . . . 356 Crear una instrucción de cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Abrir y cerrar un cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Recuperar datos desde un cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Utilizar instrucciones UPDATE y DELETE posicionadas . . . . . . . . . . . . . . . . . . . 368 Utilizar la instrucción UPDATE posicionada. . . . . . . . . . . . . . . . . . . . . . . . . 369 Utilizar la instrucción DELETE posicionada. . . . . . . . . . . . . . . . . . . . . . . . . 370 Manejar transacciones SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 16 Entender las transacciones SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Configurar las propiedades de la transacción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Especificar un nivel de aislamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Especificar un tamaño de diagnóstico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Crear una instrucción SET TRANSACTION. . . . . . . . . . . . . . . . . . . . . . . . . 388 Iniciar una transacción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Determinar el aplazamiento de una restricción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Crear puntos de recuperación en una transacción . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Liberar un punto de recuperación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Finalizar una transacción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Completar una transacción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Reinvertir una transacción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 00_Oppel SQL Front Matters.indd ix 1/18/10 4:11:16 PM
Description: