Está en la página 1de 495

Culpa

de ®

Base de datos de Oracle de


OCA 11g:
Fundamentos de SQL
I
Guía de examen (Examen 1Z0-
051)
SOBRE LOS AUTORES

John Watson (Oxford, el Reino Unido) trabaja para Consultores de dirección BPLC,
dando clases y consultando en todas partes de Europa y África. Él era con la universidad
de Oracle durante varios años en Sudáfrica, y antes de que esto trabajara para varias
compañías, ministerios, y organizaciones no gubernamentales en Inglaterra y Europa.
Él es OCP calificado tanto en base de datos como en administración de Servidor de
Aplicación. John es el autor de varios libros y numerosos artículos sobre la tecnología y
tiene 25 años de la experiencia en ELLO.
Roopesh Ramklass (Sudáfrica), OCP, es un especialista de Oracle independiente con
más de 10 años de experiencia en una amplia variedad de ELLO entornos. Éstos
incluyen el diseño de software y el desarrollo, el análisis de sistemas, courseware
desarrollo, y conferencia. Él ha trabajado para el Apoyo de Oracle y ha dado clases en la
universidad de Oracle en Sudáfrica durante varios años. Roopesh es experimentado en
dirección y ejecución de ELLO proyectos de desarrollo, incluso aprovisionamiento de
sistemas de infraestructura, desarrollo de software, e integración de sistemas.

Sobre el Redactor Técnico


Bruce Swart (Sudáfrica) trabaja para 2Cana Soluciones y tiene más de 14 años de
experiencia en ELLO. Manteniendo un gran interés para otros docentes, él ha realizado
varios papeles incluso developer, analista, jefe de equipo, administrador, director de
proyecto, consultor, y conferenciante. Él es OCP calificado tanto en base de datos como
en papeles de developer. Él ha dado clases en la universidad de Oracle en Sudáfrica
durante varios años y también ha hablado en numerosas conferencias de Oracle User
Group locales. Su pasión ayuda a otros a conseguir la grandeza.

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.
®

Base de datos de Oracle de


OCA 11g:
Fundamentos de
SQL I
Guía de examen (Examen
1Z0-051)

John Watson
Roopesh Ramklass

Esta publicación y CD pueden ser usados en estudiantes asistentes para prepararse


para la Base de datos de Oracle OCP 11g: Fundamentos de SQL I examen. Ni Oracle
Corporation ni McGraw-Hill Companies garantizan que el uso de esta publicación y CD
asegurará el paso del examen relevante.

Nueva York Chicago San Francisco Lisboa Londres Madrid


Ciudad de México Milano Nueva Delhi San Juan Seúl Singapur Sydney
Toronto
Copyright © 2008 por McGraw-Hill Companies, Inc. Reservados todos los derechos. Fabricado en los Estados Unidos de América.
Excepto como permitido bajo la Ley de derechos de autor de los Estados Unidos de 1976, ninguna parte de esta publicación puede ser
reproducida o distribuida en cualquier forma o por cualquier medio, o almacenada en una base de datos o sistema de recuperación, sin el
permiso escrito previo del editor.

0-07-164380-X

El material en este eBook también aparece en la versión de letra de este título: 0-07-159786-7.

Todas las marcas registradas son marcas registradas de sus dueños respectivos. Más bien que poner un símbolo de marca registrada después
de cada acontecimiento de un nombre que tiene marca registrada, usamos nombres de una moda editorial sólo, y a la ventaja del dueño de
marca registrada, sin la intención de la infracción de la marca registrada. Donde tales designaciones aparecen en este libro, ellos han sido
imprimidos con letras mayúsculas iniciales.
McGraw-Hill eBooks está disponible con descuentos de cantidad especiales para usar como premios y promociones de ventas, o para el
uso en programas de capacitación corporativos. Para más información, por favor póngase en contacto con George Hoare, Ventas
Especiales, en george_hoare@mcgraw-hill.com o (212) 904-4069.

TÉRMINOS DE USO

Esto es una obra con derechos de autor y McGraw-Hill Companies, Inc. ("McGraw-Hill") y sus licenciadores reservan todos los derechos
en y al trabajo. El uso de este trabajo es sujeto a estos términos. Excepto como permitido bajo la Ley de derechos de autor de 1976 y el
derecho de almacenar y recuperar una copia del trabajo, usted no puede descompilar, desmontar, invertir al ingeniero, reproducir,
modificar, crear trabajos derivados basados en, transmitir, distribuir, diseminar, vender, publicar o sublicenciar el trabajo o cualquier parte de
él sin el consentimiento previo de McGraw-Hill. Usted puede usar el trabajo para su propio uso privado y no comercial; cualquier otro uso del
trabajo es estrictamente prohibido. Su derecho de usar el trabajo puede ser terminado si usted deja de cumplir con estos términos.

EL TRABAJO ES PROPORCIONADO "COMO ES." McGRAW-HILL Y SUS LICENCIADORES NO HACEN NINGUNAS GARANTÍAS
O GARANTÍAS EN CUANTO A LA EXACTITUD, SUFICIENCIA O COMPLETO DE O RESULTADOS PARA SER OBTENIDOS
DE USAR EL TRABAJO, INCLUSO CUALQUIER INFORMACIÓN A QUE PUEDAN TENER ACCESO A TRAVÉS DEL TRABAJO
VÍA EL ENLACE O POR OTRA PARTE, Y EXPRESAMENTE RECHAZAR CUALQUIER GARANTÍA, EXPRESO O IMPLICADO,
INCLUSO, PERO NO LIMITADOS CON GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD O APTITUD PARA UN
PROPÓSITO PARTICULAR. McGraw-Hill y sus licenciadores no garantizan o garantizan que las funciones contenidas en el trabajo
cumplirán con sus requisitos o que su operación será ininterrumpida o error libre. Ni McGraw-Hill ni sus licenciadores deben ser obligados
a usted o alguien más para cualquier inexactitud, error u omisión, sin tener en cuenta la causa, con el trabajo o para cualquier daño que
resulta de allí. McGraw-Hill no tiene ninguna responsabilidad del contenido de cualquier información tenida acceso a través del trabajo.
De ninguna manera van McGraw-Hill y/o sus licenciadores ser obligados de cualquier daño indirecto, secundario, especial, punitivo,
consiguiente o similar que resulte del uso de o inhabilidad de usar el trabajo, aun si alguno de ellos ha sido informado de la posibilidad de
tales daños. Esta limitación de la responsabilidad debe aplicarse a cualquier reclamación o causar que si tal reclamación o causa se levantan
en contrato, agravio o por otra parte.

DOI: 10.1036/0071597867
Con gracias a Silvia para hacer vida de valor de vida.
John -

Ameetha, usted ha sido maravillosamente soportante y quiero a


gracias para cada momento que usted comparte conmigo.
-Roopesh
Esta página intencionadamente se dejó en blanco
CONTENIDO DE UN VISTAZO

1 Oracle Server y el Paradigma Relacional .......... 1

2 Extracción de datos Usando la sentencia SQL Select ...............51

3 Restricción y Ordenación de Datos ................................. 103

4 Funciones de fila sola ...................................... 169

5 Utilización de Funciones de Conversión y Expresiones Condicionales … 227


6 Obtención de Datos Agregados Usando las Funciones de Grupo........... 273

7 Pruebas Datos de Múltiples Tablas .......................... 309

8 Utilización de Subconsultas para Solucionar problemas ........................... 357

9 Utilización de los Operadores SET ..................................... 381

10 Manipulación de Datos ......................................... 403

11 Utilización Select de DDL para Crear y Manejar Tablas ............. 449

12 Creación de Otros Objetos de Esquema .............................. 487

Apéndice ................................................ 533

Glosario ................................................. 537

Índice .................................................... 555

vii
Esta página intencionadamente se dejó en blanco
Para más información sobre este título, haga clic aquí

CONTENIDO

Introducción ........................................ xix

1 Oracle Server y el Paradigma Relacional........................ 1


Posición Server Technologies............................. 3
La Arquitectura de Servidor de Oracle....................... 3
El Servidor de Aplicación de Oracle........................ 5
Oracle gerente de Empresa............................ 7
Grid Informática.................................... 8
Exercise 1-1: Investigue Su Base de datos y
Entorno de aplicación.......................... 9
Herramientas de desarrollo y Lenguajejes..................... 9
Entienda Estructuras Relacionales............................. 10
Filas y Tablas.................................... 11 Normalización de
Datos................................. 14
Ejercicio 1-2: Realice un Extenso
Análisis relacional............................... 20
Concepto del lenguajeje SQL................................ 23
Estándares de SQL..................................... 23
Comandos de SQL.................................... 23
Un Lenguajeje orientada al conjunto............................. 25
Use las Herramientas de Cliente....................................... 26
SQL*Plus......................................... 26
SQL Developer..................................... 33
Cree los Esquemas de Pruebas........................... 37
Usuarios y Esquemas................................. 38
Esquemas OE y HR ............................ 38
Creación de Esquema de pruebas...................... 42
✓ Taladradora De dos minutos................................... 45
Q&A TEST.......................................... 46

ix
x
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

Pregunta de laboratorio...................................... 48
mí Respuestas de Prueba................................... 49
Respuesta de laboratorio........................................ 50

2 Extracción de datos Usando la sentencia SQL Select ... 51


Capacidad de la sentencia SQL Select ................
Introducción de la sentencia de SQL Select................
El Comando DESCRIBE table......................
se entrenan 2-1: Descripción del Esquema HR................................
Capacidades de la Select
Ejecución de una sentencia Select básica...........................
Sintaxis de la Select SENTENCIA Primitiva............
Las reglas están hechas para ser seguidas.......................
Ejercicio 2-2: Contestación a Nuestro Primer
Preguntas con SQL...............................
Expresiones de SQL y Operadores......................
el.. NULO no Es Nada...................................
Ejercicio 2-3: Experimentación con
Expresiones y la Comando DUAL....................
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de
laboratorio........................................
52 52 53

55 57 59 59 64

67 70 81

86 90 92 94 96 98

3 Restricción y Comandoación de Datos ..................... 103


Limite las Filas Recuperadas por una Pregunta..........................
EL DONDE cláusula................................. Operadores de
comparación............................... Ejercicio 3-1: Utilización del
Operador PARECIDO............... Operadores
booleanos................................ Reglas de precedencia
de.....................................
Clasifique las Filas Recuperadas por una Pregunta...........................
El PEDIDO POR Cláusula.............................. se entrenan 3-2:
Comandoación de Utilización de Datos
el PEDIDO POR Cláusula............................
104

141
Contenido

Substitución de signo ""....................................


Variables de substitución............................... Defina y Verifique...................................
Ejercicio 3-3: Utilización de Substitución de Signo ""...........
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de laboratorio........................................
xi

142 353111494

4 Funciones de fila sola ........................... 169


Describa Diversos tipos de Funciones Disponibles en SQL............
Definición de una Función................................. Tipos de Funciones..................................
Use Carácter, Número, y Funciones de Fecha
en Select SENTENCIAS...................................
La utilización de Funciones de Conversión de Instancia de Carácter............. Ejercicio 4-
1: Utilización de las Funciones de Conversión de Instancia..... Utilización de Funciones de
Manipulaciones de Carácter............... Ejercicio 4-2: Utilización de las Funciones de
Manipulación de Instancia... Utilización de Funciones Numéricas............................ que
trabaja con Fechas................................. Utilización de Funciones de
Fecha.............................. los.. se entrenan 4-3: Utilización de las Funciones de
Fecha...............
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de laboratorio........................................
170170174

177

5 Utilización de Funciones de Conversión y


Expresiones condicionales....................... 227
Describa Diversos tipos de Conversión
Funciones Disponibles en SQL................................
Funciones de conversión............................... Use el TO_CHAR, TO_NUMBER,
y Funciones de Conversión de TO_DATE.......................
Utilización de las Funciones de Conversión.......................
228228

231232
xii
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

Ejercicio 5-1: Convertir Fechas en Carácteres


La utilización de la Función de TO_CHAR.....................
Aplique Expresiones Condicionales en una Select SENTENCIA...........
Funciones que anidan................................... Ejercicio 5-2: Utilización
NULLIF y NVL2
para Lógica Condicional Simple....................... Funciones
condicionales............................... Ejercicio 5-3: Utilización la Función
DECODIFICAR...........
✓ Taladradora De dos minutos...................................
Q&A Mí Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de laboratorio........................................

6 Obteniendo de Utilización de Datos Agregada

239245245

251
las Funciones de Grupo.......................... 273
Describa las Funciones de Grupo................................
Definición de Funciones de Grupo......................... Tipos y Sintaxis de
Funciones de Grupo...................
Identifique las Funciones de Available Group........................
Utilización de las Funciones de Grupo........................... Ejercicio 6-1:
Utilización de las Funciones de Grupo............. Funciones de Nested
Group.............................
Datos de grupo Usando el GRUPO POR Cláusula......................
Creating Groups de Datos............................. El GRUPO POR
Cláusula.............................. que se agrupa por Columnas
Múltiples...................... los.. se entrenan 6-2: Agrupación de Datos
Basados
en Columnas Múltiples............................ los.. incluyen o Excluyen
Filas Agrupadas Usando la Cláusula que TIENE......
Resultados de Restricting Group............................ la Cláusula que
TIENE.............................. los.. se entrenan 6-3: Utilización la
Cláusula que TIENE.............
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
274 274

292 294 844212087


Contenido

Pregunta de laboratorio...................................... mí Respuestas de


Prueba................................... Respuesta de laboratorio........................................
xiii

305306308

7 Pruebas de Datos de Tablas Múltiples .............. 309


Escriba Select SENTENCIAS a Datos de Acceso de
Más de Un Table Using Equijoins y Nonequijoins........
Tipos de Junturas...................................... que se afilia a Tablas Usando Sintaxis de
SQL:1999.................. que califica a Nombres de Columna Ambiguos.................. la
Cláusula de JUNTURA NATURAL......................... Ejercicio 7-1: Utilización de la
JUNTURA NATURAL............ la JUNTURA Natural USANDO Cláusula.....................
La JUNTURA Natural EN Cláusula......................... Ejercicio 7-2: Utilización del
NATURAL
Cláusula de JOINON................................ de N-camino Junturas y Condiciones de Juntura
Adicionales............. Nonequijoins......................................
Afíliese a una Comando a Sí Usando una Autojuntura..........................
La conexión a una Comando a Sí Usando la Cláusula JOINON.... los.. se entrenan 7-3:
Realización de una Autojuntura..................
Datos de vista que no Encuentran una Condición de Juntura
Usando Junturas Externas.....................................
Interior contra Junturas Externas............................ el.. dejó Junturas
Externas.................................. derecho de.. Junturas Externas...................................
Junturas Externas llenas.................................. los.. se entrenan 7-4: Realización de una
Juntura externa...............
Genere un producto Cartesiano de Dos o más Tablas..............
La creación de productos Cartesianos Usando Junturas Enfadadas.......... los.. se
entrenan 7-5: Realización de una Juntura enfadada................
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de laboratorio........................................
310

324

334 335 336 337 991325235


xiv
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

8 Utilización de Subconsultas para Solucionar problemas


.............. 357
Defina Subconsultas......................................... 358
Ejercicio 8-1: Tipos de Subpregunta..................... 359 Describen los Tipos de
problemas Que las Subconsultas Pueden Solucionar..... 360
Uso de un SET de Resultado de Subpregunta con Objetivos de Comparación.....
360 Transformación de Estrella................................. 361 Generan una
Comando de la Cual SELECCIONAR............... 362 Generan Valores para
la Proyección........................ 362 Generan Filas para ser Pasadas a una
Select DML......... 363 Ejercicio 8-2: Subconsultas Más complejas..............
363
Liste los Tipos en una lista de Subconsultas.................................. 364
Solo - y Subconsultas de Fila múltiple................... 365 Subconsultas
Correlacionadas............................... 366 Ejercicio 8-3: Investigue el Diferente
Tipos de Subpregunta................................ 367 Escriben Subconsultas de Fila
múltiple y Fila sola................. 369
Ejercicio 8-4: Escriba una Pregunta Que es Confiable
y Usuario Simpático................................. 370
✓ Taladradora De dos minutos................................... 374 Q&A Mí
Prueba.......................................... 375
Pregunta de laboratorio...................................... 378 Mí Respuestas de
Prueba................................... 379 Respuesta de
Laboratorio........................................ 380

9 Utilización de los Operadores de SET ........................ 381


Describa a los Operadores de SET.................................. 382
SETs y Diagramas de Venn.............................. 383 Principios generales de
Operador de SET....................... 384 Ejercicio 9-1: Describa a los
Operadores de SET.............. 385
Use a un Operador de SET para Combinar Preguntas Múltiples
en una Pregunta Sola...................................... 386
La UNIÓN TODO el Operador........................... 387 El Operador de
UNIÓN............................... 387 El Operador CRUZAR...........................
388 el MENOS Operador............................... 389 Ejemplos Más
complejos............................. 390 Ejercicio 9-2: Utilización de los
Operadores de SET................ 392
Contenido

Controle el Pedido de Filas Devueltas..........................


xv

393
Ejercicio 9-3: Controle el Pedido de Filas Devueltas..... 394
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de laboratorio........................................
396 397

10 Datos de Manipulación ............................. 403


Describa Cada Lenguaje de Manipulación de Datos (DML) Select.....
INSERCIÓN........................................ ACTUALIZACIÓN de...........................................
BORRAR........................................ FUSIÓN de............................................
TRUNCADO...................................... DML Frainstancias de Select.............................
Filas de inserción en una Comando.....................................
Ejercicio 10-1: Use el Comando de INSERCIÓN.......... Filas de actualización de.. en
una Comando.....................................
Ejercicio 10-2: Use el Comando de ACTUALIZACIÓN........... Borre Filas de una
Comando...................................
Borrar Filas con BORRAR...................... los.. se entrenan 10-3: Use el BORRAR
Comando........... Borrar Filas con TRUNCADO.....................
FUSIÓN..........................................
Transacciones de control.......................................
Transacciones de base de datos............................... Las Select de Control de
Transacción................... Ejercicio 10-4: Use DESTINAR y
ROLLBACK Manda...........................
✓ Taladradora De dos minutos................................... Q&A Mí
Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de
Prueba................................... Respuesta de laboratorio........................................
404 405 406 407 408 409 409 413 417 628473423
586195184
xvi
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

11 Utilización Select de DDL a


Cree y Maneje Tablas ..................... 449
Clasifique los Objetos de Base de datos Principales......................... 450
Tipos de objeto....................................... 450 Usuarios y
Esquemas.................................. 452 Objetos de Esquema de
Nombramiento............................. 453 Objeto Namespaces.................................
455 Ejercicio 11-1: Determine Que Objetos
Son Accesibles a Su Sesión...................... 455 Examinan la Estructura de
Comando.................................. 456
Ejercicio 11-2: Investigue Estructuras de Comando............ 457 Lista los Tipos
de datos Que están Disponibles para Columnas.............. 457
Ejercicio 11-3: Investigue los Tipos de datos
en el esquema de HORA................................ 461 Crean una Comando
Simple...................................... 462
La creación de Tablas con Especificaciones de Columna............. 462 Tablas
de Creación de Subconsultas....................... 464 Definiciones de Comando
Cambiadoras después de Creación................ 465 Caída y Truncamiento de
Tablas....................... 466 Ejercicio 11-4: Cree Tablas.......................
467
Explique Como Coacciones Son Creadas
en el momento de Creación de Comando..............................469
Los Tipos de Coacciones............................. 470 Coacciones de
Definición................................ 473 Ejercicio 11-5: Trabajo con
Coacciones................ 476
✓ Taladradora De dos minutos................................... 478 Q&A Mí
Prueba.......................................... 479
Pregunta de laboratorio...................................... 482 Mí Respuestas de
Prueba................................... 483 Respuesta de
Laboratorio........................................ 484

12 Creación de Otros Objetos de Esquema .................. 487


Cree Vistas Simples y Complejas............................ 488
¿Por qué Vistas de Uso en Absoluto?............................... 489 Vistas Simples
y Complejas........................... 492 CREAN LA VISTA, CAMBIAN
VISTA, y VISTA DE GOTA....... 493 Ejercicio 12-1: Cree
Vistas........................ 496
Contenido
Recupere Datos de Vistas...................................
Ejercicio 12-2: Use Vistas........................ los.. crean Sinónimos Privados y
Públicos...........................
Ejercicio 12-3: Cree y Sinónimos de Uso............. Cree, Mantenga, y Secuencias de
Uso..........................
Creación de Secuencias................................. Utilización de Secuencias..................................
los.. se entrenan 12-4: Cree y Secuencias de Uso.............
Cree y Mantenga Índices................................
Para qué los Índices Son...............................
xvii

497
Tipos de Índice ..................................... 511
La creación y la Utilización de Índices........................... La modificación y la Caída de
Índices....................... Ejercicio 12-5: Creación de Índices.....................
✓ Taladradora De dos minutos................................... Q&A Mí Prueba..........................................
Pregunta de laboratorio...................................... mí Respuestas de Prueba...................................
Respuesta de laboratorio........................................
515

Apéndice ..................................... 533

Glosario ...................................... 537

Índice ........................................ 555


Esta página intencionadamente se dejó en blanco
INTRODUCCIÓN

Capítulo 1:
Oracle Server Technologies y el Paradigma Relacional

El conjuntos de productos de tecnologías de servidor de Oracle es más que una base


de datos. También está el Servidor de Aplicación de Oracle y el Oracle Enterprise
Manager. Tomados en conjunto, éstos son las tecnologías de servidor que conforman
el GRID, grid es un entorno emergente para manejar al completo entornos IT y
proporcionar recursos a petición de los usuarios.
El paradigma relacional para la gestión de base de datos de información
fue la primera
formalizados en los años 60 y ha sido constantemente perfeccionado
desde entonces. Un paradigma es
un conjunto de normas acordadas por todas las partes interesadas que
especifica cómo los problemas
debe entenderse y abordarse. Existen otros paradigmas dentro de los
datos
procesar mundo. La base de datos Oracle es una implementación de un
Relacional
Database Management System (RDBMS) que se ajusta al paradigma
relacional,
pero luego va más allá para incluir algunos aspectos de otros paradigmas
como
modelos jerárquicos y orientada a objetos

El lenguajeje de consulta estructurado (SQL, que se pronuncia "sequel")


es una organización internacional
estándar para la gestión de los datos almacenados en bases de datos
relacionales. Oracle Database 11g ofrece
una aplicación de SQL que es en general compatible con el estándar
actual,
que es SQL-2003. Los detalles completos de la Conformidad en el
Apéndice B del SQL
Referencia del lenguajeje, que es parte de la biblioteca de documentación
de Oracle Database.
Como regla general, se puede suponer Compatibilidad.
A lo largo de este libro, dos herramientas se utilizan ampliamente para
ejercicios: SQL * Plus y
SQL Developer. Estas son las herramientas que los desarrolladores utilizan
a diario en su trabajo. la
ejercicios y muchos de los ejemplos se basan en dos conjuntos de
demostración de datos,
conocidos como los esquemas de recursos humanos y la OE. Hay
instrucciones sobre cómo iniciar la
herramientas y crear los esquemas de demostración, aunque es posible
que necesite la ayuda de
el administrador de base de datos local para empezar.

Este capítulo consiste en descripciones resumidas de Oracle Server Technologies; los


conceptos detrás del paradigma relacional y normalización de datos en estructuras
relacionales; el lenguaje SQL; las herramientas de cliente; y los esquemas de pruebas.

OBJETIVO DE CERTIFICACIÓN 1.01

Posición Server Technologies


Posición Server Technologies
3
Hay una familia de productos que componen las tecnologías de servidor de Oracle:

■ La Base de datos de Oracle


■ El Servidor de Aplicación de Oracle
■ El Enterpise Manager de Oracle
■ Varios herramientas de desarrollo de aplicaciones y lenguajes

Estos productos tienen cada uno una posición en el conjunto de productos de


Oracle.
La base de datos es el repositorio para datos y el motor que maneja el acceso a ello.
El Servidor de Aplicación de Oracle ejecuta el software de la parte de usuarios
finales: esto genera el interface de usuario en la forma de ventanas mostradas en los
navegadores de los usuarios y presenta llamadas a extracción y modificación de datos
a la base de datos para su ejecución. El Enterprise Manager de Oracle es una
herramienta de administración integral para controlar, gestionar y realizar el ajuste
de los procesos de Oracle y también (a través de plug-ins) de productos de terceros.
Por último,hay herramientas y lenguajes para el desarrollo de aplicaciones, ya sea
en aplicaciones que ejecutar en máquinas de los usuarios finales en el modelo
cliente-servidor, o aplicaciones que se ejecutan centralizada en servidores de
aplicaciones. La combinación de las tecnologías de servidor y las herramientas de
desarrollo configuran una plataforma para desarrollo y entrega de aplicaciones

La Arquitectura de Servidor de Oracle


Una base de datos de Oracle es un conjunto de archivos en el disco. Estos existen hasta
que estos archivos sean deliberadamente borrados. No hay ningunos límites prácticos
en el tamaño y el número de estos archivos, y por lo tanto no hay límites prácticos en
el tamaño de una base de datos. El acceso a la base de datos es a través de la instancia
de Oracle. La instancia es un conjunto de estructuras de memoria y procesos: estos
existen en la unidad (es) centrales de proceso y en la memoria del nodo de servidor, y
esta existencia es temporal. Una instancia puede ser arrancada y parada. Los usuarios
de la base de datos establecen sesiones contra la instancia, y la instancia entonces
maneja todos los
4
Capítulo 1:
Oracle Server Technologies y el Paradigma Relacional

accesos a la base de datos. Es absolutamente imposible en el entorno de Oracle para cualquier usuario
tener el contacto directo con la base de datos. Uns instancia de Oracle con una base de datos de Oracle
configura un servidor de Oracle.
El modelo de procesamiento puesto en práctica por el servidor de Oracle es el del procesamiento
cliente-servidor, a menudo denominado como de dos capas. En el modelo cliente-servidor, la generación
del interface de usuario y la mayor parte de la lógica de aplicación están separadas de la gestión de los
datos. Para una aplicación desarrollada usando SQL (como serán todas las aplicaciones de base de datos
relacionales ), esto significa que la parte de cliente genera los comandos de SQL, y la parte de servidor
los ejecuta. Esta es la arquitectura cliente-servidor básica, con (por regla general) una red de área local
entre las dos partes. El protocolo de comunicaciones de red usado entre el proceso de usuario y el proceso
de servidor es el protocolo patentado del Oracle, Oracle NET.
La parte de cliente consiste de dos componentes: los usuarios y los procesos de usuario. La parte de
servidor tiene tres componentes: el proceso servidor que ejecuta el SQL, el instancia, y la base de datos en
sí misma. Cada usuario se relaciona con un proceso de usuario. Cada proceso de usuario se relaciona con un
proceso de servidor, por lo general a través de una red de área local. Los procesos de servidor se relacionan
con la instancia, y la instancia con la base de datos. La figura 1-1 muestra esta relación esquemáticamente.

Una sesión es un proceso de usuario que se comunica con un proceso de servidor. Habrá por lo general un
proceso de usuario por usuario y un proceso de servidor por proceso de usuario. Los procesos de servidor y
usuario que configuran las sesiones son lanzados a petición por usuarios y terminados cuando ya no es
requerido; esto es el ciclo de log-on y log-off en el sistema. Los procesos de instancia y las estructuras de
memoria son lanzados por el administrador de base de datos y persisten hasta que el administrador
deliberadamente los termine; esto es el ciclo de cierre e inicializador de la base de datos.
El proceso de usuario puede ser cualquier software de lado del cliente que sea capaz de la conexión a
un proceso de servidor de Oracle. En todas partes de este libro, dos procesos de usuario serán usados
extensivamente: SQL*Plus y Developer SQL. Éstos son procesos simples proporcionados por Oracle para
establecer sesiones contra un servidor de Oracle y publicar ad hoc SQL.

Componentes de la parte cliente componentes de la parte servidor

Usuario Proceso usuario Proceso servidor Instancia

Componentes de la sesión

Base de Datos

Figura 1.1 La conexión indirecta entre un usuario y una base de datos

Una alternativa extensamente usada es el TOAD de QUEST Software, aunque este es un


software licenciado y antes de usarlo siempre hay que asegurar que la licencia es legal.
Las aplicaciones de usuario final tendrán que ser escritas con algo más sofisticado que
estas herramientas, algo capaz de gestionar ventanas, menús, diálogos en pantalla
etcétera. Tal aplicación podría ser escrita con los productos de Oracle developper Suite ;
con Microsoft Access conectado con el drivers ODBC de Oracle; con cualquier lenguaje
de tercera generación (como C o Java) al que Oracle ha provisto con una biblioteca de
llamadas a funciones que le dejarán interactuar con el servidor o con cualquier tipo de
herramientas de terceros compatibles con Oracle. El proceso de usuario que se conecta
no es realmente con el servidor de Oracle . Cuando un usuario final rellena un impreso y
hace clic en un botón Submit, el proceso de usuario generará una sentencia de
INSERCIÓN y lo enviará a un proceso de servidor para la ejecución contra la instancia y
la base de datos. Por lo que corresponde al servidor está sentencia de INSERCIÓN
podría haber sido directamente tecleada en SQL*Plus como lo que es conocido como
SQL ad hoc.
Nunca olvide que toda la comunicación con un servidor de Oracle sigue este modelo
cliente-servidor . La separación del código de usuario del código de servidor se remonta
a las primeras versiones de la base de datos y es inevitable. Aun si el proceso de usuario
se ejecuta en la misma máquina que el servidor, la arquitectura cliente-servidor todavía
se cumple, y los protocolos de red todavía son usados para las comunicaciones entre los
dos procesos. Las aplicaciones que se ejecutan en un entorno de servidor de aplicación
(descrito en la siguiente sección) también siguen el modelo cliente-servidor para su
acceso a la base de datos.
La forma más simple del servidor de base de datos es una instancia conectada a una
base de datos, pero en un entorno más complejo una base de datos puede ser abierta por
muchas instancias. Esto es conocido como un RAC. RAC puede traer muchas ventajas
potenciales, que pueden incluir la escalabilidad, el rendimiento, y tiempo de
indisponibilidad cero. La capacidad de añadir dinámicamente más instancias que se
ejecutan en más nodos a una base de datos es una parte principal de la contribución de la
base de datos.

El Servidor de Aplicación de Oracle


Con la aparición de la Web como la plataforma de comunicaciones estándar para la entrega de
aplicaciones a usuarios finales ha surgido la necesidad de servidores de aplicación. Un servidor de
aplicación reemplaza el software del lado del cliente tradicionalmente instalado en el terminal del usuario
final; esto ejecuta aplicaciones centralizadas, presentándolas a los usuarios en ventanas mostradas en los
navegadores web locales. Las aplicaciones hacen el uso de datos almacenado en uno o varios servidores
de base de datos.

El Servidor de Aplicación de Oracle es una plataforma para desarrollo, despliegue, y gestion de


aplicaciones web. Una aplicación web puede ser definida como cualquier aplicación con la cual los usuarios
se comuniquen vía HTTP. Las aplicaciones web por lo general se ejecutan en al menos tres capas: una
capa de base de datos que maneja el acceso a los datos, la capa de cliente (a menudo un navegador web)
que gestiona la ventana local para comunicaciones con los usuarios, y una capa de aplicación en el medio
que ejecuta la lógica de programa que genera el interface de usuario y las llamadas SQL a la base de
datos.
Las aplicaciones web pueden ser desarrolladas con varias tecnologías, la predominante entre ellas es
Java. Las aplicaciones escritas en Java deberían cumplir con la especificación J2EE (Java 2 Edición de
Empresa) estándar, que define como las aplicaciones deberían ser empaquetadas y desplegadas. J2EE y los
estándares relacionados son controlados por Sun Microsystems y aceptados por prácticamente todos los
desarrolladores de software. El Servidor de Aplicación de oracle es un servidor de aplicación compatible
con J2EE. La implementación de oracle de los estándares permite el balanceo automático de carga y la
tolerancia a fallos por medio del uso de clusters J2EE en diferentes máquinas. El clusterizar permite
virtualizar la provisión del servicio de aplicación; los usuarios solicitan una aplicación que podría estar
disponible en varias sitios, y el cluster trabaja sirviendo la petición del sitio más óptimo. Si un sitio falla,
los otros tomarán su carga, y más recursos pueden ser puestos a disposición de una aplicación si es
necesario. La capacidad de separar la petición de un servicio de su sitio desde la cual es servida y añadir o
eliminar servidores J2EE de un cluster dinámicamente es una parte principal de la contribución del
Servidor de Aplicación de Oracle al GRID.

Es importante notar que el compromiso del Oracle a las normas internacionales es muy fuerte. Las
aplicaciones que se ejecutan en el entorno de Servidor de Aplicación de Oracle pueden conectar a
cualquier base de datos para la cual haya drivers compatibles con Java; no es necesario usar una base de
datos de Oracle. Las aplicaciones desarrolladas con los conjuntos de herramientas del Servidor de
Aplicación de Oracle pueden ser desplegadas en un servidor de aplicación de terceros compatible con
J2EE.

El modelo de procesamiento más simple de aplicaciones web es tres capa: una capa de cliente que
maneja el interface de usuario; una capa media que genera el interface y envía los comandos SQL a la capa
de datos; y una capa de datos que maneja los datos sí mismo. En el entorno de Oracle, la capa de cliente
será un navegador (como Mozilla o Microsoft Internet Explorer) que se maneja la gestión de la ventana
local, controla el teclado, y rastrea movimientos de ratón. La capa media será un Servidor de Aplicación
de Oracle que ejecuta el software (probablemente escrito en Java) que genera las ventanas enviadas a la
capa de cliente para la visualización y los comandos SQL enviados a la capa de datos para su ejecución.
La capa de datos será un servidor de Oracle: una instancia y una base de datos. En este entorno de tres
capas, hay dos tipos de sesiones: sesiones de usuario final de la capa de cliente a la capa media, y sesiones de
base de datos de la capa media a la capa de datos. Las sesiones de usuario final serán establecidas
mediante HTTP. Las sesiones de base de datos son sesiones cliente-servidor que consisten en un proceso de
usuario y un proceso de servidor,descrito en la sección anterior.
Es posible para una aplicación usar un mapeo uno-a-uno de la sesión de usuario final a la sesión de base
de datos: cada usuario, desde su navegador, establecerá una sesión contra el servidor de aplicación, y el
servidor de aplicación establecerá entonces una sesión contra el servidor de base de datos con el nombre
del usuario. Sin embargo, se ha probado que este modelo es muy ineficaz cuando comparado con el modelo
de reutilización de conexión. Con la reutilización de conexión, el servidor de aplicación establece un
número de sesiones relativamente pequeño de base de datos persistentes y pone a disposición de las
peticiónes (haciendo cola de solicitudes si es necesario) a un relativamente gran número de sesiones de
usuario final contra el servidor de aplicación.
Desde el punto de vista de la base de datos, esto no significa ninguna diferencia si un comando SQL
viene de un proceso de lado del cliente, como el SQL*Plus o Microsoft Access o de una sesión reutilizada
de un servidor de aplicación. En el primer caso, todo el proceso de usuario se encuentra en una máquina;
en éste, el proceso de usuario ha sido dividido en dos capas: una capa de aplicaciones que genera el
interface de usuario y una capa de cliente que lo muestra.

Oracle Enterprise Manager

El creciente tamaño y complejidad de las instalaciones IT hace que la gestión de ellas sea una tarea
difícil. Esto no es sorprendente: nadie ha dicho que la gestión de un entorno eficaz necesariamente debe
ser simple. Sin embargo, las herramientas de gestión pueden hacer la tarea más fácil y el personal de
gestión más productiva

FIGURE 1-2
Stateful persistent
Browse
sessions over
r
Oracle Net

Browse
r

Browser Applicati Databa


on se
server server

Browser

Stateless
nonpersistent
sessions over
HTTP
El Oracle Enterprise manager se presenta en tres formas:

■ Control de Base de datos


■ Control de Servidor de Aplicación
■ Grid Control

La parte de enterprise manager de Oracle que viene como Database Control es un instrumento gráfico
para la gestión de una base de datos, que puede ser una base de datos en RAC. Este consiste en un proceso
de Java que se ejecuta en la máquina del servidor de base de datos. Los administradores se conectan al
Control de Base de datos mediante un navegador, y el Control de Base de datos entonces conecta al
servidor de base de datos. El Control de base de datos tiene funciones para la gestión en tiempo real y
supervisar, ejecutar trabajos planificados, y avisar de alertas de forma interactiva y por el e-mail.
El Enterprise manager de oracle Application Server Control es un instrumento gráfico para manejar
una instancia del servidor de aplicación o un grupo de instancias. La tecnología que se agrupa es
dependiente de la versión. Hasta el Servidor de Aplicación de Oracle 10g Release 2, los servidores de
aplicación clusterizados fueron manejados como una "granja", con un repositorio de metadatos (típicamente
residente en una base de datos de Oracle) como el punto de gestión central. Des la release 3en adelante, la
tecnología está basada en cluster de J2EE , que no es patentado al Oracle.
El enterprise manager de oracle Grid Control globaliza el entorno de gestión. Un repositorio de gestión
(residente en una base de datos de Oracle) y uno o varios servidores de administración para manejar el entorno
completo: todas las bases de datos y servidores de aplicación, dondequiera que ellos puedan estar. El Grid
Control también puede manejar los nodos, o máquinas, en las cuales los servidores se ejecutan, así como (a
través de plug-ins) una amplia gama de productos de terceros Cada nodo administrado se ejecuta un proceso
de agente, que se encarga de controlar el destino gestionada en el nodo: estado de los trabajos en ejecución en
su contra y presentación de informes, los niveles de actividad y las condiciones de alerta al servidor(es) de
gestión.
El Grid Control da una vista holística del entorno y, si está bien configurado, hace la administración
mucho más productiva que sin el. Se hace posible para un administrador manejar con eficacia cientos de
servidores.

Computación grid
Fundamental para el concepto de computación Grid es la virtualización. Esto significa que en todos
los niveles hay una capa de abstracción entre lo que se pide y lo que se proporciona. Los usuarios finales
piden un servicio de aplicación y dejan que el GRID calcule qué servidor del cluster de aplicación J2EE
puede proporcionarla mejor. Los servidores de aplicación piden un servicio de base de datos y dejan al
GRID que decida de que nodo del RAC los datos mejor pueden ser servidos. Dentro del GRID hay un
mapeo de los posibles servicios a los proveedores de servicios disponibles, y existen algoritmos para la
asignación de la carga de trabajo y recursos de forma apropiada.

El resultado es que los usuarios finales no tienen ni la capacidad ni la necesidad de


conocer de donde sus recursos de computación en realidad le están siendo ofrecidos. La
analogía a menudo es presentada como con el suministro de la electricidad doméstica: es suministrado a
petición, y el dueño de la casa no tiene ninguna forma de saber qué central eléctrica le provee actualmente.
El Grid no es exclusivo al Oracle. Al nivel físico, algún sistema operativo y los vendedores de
hardware proporcionan capacidades parecidas al Grid. Éstos incluyen la capacidad de dividir a servidores
en máquinas virtuales y dinámicamente añadir o eliminar CPU(s) y RAM de las máquinas virtuales según
la demanda. Esto es conceptualmente similar al enfoque del Oracle de dinámicamente la asignación de
servidores de aplicación y recursos de servidor de base de datos a servicios lógicos. No hay razón por la
cual los dos enfoques no puedan ser combinados. Ambos están trabajando hacia la misma meta y pueden
trabajar juntos. El resultado debería ser un entorno donde los recursos adecuados estén siempre
disponibles a la carta, sin tener que hacer frente a los problemas de exceso de capacidad en algunos
momentos y bajo rendimiento en otros. También debería ser posible diseñar un entorno de red sin ningún
punto de fallo único, logrando así el objetivo de tiempo de actividad del 100 por ciento que está siendo
demandada por muchos usuarios. El desarrollador de aplicaciones SQL no tiene que saber como el Grid
ha sido configurado. El SQL será invocado de un servidor de aplicación y ejecutado por un instancia
contra una base de datos: El Grid se encargará de asegurarse de que en cualquier momento hay
disponibles pools de servidores de aplicaciones e instancias de tamaño adecuado para la carga de trabajo
actual.

Herramientas de desarrollo y Lenguajejes


Las tecnologías de servidor de Oracle incluyen varias utilidades para desarrollar aplicaciones, algunas
existen dentro de la base de datos, otros son externas a ella.

Dentro de la base de datos, es posible usar tres lenguajes. El que es inevitable, y que es el objeto de este
libro, es SQL. SQL es usado para el acceso a los datos, pero no puede ser usado para desarrollar
aplicaciones completas. Este no tiene ninguna función para desarrollar interfaces de usuario, y este
también carece de las estructuras procesales necesarias de manipular filas individualmente. Los otros
dos lenguajes disponibles dentro de la base de datos llenan estos huecos. Ellos son PL/SQL y Java.
PL/SQL es un lenguaje de la tercera generación (3GL) patentado por Oracle. Este tiene las
construcciones habituales de procedimiento (if-then-else y looping) y las utilidades para diseñar el
interface de usuario. En el código de PL/SQL, uno puede insertar llamadas a SQL. Así, una aplicación
PL/SQL podría usar SQL para recuperar una o varias filas de la base de datos, luego realizar varias
acciones basadas en su contenido, y luego crear más SQL para escribir filas de nuevo a la base de
datos. El Java ofrece una capacidad similar de insertar llamadas de SQL dentro del código Java. Esta es
la tecnología estándar en industria: cualquier programador de Java debe ser capaz de escribir código
que funcione con una base de datos Oracle (o con cualquier otra base de datos compatible con Java.)

Otros lenguajes están disponibles para desarrollar aplicaciones cliente-servidor que se ejecutan desde
fuera de la base de datos. Los más comúnmente usados son C y Java, pero es posible usar la mayor parte de
los principales leguajes 3GLs. Para todos estos lenguajes, Oracle Corporation proporciona OCI (Interface
de Llamada de Oracle) bibliotecas que dejan al código escrito en estas lenguajes establecer sesiones contra
una base de datos de Oracle e invocar comandos de SQL.
Muchas organizaciones no querrán usar un lenguaje 3GL para desarrollar aplicaciones de base de datos.
Oracle Corporation proporciona herramientas de desarrollo de aplicaciones rápidas como la Oracle
Developer Suite , y hay también muchos productos de tercero. Éstos pueden hacer que los programadores
sean mucho más productivos que si ellos trabajaran con un lenguaje 3GL. Como los lenguajes, todos estos
herramientas de desarrollo de aplicaciones terminan por hacer la misma cosa: los comandos de SQL son
enviadas al servidor de base de datos para la ejecución.

OBJETIVO DE CERTIFICACIÓN 1.02

Comprendiendo las Estructuras Relacionales


Un punto crítico para entender SQL es la compresión del paradigma relacional y la capacidad de
normalizar datos en estructuras relacionales. La normalización es el trabajo de analistas de sistemas, ya
que ellos modelan la información comercial en una forma conveniente para almacenar en tablas
relacionales. Es una ciencia que puede ser estudiada durante años, y hay muchas escuelas del
pensamiento que han desarrollado sus propios métodos y notas.

Filas y Tablas
El paradigma relacional modela los datos como tablas de dos dimensiones. Una tabla consta de una
serie de filas, cada una consistente en un conjunto de columnas. Dentro de una tabla, todas las filas tienen
la misma estructura de columnas, aunque es posible que en algunas filas algunas columnas puedan tener
un valor nulo. Un ejemplo de una tabla sería una lista de EMPLOYEES, cada empleado representado por
una fila. Las columnas podrían ser el número de empleado, el nombre, y un código para el departamento
para el cual el empleado trabaja. Cualquier empleado no actualmente asignado a un departamento tendría
esta columna en blanco. Otra tabla podría representar los DEPARTMENTS: una fila por departamento,
con columnas para el código del departamento y el nombre del departamento.
Una nota de terminología: que Oracle se refiere como a una tabla también puede ser llamada una
relación o una entidad. Las filas son a veces llamadas registros o tuplas, y las columnas pueden ser
llamadas atributos o campos. El número de "filas en la tabla" es el "cardinalidad de las tuplas."
Las tablas relacionales se crean con ciertas reglas que restringen y definen los datos. Al nivel de
columna, cada columna debe ser de un cierto tipo de datos, tal como numérico, fecha, o carácter. El tipo
de datos carácter es el más general, ya que puede aceptar cualquier tipo de datos. Al nivel de fila, por lo
general cada fila debe tener alguna característica que la identifica únicamente: esto podría ser el valor de
una columna, como el número de empleado y el número de departamento en los ejemplos precedentes,
que no pueden ser repetidos en filas diferentes. También puede haber reglas que definen relaciones entre
las tablas, tal como la regla general de que cada empleado debe tener asignado un código de departamento
que puede ser relacionado con una fila en la tabla de DEPARTMENTS. Lo siguiente son ejemplos de las
definiciones de datos tabuladas:
Tabla DEPARTMENTS:

Column Name Description Data Type Length


DEPTNO Department number Numeric 2
DNAME Department name Character 14

Tabla EMPLOYEES:

Column Name Description Data Type Length


EMPNO Employee number Numeric 4
ENAME Employee name Character 10
DEPTNO Department number Numeric 2

Las tablas podrían contener estas


filas:
DEPARTMENTS
DEPTNO DNAME
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS

EMPLOYEES:
EMPNO ENAME DEPTNO
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
Viendo las tablas, la estructura de dos dimensiones es clara. Cada fila es de longitud
fija, cada columna es de longitud fija (rellenada con espacios cuando sea necesario), y las
filas son delimitadas con una nueva línea. Las filas se han almacenado con el fin de
código, pero
se trata de una cuestión al azar, no de diseño: las tablas relacionales no imponen ningún
orden particular en sus filas. Departamento número 10 tiene un empleado y departamento
número 40 no tiene ninguno. Los cambios en los datos suelen ser muy eficiente con el
modelo relacional. Los nuevos EMPLOYEES se pueden añadir a la tabla de
EMPLOYEES, o pueden ser trasladados de un departamento a otro simplemente
cambiando el valor DEPTNO en su fila.
Considere una estructura alternativa, donde los datos son almacenados según el paradigma jerárquico. El
modelo jerárquico fue desarrollado antes del modelo relacional, por motivos de tecnología. En los
primeros días de informática, los dispositivos de almacenamiento carecían de la capacidad de mantener
muchos archivos separados que eran necesarios para mantener muchas tablas relacionales. Note que este
problema es evitado en la base de datos de Oracle abstrayendo el almacenamiento físico (archivos) del
almacenamiento lógico (tablas): no hay ninguna conexión directa entre tablas y archivos y seguramente
no necesita el trazar un mapa de uno a uno. En efecto, muchas tablas pueden ser almacenadas en muy
pocos archivos.
Una estructura jerárquica almacena todos los datos relacionados en una unidad. Por ejemplo, el
registro para un departamento incluiría este todo los EMPLOYEES del departamento. El paradigma
jerárquico puede ser muy rápido y muy eficiente en cuanto a espacio. Un acceso a fichero puede ser todo
lo que se necesita para recuperar todos los datos para satisfacer una consulta. Los EMPLOYEES y los
DEPARTMENTS mencionados anteriormente pueden ser almacenados jerárquicamente de la siguiente
manera:

10,ACCOUNTING,7782,CLARK
20,RESEARCH,7369,SMITH,7566,JONES,7788,SCOTT
30,SALES,7499,ALLEN,7521,WARD,7654,MARTIN,7698,BLAKE
40,OPERATIONS

En este ejemplo, las filas y las columnas son de la longitud variable. Las columnas son delimitadas con
una coma, filas con una nueva línea. La extracción de datos es típicamente muy eficiente si la consulta
puede desplazarse por la jerarquía: si uno conoce el departamento de un empleado, el empleado puede ser
encontrado rápidamente. Si uno no lo conoce, la recuperación puede ser lenta. Los cambios en datos
pueden ser un problema si el cambio requiere el movimiento. Por ejemplo, para mover al empleado 7566,
JONES de la RESEARCH a SALES implicaría un esfuerzo considerable por parte de la base de datos
porque el movimiento tiene que ser realizarse como un borrado en una línea y una inserción en otra.
Note que en este ejemplo, mientras es posible tener un departamento sin EMPLOYEES (el departamento
de OPERACIONES) es absolutamente imposible tener un empleado sin un departamento: no hay ningún
lugar donde poner a él o ella. Esto es excelente si hay una regla comercial declarando que todos los
EMPLOYEES deben estar en un departamento, pero no es tan bueno si no es el caso.

El paradigma relacional es muy eficiente en muchos aspectos para muchos tipos de datos, pero no es
apropiado para todas las aplicaciones. Por regla general, un análisis relacional debería ser el primer
enfoque tomado para el modelado de un sistema. Sólo si resulta apropiado debe uno recurrir a estructuras
relacionales. Las aplicaciones donde el modelo relacional ha demostrado ser altamente eficaz incluyen
prácticamente todo el procesamiento de transacciones en línea (OLTP) y Sistemas de Soporte de
Decisiones (DSS). El paradigma relacional puede ser exigente en sus requisitos de hardware y en la
habilidad necesaria para desarrollar aplicaciones a su alrededor, pero si los datos caben, ha resultado ser
el modelo más versátil. Puede haber, por ejemplo, problemas causados por la necesidad de mantener los
índices que mantienen las relaciones entre las tablas y los requisitos de espacio de mantener de múltiples
copias de los datos indexados en los propios índices y en las tablas en las que residen las columnas. Sin
embargo, el diseño relacional es en la mayoría de circunstancias, el modelo óptimo.
Varios editores de software han producido sistemas de administración de bases de datos que se basan
(con niveles variados de la exactitud) en el paradigma relacional; Oracle es sólo uno. La IBM era quizás la
primera compañía para destinar recursos a ello, pero su producto (que más tarde se desarrolló en DB2) no
fue trasladado a plataformas no IBM durante muchos años. El Servidor SQL de Microsoft es otra base de
datos relacional que ha sido limitada por las plataformas en las cuales se ejecuta. Las bases de datos de
oracle, por el contrario, siempre se han portado a todas las plataformas principales desde la primera
versión. Tal vez sea esto lo que le dio la ventaja de Oracle en el mercado RDBMS.

Resumen del Lenguaje SQL


SQL está definido, desarrollado y controlado por organismos internacionales. Oracle Corporation no
tiene por que ajustarse con el estándar SQL, pero ha decido hacerlo. El lenguaje en sí puede considerarse
como algo muy simple (sólo hay 16 comandos), pero en la práctica la codificación SQL puede ser
extraordinariamente complicada.

Estándares de SQL
El Lenguaje de consulta estructurada (SQL) fue inventada primero por un grupo de investigación de
IBM en los años 70, pero de hecho Oracle Corporation (entonces comerciando como Relational
Software, Inc.) afirma haber vencido a IBM al llegar al mercado unas semanas antes con la primera
versión comercial: Oracle 2, lanzado en 1979. Desde entonces el lenguaje ha evolucionado
enormemente y ya no es dirigida por ninguna organización. SQL es ahora una norma internacional Es
administrado por los comités de ISO y ANSI. ISO es la Organización Internacional de Normalización,
con sede en Ginebra; ANSI es el American National Standards Institute, con sede en Washington, DC.
Los dos organismos cooperan, y sus normas de SQL son idénticas.

Las primeras versiones de la base de datos de Oracle usaron una implementación de SQL que tenía
algunas desviaciones significativas del estándar. Esto no era porque el Oracle era deliberadamente quería
ser diferente: era por lo general porque Oracle puso en práctica aspectos que estaban por delante del
estándar, y cuando el estándar se puso al corriente, este usó una sintaxis diferente. Un ejemplo es la
relación externa, que Oracle puso en práctica mucho antes que el estándar SQL; cuando el estándar
SQL introdujo la relación externa, Oracle añadió la compatibilidad a la nueva sintaxis de relación
manteniendo el soporte a su propia sintaxis patentada. Oracle Corporation garantiza el cumplimiento
futuro mediante la inserción de personal en los diversos comités de la ISO y ANSI y ahora está
ayudando a conducir el estándar SQL adelante.

Mandatos SQL
Éstos son los 16 comandos de SQL, separados en los grupos comúnmente usados:
El Lenguaje de Manipulación de Datos (DML) comandos:

■ SELECT
■ INSERT
■ UPDATE
■ DELETE
■ MERGE

El Lenguaje de Definición de Datos (DDL) comandos:

■ CREATE
■ ALTER
■ DROP
■ RENAME
■ TRUNCATE
■ COMMENT

El Lenguaje de Control de Datos (DCL) comandos:

■ GRANT
■ REVOKE

El Lenguaje de Control de Transacción (TCL) comandos:

■ COMMIT
■ ROLLBACK
■ SAVEPOINT

El primer comando, SELECT, es el tema principal de los Capítulos 2 a 9.


Los comandos de DML restantes son cubiertos en el Capítulo 10, junto con los comandos de TCL.
DDL es detallado en los Capítulos 11 y 12. DCL, que tiene que ver con la seguridad, sólo es brevemente
mencionado: esto más cae más en el dominio del administrador de base de datos que de los
desarrolladores.

Un Lenguaje orientada al conjunto


La mayor parte de lenguajes 3GLs son procidementales. Los programadores que trabajan en lenguajes
procedimentales especifican que hacer con datos, una fila a la vez. Programadores que trabajan en un
lenguaje orientado a conjuntos dicen lo que ellos quieren hacer a un grupo de filas y dejan el trabajo de
como hacerlo a la base de datos, sin embargo muchas filas están en el conjunto.
Los lenguajes de procedimientos son por lo general menos eficientes que lenguajes orientadas al
conjunto en cuanto a la gestión de datos, tanto en cuanto al desarrollo como en cuanto a la ejecución. Una
rutina de procedimiento para recorrer a través de un grupo de filas y actualizar uno a uno implica muchas
líneas de código, donde SQL puede hacer toda la operación con un solo comando: aumenta la
productividad de los programadores. Durante la ejecución del programa, el código procesa la orden en la
base de datos sin ninguna opción, sino que debe ejecutar el código que se ha escrito. Con SQL, el
programador declara lo que él o ella quieren hacer, pero no como hacerlo: la base de datos tiene la
libertad de calcular como mejor realizar la operación. Esto dará por lo general mejores resultados.
Donde SQL deja de proveer una solución completa consiste en que es puramente una lenguaje de
acceso a los datos. La mayor parte de aplicaciones necesitarán construcciones procedimentales, como el
control de flujo: ramificaciones condicionales e iteración. Ellos también tendrán por lo general que
control de pantalla, instalaciones de interface de usuario, y variables. SQL no tiene nada de esto. SQL es
un lenguaje orientado al conjunto capaz únicamente de dar el acceso a los datos. Para el desarrollo de
aplicaciones, uno necesitará por lo tanto un lenguaje procedimental que pueda invocar llamadas de SQL.
Es por lo tanto necesario para SQL trabajar con una lenguaje de procedimientos.
Considere una aplicación que solicita al usuario un nombre, recupera todas las personas con ese
nombre de una tabla, se le solicita al usuario que elija una de ellas, a continuación, elimina a la persona
elegida. El lenguaje procesal dibujará una pantalla y generará apremio para un nombre. El usuario
ingresará el nombre. El lenguaje procedimental construirá una sentencia SQL select usando el nombre
y enviará la sentencia por medio de una sesión de base de datos al servidor de base de datos para la
ejecución. El servidor devolverá un conjunto de filas (toda la gente con aquel nombre) al lenguaje
procedimental, que formateará el conjunto para la visualización al usuario y le solicitará para que elija
uno (o más) de ellos. El identificador para la persona elegida (o la gente) será usado entonces para
construir una senténcia SQL de borrado para que el servidor la ejecute. Si el identificador es un
identificador único (la clave primaria) entonces el conjunto de filas para ser borradas será un conjunto de
sólo una fila; si el identificador es no único, entonces el conjunto seleccionado para la eliminación sería
más grande. El código procedimental no sabrá nada sobre el probable tamaño de los conjuntos
recuperados o borrados.

Uso de las Herramientas de Cliente


Hay numerosos herramientas que pueden ser usados para conectarse a una base de datos de Oracle.
Dos
de las más básicas son SQL*Plus y SQL Developer. Éstos son proporcionados por Oracle Corporation y
son absolutamente adecuados para la mayor parte del trabajo que un desarrollador o un administrador de
base de datos tienen que hacer. La opción entre ellos es en parte un asunto de preferencias personales, en
parte para hacerse con el entorno, y en parte con la funcionalidad. El de SQLDeveloper indudablemente
ofrece mucho más funcionalidad que SQL*Plus, pero es más exigente, necesita un terminal gráfico,
mientras que SQL*Plus puede ser usado en dispositivos en modo de carácter.
Oracle Corporation tiene una historia de producir herramientas simples para relacionarse con una base
de datos que a los usuarios les disgustó y que por lo tanto cayó al desuso. Más recientemente, éstos
incluyen la herramienta iSQL*Plus que fue introducida con la versión 9i y abandonada con la versión
11g. La herramienta que mas ha durado es SQL*Plus, y aunque Oracle Corporation promueva al SQL
Developer muy fuertemente como un remplazo, a toda la gente que trabaja en el entorno de Oracle le
aconsejan el familiarizarse con el.

SQL*Plus
SQL*Plus es una herramienta cliente-servidor para conectar a una base de datos y enviar ad hoc SQL
comandos. También puede ser usada para crear el código de PL/SQL y tiene funciones para formatear
resultados. Está disponible en todas las plataformas a las cuales la base de datos ha sido portada - las
secciones que siguen dan algún detalle de la utilización de SQL*Plus en Linux y Windows. No hay ningunas
diferencias significativas con la utilización de SQL*Plus en ninguna otra plataforma.
En términos de arquitectura, SQL*Plus es un proceso de usuario escrito en C. Este establece una sesión
contra una instancia y una base de datos sobre el protocolo de Red de Oracle. Las plataformas para el
cliente y el servidor pueden ser diferentes. Por ejemplo, no hay ninguna razón de no usar SQL*Plus en
una sesión de comandos de Windows para conectar a una base de datos que se ejecuta en un mainframe
(o al revés) a condición de que las Red de Oracle hayan sido configuradas para hacer la conexión.
SQL*Plus en Linux
El archivo ejecutable SQL*Plus en una instalación de Linux es sqlplus. LA dirección donde se
encuentre este archivo será dependiente de la instalación , pero será típicamente algo como:
/u01/app/oracle/product/db_1/bin/sqlplus
Su cuenta de Linux debería ser configurada apropiadamente para ejecutar SQL*Plus. Hay
algunas variables de entorno que tendrán que ser puestas. Éstos son
ORACLE_HOME
PASO LD_LIBRARY_PATH
La variable ORACLE_HOME señala al directorio de instalación. Un Oracle HOME es el directorio de
instalación de software de oracle: elconjunto de archivos y directorios que contienen el código ejecutable y
algunos archivos de configuración. El PATH debe incluir el directorio de bin en el Oracle Home. El
LD_LIBRARY_PATH debería de incluir el directorio lib en el Oracle Home, pero en la práctica usted
puede trabajar sin poner esto. La figura 1-5 muestra una ventana de terminal de Linux y algunas pruebas para
ver si el entorno es correcto.

En la Figura 1-5, el primer comando echo comprueba si las tres variables


han sido configuradas correctamente: hay un ORACLE_HOME, y los directorios bin y lib
los cuales se establecen como el primer elemento de las variables PATH y LD_LIBRARY_PATH. A
continuación, se confirma que el ejecutable SQL * Plus realmente está disponible en el PATH. Finalmente,
SQL*Plus es ejecutado con un nombre de usuario, una contraseña, y un identificador de conexión
pasándoselo en la línea de comandos. Si las pruebas no devuelven resultados aceptables y SQL*Plus no se
ejecuta deberían de hablar con su administrador de sistema y su administrador de base de datos. Algunos
errores comunes con la entrada en el sistema en sí mismo son descritos en la sección "Creación y Pruebas de
una Conexión a la base de datos" más tarde en este capítulo.
El formato de la cadena es el nombre de usuario de inicio de sesión de base de datos seguido de una barra
diagonal como carácter delimitador, tras el cual va la contraseña del usuario seguida de un símbolo @ como
delimitador, y por último, una conexión de Oracle NET. En este ejemplo, el nombre de usuario es system y
cuya contraseña es orácle, y la base de datos se identifica mediante ORCL.
Después de entrar en el sistema, las siguientes líneas del texto muestran la versión de SQL*Plus
usado, que es 11.1.0.6.0, la versión de la base de datos a la cual la conexión ha sido hecha (que resulta
ser el mismo como la versión de la herramienta SQL*Plus), y qué opciones han sido instaladas dentro de
la base de datos. La última línea es prompt al usuario, SQL>, en este punto el usuario puede escribir
cualquier comando SQL*Plus o SQL. Si la entrada al sistema no tiene éxito con cualquier nombre de
usuario (probablemente no system) que usted ha sido asignado, deberían hablar de ello con su
administrador de base de datos.

SQL*Plus en Windows Históricamente, siempre había dos versiones de SQL*Plus para el


Microsoft Windows: la versión en modo carácter y la versión gráfica. La versión de carácter es el
ejecutable sqlplus.exe, y la versión gráfica era sqlplusw.exe. Con el lanzamiento de la actual
release la versión gráfica ya no existe, pero muchos desarrolladores preferirán usarlo y las versiones
portadas con versiones más antiguas son herramientas absolutamente buenas para trabajar con una base de
datos 11g. No hay ningún problema con la mezcla de versiones : un 11g como cliente de SQL*Plus puede
conectar a una base de datos 10g, y cliente en 10g de SQL*Plus puede conectar a una base de datos 11g.
Después de instalación por defecto de la base de datos de Oracle o sólo del cliente de Oracle en Windows,
SQL*Plus estará disponible como un acceso en el menú de INICIO de Windows. La forma de acceso será
como sigue:

1. Comience
2. Programas
3. Oracle-OraDB11g_home1
4. Desarrollo de aplicaciones
5. SQL*Plus

Sin embargo, el paso exacto será específico de la instalación. La figura 1-6 muestra una entrada en el
sistema a una base de datos con SQL*Plus, ejecutando el acceso. La primera línea del texto muestra la
versión de SQL*Plus, que es la 11.1.0.4.0, y la hora en que el programa fue ejecutado.La tercera línea de
texto es un símbolo de inicio:

Escriba el nombre de usuario:


seguido de la de cadena de conexión en el sistema que se introducido manualmente, que era

system/oracle@orcl

Un cambio que a algunos les gusta hacer en el acceso directo que lanza SQL * Plus, es el evitar que
se presente inmediatamente un mensaje de inicio de sesión. Para ello, se añadie la opción NOLOG al
final del comando
sqlplus/nolog
En vez del acceso del menú de INICIO:se puede simplemente abrir una ventana de comando y
ejecútarlo. El programa inmediatamente presenta un símbolo de inicio para entrar en el sistema, a menos
que usted lo invoque con la opción de NOLOG descrita arriba.

A 1-6

Figura 1.6.conexión a base de datos con SQL*plus.


Las pruebas del entorno y la necesidad de iniciar las variables si ellas no son
correctas, como se ha descrito anteriormente para una instalación de Linux, no son por lo general
necesarios en una instalación de Windows. Esto es porque las variables son puestas en el Registro de
Windows por el Oracle Universal Instaler cuando el software es instalado. Si SQL*Plus no se ejecuta con
éxito, compruebe las variables de Registro. La figura 1-7 muestra la sección relevante del Registro,
visualizado enWindows con regedit.exe. Dentro del Registro, navegue a la clave:
KEY_OraDb11g_home1 de ORACLE en SOFTWARE de la entrada HKEY_LOCAL_MACHINE El
elemento final de este paso de navegación tendrá un nombre diferente si allí tienen
Varias instalaciones 11g en la máquina.
Estos se refieren a la ubicación del ejecutable sqlplus.exe y la ruta del menú Inicio de navegación para
alcanzar el acceso directo que va a poner en marcha.

Creando y Probando una Conexión a la base de datos SQL*Plus no tiene ningún


modo de almacenar cadenas de conexión a la base de datos. Cada vez que un usuario desea conectar a una
base de datos, el usuario debe decir a SQL*Plus quién es y a que base de datos desea conectarse. Hay
variaciones según la seguridad específica para el sitio.
FIGURA 1-7

Las variables de registro

Instalaciones, pero los medios más comunes del acceso a la base de datos es presentando un nombre de
usuario y una contraseña. Hay dos formas comúnmente usadas para identificar la base de datos ya sea
dando un alias que se resuelve en los detalles completos de conexión, o mediante la introducción de todos
los detalles.

Desde la línea de comandos del sistema operativo, se ejecutan estos comandos de SQL * Plus para
conectar la base de datos como usuario SCOTT cuya contraseña es TIGRE. uso de cada una de las
opciones:
sqlplus scott/tiger@orcl
sqlplus scott/tiger@linsrv1.bplc.co.za:1521/orcl.bplc.com
El primer ejemplo usa un alias, orcl, para identificar la base de datos. Esto debe ser resuelto
en el detalle completo de conexión. Esta resolución puede ser hecha de varios modos, pero de una u otra
forma debe ser llevada a cabo. Las técnicas habituales para esto deben usar un archivo de texto llamado
tnsnames.ora, o conectar con un directorio LDAP, como Directorio Activo de Microsoft o Directorio de
Internet de Oracle del Oracle.
El segundo ejemplo proporciona todos los detalles para conectar en la línea de comandos. Los
detalles de conexión necesarios son el hostname del servidor en el cual el instancia de base de datos se
ejecuta; el puerto de TCP en el cual esta escuchando el listener de la base de datos de Oracle; y el
servicio de base de datos al cual el usuario desea que el listener de la base de datos le conecte. La
primera técnica, donde el usuario sólo tiene que escribir un alias, requiere que el administrador de base
de datos configure un mecanismo de resolución de nombre; la segunda técnica sólo puede trabajar si el
usuario sabe los detalles él mismo.
Hay varias circunstancias que causarán que un intento de conexión SQL*Plus de fallar. La figura 1-8
ilustra algunos más problemas comunes.

FIGURA 1-8

Figura 1.8. algunos problemas comunes


En primer lugar, el usuario inicia SQL * Plus desde una ventana de comandos del sistema operativo
Windows, usando la opción NOLOG para evitar el mensaje de login inmediata. No hay problema hasta
ahora.
En segundo lugar, desde el indicador SQL>, el usuario emite una petición de conexión, lo que falla con
un error conocido:

ORA-1254: TNS: no se pudo resolver el identificador de conexión especificado

Este error se debe a que el identificador de conexión dada, wrongalias, no se puede resolver en los
detalles de conexión de base de datos por el TNS (Transparent Network Substrate-no es un acrónimo
particularmente facil de recordar) de la capa de red de Oracle. El método de resolución de nombres a
utilizar y su configuración es un asunto para el administrador de base de datos. En este caso, el error es
evidente: el usuario ha introducido el identificador de conexión equivocado.
El segundo intento de conexión proporciona el identificador correcto, ORCL. Esta falla con

ORA-12541: TNS: no se escucha

Esto indica que el identificador de conexión se ha resuelto correctamente en la dirección


de un listener de base de datos, pero que el listener no se está ejecutando realmente. Tenga en cuenta que
otra posibilidad sería que la resolución de la dirección está defectuosa y está enviando SQL * Plus a la
dirección equivocada. A raíz de este error, el usuario debe comunicarse con el administrador de la base de
datos y pedirle que inicie el listener. A continuación, intente de nuevo.
La tercera petición de conexión falla con

ORA-12514: TNS: el listener no sabe actualmente el descriptor de servicio requerido en la conexión.

Este error se genera por el listener de la base de datos. SQL * Plus ha encontrado el listener sin
problemas, pero el listener no puede hacer la conexión hacia el servicio de la base de datos. La razón más
probable para esto es que la instancia de base de datos no ha sido iniciada, por lo que el usuario debe
solicitar al administrador de la base de datos para que la inicie y, a continuación, inténtelo de nuevo.
La cuarta solicitud de conexión falla con
ORA-01017: invalid nombre de usuario / contraseña, inicio de sesión denegado

Para recibir este mensaje, el usuario debe tener contacto con la base de datos. El usuario tiene acceso a la
instancia de base de datos la cual está en ejecución. El usuario sólo tiene la contraseña o nombre de
usuario incorrecto. Tenga en cuenta que el mensaje no indica si se trata de la contraseña o el nombre de
usuario que está mal si lo hiciera, sería dar información
.
Finalmente, el quinto intento de conexión es satisfactoria
El ejemplo precedente demuestra una técnica de resolución de los problemas que usted usará
con frecuencia.

SQL Developer
El Developer de SQL es un instrumento para conectar a una base de datos de Oracle (o, de hecho,
algunas bases de datos de no oracle también) y ejecutar ad hoc comandos de SQL. Este también puede
manejar objetos de PL/SQL. A diferencia de SQL*Plus, es un instrumento gráfico con asistentess para
acciones comúnmente necesarias. El SQL Developer está escrito en Java y requiere que un Entorno de
runtime de Java (JRE) .
Siendo escrito en Java, el SQL Developer está disponible en todas las plataformas que soportan la
versión apropiada del JRE. No hay ninguna diferencia significativa entre plataformas.

Instalación y ejecución de SQL developer


El SQL Developer no se instala con el Oracle Universal Instaler, que es usado para instalar todos los
otros productos de Oracle. Este no existe en un Oracle Home, pero es un producto completo en si
mismo. La última versión puede ser descargada del sitio web de Oracle Corporation.

Una instalación de la base de datos 11g incluirá una copia del SQL Developer, pero no será la
versión actual.

Para instalar el SQL Developer, descomprima el archivo de ZIP. Eso es todo. Este realmente requiere
tener la versión JDK1.5, que la versión 1.5 del runtime de Java, esté disponible: esta pertenece a Sun
Microsystems. Pero si JDK1.5 (o una versión posterior) no está disponible ya en la máquina utilizada, hay
versiones autoinstalable del SQL Developer para Windows que la incluye. Para otras plataformas aparte
de Windows, el JDK1.5 debe ser preinstalado. Descárguelo de la web de Sun Microsystems e instálela
según las directrices específicas para la plataforma. Para comprobar que el JDK está disponible con la
versión correcta, de un sistema operativo ejecute el siguiente comando:
Java - versión
Esto debería devolver algo como lo siguiente:

la Java de versión "1.5.0_13" de Java (TM) 2 Entorno de tiempo de Ejecución,


Edición Estándar (construyen 1.5.0_13-b05) HotSpot de Java (TM) Cliente VM
(construyen 1.5.0_13-b05, modo mezclado, compartiendo)
Si no sale algo como esto, usando wich Java puede ayudar a identificar el problema: el PATH
podría estar apuntando a una versión incorrecta.
Una vez que el SQL Developer ha sido descomprimido, cambie su directorio actual al
directorio en el cual el SQL Developer fue descomprimido y lo ejecuta. En Windows, el
el archivo ejecutable es sqldeveloper.exe. En Linux, es el shell script sqldeveloper.sh.
Acuérdese de comprobar que la variable de entorno de VISUALIZACIÓN(DISPLAY) ha sido puesta a
un valor conveniente (tal como 127.0.0.1:0.0, si el SQL Developer está siendo ejecutado en la consola de
sistema) antes de ejecutar el shell script.
Cualquier problema con instalar el JRE y lanzar SQL Developer debería ser notificado a su
administrador de sistema.

Figura 1.9, interfaz de usuario de sql developer

La Figura 1-9 de Interface de Usuario de SQL Developer muestra el Interface de Usuario


de SQL Developer después de conectar a una base de datos.
La disposición general de la ventana SQL Developer es un panel de la izquierda para la
navegaciónbalrededor de los objetos, y un panel de la derecha para mostrar e introducir información.
En la figura, el panel de la izquierda muestra que una conexión se ha hecho a una
base de datos. La conexión se denomina orcl_sys. Este nombre es sólo una etiqueta elegida cuando la
conexión se ha definido, pero la mayoría de los desarrolladores utilizan algún tipo de convención en los
nombres en este caso, el nombre elegido es el identificador de base de datos, que es ORCL,y el nombre
del usuario con el que se ha realizado la conexión, que era sys. Las ramas de debajo listan todos los tipos
de objetos posibles que pueden ser manejados. Al desplegar las ramas se enumeran los objetos. El panel
de la derecha tiene una parte superior que solicita al usuario que escriba una instrucción SQL y una parte
inferior que muestra el resultado de la ejecución. La disposición de paneles y las fichas visibles en ellos
es muy customizable.
Los botones de menú a través de la barra de menú superior dan el acceso a las funciones estándares:
■ Archivo:en esta opción se puede realizar lo siguiente: desde donde se puede guardar el trabajo y la
salida de la herramienta.
■ Editar:da la opción de elegir desde donde se puede deshacer, rehacer, copiar, pegar, buscar, etc.
SQL Developer interfaz de usuario.
■ Navegar: permite moverse entre los marcos de la ventana y para desplazarse por el código que se
está editando.
■ Ejecutar: permite la ejecución de las sentencias SQL, scripts SQL o bloque PL / SQL en el que se
está trabajando.
■ Depurar: en lugar de ejecutar un bloque completo de código, permite ejecutarlo paso a paso hiendo
línea a línea con puntos de interrupción.
■ Opciones: permite seleccionar las fuentes que se utilizarán al escribir código SQL y PL / SQL,así
como los caracteres tales como la terminación de palabras clave y sangrado automático.
■ Herramientas: permite el enlace a programas externos, como SQL * Plus.
■ Herramientas de Migración: permite migrar aplicaciones diseñadas para otras bases de datos
(Microsoft Access, SQL Server y MySQL) al entorno Oracle.
■ Ayuda: Es bastante bueno.
SQL Developer puede ser una herramienta muy útil, y es muy personalizable. Experimente con él,
lea la Ayuda, y configurar la interfaz de usuario de la manera que mejor funcione para usted.
El SQL Developer puede ser un instrumento muy útil, y es muy personalizable. Experimente
con el, lea la ayuda, y configure la interfaz de usuario de la manera que mejor funcione para usted.

Creación de Conexiones a la Base de Datos


La Conexión a la base de datos puede ser creada y guardada para su reutilización. La figura 1-10 muestra
la ventana donde las conexiones pueden ser definidas. Para alcanzar esta ventana, haga clic "el +" símbolo
visible en la paleta de Conexiones mostrada antes en la Figura 1-9.
El nombre de la conexión es arbitraria. En este ejemplo, el nombre elegido es el nombre del
identificador de base de datos de conexión (ORCL) con el sufijo del nombre de usuario (hr) que se
integrarán en la conexión.
El nombre de usuario y la contraseña deben ser ambos suministrados, pero sólo el nombre de usuario
será guardado a menos que la casilla guardar password sea seleccionada. Guardar una contraseña significa
que las futuras conexiones pueden ser hechas sin la petición de ninguna contraseña. Esto es conveniente,
pero muy peligroso si hay cualquier posibilidad que el ordenador desde el que usted está trabajando no
sea seguro. En efecto, usted delega la autenticación a su sistema operativo local: si usted puede entrar en
el sistema, usted puede entrar en el sistema a la base de datos.

FIGURA 1-10
Figura 1.10:como definir una nueva conexión de base de datos.
Asumiendo que usted está utilizando SQL Developer para conectarse a una base de datos Oracle en
lugar de bases de datos de otro fabricante, seleccione la ficha Oracle.
La casilla desplegable te da la opción de conectarse como sysdba. Una conexión sysdba es necesaria antes
de ciertas operaciones particularmente importates (como el arranque y parada de la base de datos) puedan
llevarse a cabo.
Los botones de radio :Tipo de conexión le permiten elegir entre tres opciones:

■ Básico Este pedirá el nombre del equipo del servidor de base de datos, el puerto en el que escucha la
base de datos aceptará solicitudes de conexión, y la instancia (SID) o el servicio al que la conexión se
realizará
■ TNS Si un método de resolución de nombres se ha configurado, un alias de la base de datos se pueden
introducir, en lugar de todos los detalles necesarios para la opción Básica.
■ Avanzada permite la entrada de una completa cadena de conexión JDBC (Java Database Connectivity).
Esta es completamente independiente de Oracle y podría ser utilizada para conectar con cualquier base de
datos que se ajusta al estándar JDBC.

La selección básica requiere que el usuario conozca cómo conectarse a la base de datos, la selección TNS
requiere alguna configuración que sea hecha en la máquina cliente por el administrador de la base de
datos, a fin de que el alias se pueda resolver en los detalles de conexión.

GUIÓN & SOLUCIÓN

Cree los Esquemas de Pruebas


A lo largo de este libro, hay cientos de ejemplos de ejecución de código SQL en las tablas de datos. En
su mayor parte, los ejemplos usan tablas que pertenecen dos esquemas de demostración proporcionados
por Oracle: el esquema HR, que simula una sencilla aplicación de recursos humanos, y el esquema OE,
que simula una aplicación de entrada de pedidos más complicados.
Estos esquemas se pueden crear cuando se crea la base de datos, es una opción presentada por el Asistente
de configuración de base de datos. Si no existen, se pueden crear después mediante la ejecución de
algunos scripts que existen en el Oracle Home de la base de datos.
Un esquema de demostración anterior era SCOTT (password TIGER). Este esquema es más simple que
el de recursos humanos o el de OE. Muchas personas con una larga experiencia de Oracle prefieren utilizar
este esquema, el script de creación del mismo es utlsampl.sql.

Usuarios y Esquemas
En primer lugar, dos definiciones. En el lenguaje de Oracle, un usuario de base de datos, es una persona
que puede iniciar sesión en la base de datos. Un esquema de base de datos es todos los objetos en la base
de datos de propiedad de un usuario. Los dos términos a menudo se pueden utilizar indistintamente, ya que
hay una relación de uno a uno entre los usuarios y esquemas. Tenga en cuenta que un esquema se crea
inicialmente vacío, cuando un usuario se crea con el comando CREATE USER.
Los esquemas se utilizan para almacenar objetos. Estos pueden ser objetos de datos, tales como tablas u
objetos de programación, tales como PL / SQL, los procedimientos almacenados. Los inicios de sesión de
usuario se usan para conectarse a la base de datos y tener acceso a estos objetos. De forma predeterminada,
los usuarios tienen acceso a los objetos en su propio esquema y no a otros, pero la mayoría de las
aplicaciones pueden cambiar esta situación. Por lo general, un esquema puede ser utilizado para el
almacenamiento de datos a los que se tiene acceso por otros usuarios los cuales tienen permiso para usar
los objetos, a pesar de que ellos no son propietarios. En la práctica, muy pocos usuarios tendrán los objetos
en su propio esquema, o permiso para crearlos: tendrán derechos de acceso (que será estrictamente
controlado) sólo a los objetos en otro esquema. Estos objetos serán utilizados por todos los usuarios que
ejecutan la aplicación cuyos datos almacena el esquema. Por el contrario, los usuarios que poseen los
esquemas de almacenamiento de datos no suelen poder iniciar una sesión de base de datos: el único
propósito de su esquema es contener los datos utilizados por otros.
Es imposible que un objeto de datos de exista de forma independiente de un esquema. O en otras palabras,
todas las tablas deben tener un propietario. El propietario es el usuario en cuyo esquema reside la tabla. El
identificador único de una tabla (o cualquier otro objeto de esquema) es el nombre de usuario, seguido por
el nombre del objeto. De ello se deduce que no es posible que dos tablas con el mismo nombre que existan
en el mismo esquema, pero que dos tablas con el mismo nombre (aunque posiblemente diferentes
estructuras o contenidos) puedan existir en diferentes esquemas. Si un objeto no existe en el propio
esquema, para poder acceder a ella hay que calificar su nombre con el nombre del esquema en el que
reside. Por ejemplo, hr.employees es la tabla llamada Employees del esquema del usuario de recursos
humanos. Sólo un
usuario conectado como HR podría llegar a la tabla haciendo referencia a los EMPLOYEES sin un
calificador de nombre de esquema.

Esquemas OE y HR
El esquema de pruebas de HR consiste de siete tablas, conectadas por la clave primaria con
relaciones de clave foránea. La figura 1-11 ilustra las relaciones entre las tablas, como un diagrama
entidad-relación.
FIGURA 1-11
Figura 1.11. Diagrama entidad-relación HR.

Dos de las relaciones mostradas en la figura 1-11 pueden no ser inmediatamente comprensibles.
En primer lugar, existe una relación de muchos a uno de los EMPLOYEES a los EMPLOYEES.
Esto es lo que se conoce como una clave externa que se referencia a sí misma. Esto significa que
muchos EMPLOYEES se pueden conectar a un empleado, y se basa en el hecho de que muchos
EMPLOYEES pueden tener un director, pero el director también es un empleado. La relación es
implementada por la columna manager_id la cual es una clave externa a employee_id, que es la
clave principal de la tabla.
La segunda relación que puede requerir explicación es la que se encuentra entre los
DEPARTMENTS y EMPLOYEES, la cual es bidireccional. La relación de departamento a varios
EMPLOYEES es una relación que indica que puede haber muchos miembros del personal en cada
departamento, con base en la columna dept_id de EMPLOYEES la cual es una clave externa a la
columna principal dept_id de DEPARTMENTS. El empleado a varios DEPARTMENTS es una
relación la cual
muestra que un empleado puede ser el director de varios DEPARTMENTS y es implementado por
la columna manager_id que es una clave externa en la tabla DEPARTMENTS con la columna
employee_id que es clave principal en la tabla EMPLOYEES.

La Tabla 1-1 muestra las columnas de cada tabla en el esquema HR, usando la siguiente
notación :para indicar las claves principales (#), claves foráneas (\), y si las columnas son
opcionales (o) o obligatorio (*).
Comando Columnas

Las tablas son:Tabla 1-1 con las tablas y columnas del schema HR

Tablas Columnas
REGIONS #* region_id
o region_name
COUNTRIES #* country_id
o country_name
\o region_id
LOCATIONS #* location_id
o street_address
o postal_code
* city
o state_province
\o country_id
DEPARTMENTS #* department_id
* department_name
\o manager_id
\o location_id
EMPLOYEES #* employee_id
o first_name
* last_name
* e-mail
o phone_number
* hire_date
\* job_id
o salary
o commission_pct
\o manager_id
\o department_id
JOBS #* job_id
* job_title
o min_salary
o max_salary
JOB_HISTORY #* employee_id
#* start_date
* end_date
\* job_id
\o department_id

Las tablas son:


■ REGIONS tiene filas de las principales áreas geográficas.
■ COUNTRIES tiene una fila por cada país, los cuales están opcionalmente
asignados a una región.
■ LOCATIONS incluye las direcciones individuales, que están opcionalmente
asignados a un país.
■ DEPARTMENTS tiene una fila para cada departamento, opcionalmente
asignado a una ubicación y, opcionalmente, con un director (que debe existir
como un empleado).
■ EMPLOYEES tiene una fila para cada empleado, cada uno de los cuales debe
ser asignado a un puesto de trabajo y, opcionalmente, a un departamento y con
un director. Los directores deben ser ellos mismos EMPLOYEES.
■ JOBS lista todos los posibles puestos de trabajo en la organización. Es posible
que muchos EMPLOYEES tengan el mismo trabajo.
■ JOB_HISTORY enumera los trabajos anteriores realizados por los
EMPLOYEES, identifican de forma única por employee_id y start_date, no es
posible que un empleado mantenga dos trabajos al mismo tiempo. Cada registro
de historial de trabajos se referirá a un empleado, quien ha tenido un trabajo en
ese momento y pudo haber sido miembro de un departamento.

Creación de Esquema de pruebas


Los esquemas de pruebas opción en el Asistente de Configuración de Base de datos
cuando este crea una base de datos. Después de la creación de base de datos, los
esquemas deberían ser desbloqueados y su activada sus contraseñas; en ausencia las
cuentas son bloqueadas, lo que significa que usted no puede entrar en el sistema con
ellas. Estos comandos, que podrían ser ejecutados desdee SQL*Plus o SQL Developer,
lo permitirán entrar en el sistema como los usuarios HR y OE utilizando las contraseñas
HR y OE:
alter user hr account unlock identified by hr;
alter user oe account unlock identified by oe;

Estos comandos para modificar un usuario sólo se pueden ejecutar cuando está
conectado a una base de datos con un usuario con privilegios de DBA, tales como
system.
Si los esquemas no fueron creados durante la creación de la base de datos, pueden
crearse más tarde por ejecutando scripts existentes en el Oracle Home de la base de
datos. Estos
scripts deben ser ejecutados desde SQL * Plus o SQL Developer con un usuario con
privilegios SYSDBA. La secuencia de comandos le pedirá ciertos valores mientras se
ejecuta. Por ejemplo, en Linux, primer lanzamos el SQL * Plus desde una consola de
sistema operativo:

sqlplus / as sysdba

Hay varias opciones para esta conexión, pero la sintaxis anterior por lo general funciona si
la base de datos se ejecuta en la misma máquina donde se ejecuta SQL * Plus. A
continuación, invocar el script desde el prompt SQL>:

SQL> @? / Demo / schema / human_resources / hr_main.sql

El carácter "?" Es una variable que SQL * Plus se expandirá con la ruta de acceso al
directorio Oracle Home. La secuencia de comandos le pedirá la contraseña de RRHH,
tablespace por defecto, y tablespace temporal, la contraseña SYS, y un destino para un
archivo de log de la ejecución del script. Los valores típicos para tablespace por defecto, y
tablespace temporal son el de USERS y TEMP, pero éstos tendrán que haber sido
creados ya. Después de que finalice, conectarse a la base de datos como el usuario HR.
Para verificarlo para ello:
ejecute estas sentencias:

SQL> show user;

Usted verá que está conectado actualmente como el usuario HR; entonces ejecutando:
SQL> select table_name form user_tables;
Verá una lista de las siete tablas del esquema de HR.
Para crear el esquema OE, siga el mismo proceso,ejecutando el script:
?/demo/schema/order_entry/oe_main.sql
El proceso para crear los esquemas en Windows es idéntico, excepto por el sentido
de los delimitadores que son en sentido contrario, en Windows se ejecutaría de la
siguiente forma:

? \demo\schema\human_resources\hr_main.sql

RESUMEN DE CERTIFICACIÓN
SQL es una lenguaje para el acceso gerente a datos normalizados almacenados en el
relacional
bases de datos. No es una lenguaje de desarrollo de aplicaciones, pero es invocado por
tales lenguajejes cuando ellos tienen que tener acceso a datos. Las tecnologías de
servidor de Oracle proporcionan una plataforma a desarrollar y desplegar tales
aplicaciones. La combinación de las tecnologías de servidor de Oracle y SQL causa un
entorno que se conforma con el paradigma de base de datos relacional que es una
tecnología de habilitación para la Computación grid.
44
Capítulo 1:
Oracle Server Technologies y el Paradigma Relacional

Los numerosos herramientas de cliente pueden ser usados para conectar a una base de datos de Oracle.
Dos
a condición de que por Oracle Corporation sean SQL*Plus y Developer SQL: SQL*Plus es instalado
como la parte de cada cliente de Oracle y base de datos de Oracle instala, pero el Developer SQL puede
ser instalado como un producto separado. Tanto los herramientas pueden ser usados para prepararse para
los exámenes OCP, como los estudiantes deberían ser familiares con ambos.
Los esquemas de pruebas almacenan datos de ejemplo que son usados para ilustrar el uso de SQL, y
también de instalaciones de desarrollo de Oracle más avanzadas.
Taladradora de dos
minutos
45


TALADRADORA DE DOS MINUTOS
Posición Server Technologies
❑ La base de datos de Oracle almacena y maneja el acceso a datos de usuario. ❑ El Servidor
de Aplicación de Oracle ejecuta aplicaciones que conectan a usuarios al
base de datos.
❑ gerente de Empresa de Oracle es un instrumento para bases de datos gerentes, servidores de
aplicación,
y, de ser deseado, el entorno de calcular entero.
❑ Lenguajejes incorporadas en la base de datos para el desarrollo de aplicaciones son SQL,
PL/SQL, y Java.

Entienda Estructuras Relacionales


❑ Datos debe ser normalizado en tablas de dos dimensiones. ❑ Tablas son conectados por
claves foráneas y primarias. ❑ diagramas de relación de la Entidad representan las tablas
gráficamente.

Resuma la Lenguaje SQL


❑ Los comandos de DML son ESCOGIDOS, INSERCIÓN, ACTUALIZACIÓN, BORRAR, y
FUSIÓN. ❑ Los comandos de DDL son CREAN, CAMBIAN, DEJAN CAER, RENOMBRAN,
TRUNCAN,
y COMENTARIO. ❑ Los comandos de DCL son la SUBVENCIÓN y REVOCAN. ❑ Los
comandos de TCL son DESTINAN, ROLLBACK, y SAVEPOINT.

Use los Herramientas de Cliente


❑ el SQL*Plus es una herramienta de línea de comandos instalada en el Oracle a Casa. ❑ SQL
Developer es un instrumento gráfico instalado en su propio directorio. ❑ Ambos herramientas
requieren una conexión a la base de datos, consistiendo en un nombre de usuario, una contraseña,
y un identificador conectar.

Cree los Esquemas de Pruebas


❑ Los esquemas de pruebas son proporcionados por el Oracle para facilitar aprender, pero
debe ser creado antes de que ellos puedan ser usados.
46
Capítulo 1:
Oracle Server Technologies y el Paradigma Relacional

MÍ PRUEBA
Posición Server Technologies
1. Que componentes de ESTO entorno puede el gerente de Empresa de Oracle Grid Control
¿pueda? (Elija la mejor respuesta.) A. Bases de datos de oracle productos de servidores de
aplicación de B. Oracle C. Third-party D. Las máquinas de servidor E. Todos los susodichos
2. ¿Qué las lenguajejes pueden ejecutar dentro de la base de datos? (Elija todo que se aplican.)
A. SQL B. C C. PL/SQL D. Java E. Cualquier otra lenguaje conectada con las bibliotecas OCI
Entienda Estructuras Relacionales
3. Los datos que son modelados en una forma conveniente para tratar en una base de datos relacional
pueden ser
descrito como siendo (Eligen la mejor respuesta.) A. Forma primero normal B. Third forma normal
C. Forma anormal D. Forma paranormal
4. Un diagrama de relación de la entidad muestra datos modelados en (Elija la mejor respuesta.)
A. Tablas de dos dimensiones B. Tablas multidimensionales C. Estructuras jerárquicas D.
Estructuras orientadas al objeto

Resuma la Lenguaje SQL


Mí Prueba
47
5. SQL es una lenguaje orientada al SET. ¿Cuál de estos aspectos es una consecuencia de esto?
(Elija el
la mejor respuesta.) A. Las filas individuales deben tener un identificador único. B. Sets de
usuarios puede ser manejado en grupos. C. Las select de SQL pueden ser colocadas dentro de
bloques del código en otras lenguajejes, como la Java y
PL/SQL.
D. Una select puede afectar filas múltiples.
6. ¿Cuál de estas construcciones no es la parte de la lenguaje SQL? (Elija todo que se aplican.)
A. Iteración, basada en HACEN.. MIENTRAS B. Iteración, basada en PARA.. DESPUÉS C.
Ramifiarse, basado en SI.. ENTONCES.. MÁS D. Control de transacción, basado en
DESTINAN E. Control de transacción, basado en ROLLBACK

Use los Herramientas de Cliente


7. ¿Cuáles de estas select en cuanto al Developer SQL es correcta? (Elija dos respuestas.)
A. El Developer de SQL no puede conectar a bases de datos antes que la liberación 10g. B. El
Developer de SQL puede ser instalado fuera de un Oracle a Casa. C. El Developer de SQL
puede almacenar contraseñas. D. El Developer de SQL confía en un directorio LDAP para la
resolución de nombre.
8. ¿Cuáles de lo siguiente es requisitos para usar al Developer SQL? (Elija dos correcto
respuestas.) A. Un Entorno de Tiempo de ejecución de Java B. Las bibliotecas OCI C. Un
método de resolución de nombre, como LDAP o un TNSNAMES.ORA archiva D. Las
bibliotecas SQL*Plus E. Un terminal gráfico
48
Capítulo 1:
Oracle Server Technologies y el Paradigma Relacional

Cree los Esquemas de Pruebas


9. ¿Dónde pueden los esquemas de pruebas ser creados? (Elija la mejor respuesta.)
A. Los esquemas de pruebas deben ser creados en una base de datos de pruebas. B. Los esquemas
de pruebas no pueden ser creados en una base de datos de producción. C. Los esquemas de
pruebas pueden ser creados en cualquier base de datos. D. Los esquemas de pruebas pueden ser
creados en cualquier base de datos si el usuario de pruebas es
creado primero. 10. ¿Cómo puede usted mover un esquema de un usuario al otro? (Elija la
mejor respuesta.)
A. Use el comando de ESQUEMA MOVE CAMBIAR. B. Usted no puede mover un esquema de un
usuario al otro. C. Un esquema sólo puede ser movido si es vacío (o si todos los objetos dentro de
ello han sido dejados caer). D. Adjunte al nuevo usuario al esquema, luego separe al viejo usuario
del esquema.

Capítulo 2:
Este capítulo explora los conceptos de extracción o recuperación de los datos almacenados en tablas
relacionales usando la instrucción SELECT. La sentencia se presentó en su forma básica y
progresivamente se irá ampliando la funcionalidad de la misma. A medida que aprende las reglas que
rigen esta sentencia, un punto importante a recordar es que la instrucción SELECT nunca altera la
información almacenada en la base de datos. En su lugar, se proporciona un método para la extracción de
la información en modo de sólo lectura.

Enumerar la capacidad de la Sentencias SQL: SELECT

Saber cómo recuperar datos en un formato fijo utilizando un lenguaje de consulta es el primer paso hacia
la comprensión de la capacidad de las sentencia SELECT. Al proporcionar la relación existente entre la
teoría de cómo se almacenan los datos en las tablas y la visualización práctica de la estructura de estas
tablas. Estos temas forman un precursor importante a la discusión de las capacidades de la instrucción
SELECT. Las tres áreas principales exploradas son:

■ Presentación de la sentencia SQL SELECT

■ El comando DESCRIBE TABLE


■ Capacidades de la sentencia SELECT

La introducción del SQL Select SENTENCIA


La instrucción SELECT de Lenguaje de Consulta Estructurado (SQL) tiene que ser la
única construcción no hablada de lenguaje que es más potente. La sentencia SELECT
es un mecanismo elegante, flexible, extensible, que se ha creado para recuperar
información de una tabla de base de datos. Una base de datos serviría de poco si no se
pudiera consultar para responder todo tipo de preguntas. Por ejemplo, usted puede
tener una base de datos que contiene los registros financieros personales, como sus
estados de cuenta bancarios, sus facturas de servicios públicos, y sus nóminas. Desde
aquí se puede consultar a la base de datos el obtener una lista actualizada y ordenada
de sus facturas de servicios eléctricos durante los últimos seis meses o consultar su
estado de cuenta para obtener una lista de los pagos realizados a una cuenta
determinada en el mismo período. La mayor funcionalidad de la instrucción SELECT
es su encapsulamiento en un simple formato que permite realizar preguntas que se
harán a la base de datos de una manera natural.

Las tablas, también conocidas como relaciones, se componen de filas de información divididas por
columnas. Consideremos dos de las tablas de ejemplo presentados en el capítulo anterior: la tabla
EMPLOYEES y la tabla DEPARTMENTS. Este conjunto de datos de la muestra se basa en la
información de recursos humanos (HR) de una organización ficticia. En la terminología Oracle, cada
tabla pertenece a un esquema (propietario): en este caso el esquema HR. La tabla EMPLOYEES
almacena filas o registros de información. Estos contienen varios atributos (columnas) que describen cada
empleado en la organización. La tabla DEPARTMENTS contiene información descriptiva sobre cada
departamento dentro de la organización, almacenado como filas de datos divididas en columnas.
Suponiendo una conexión a una base de datos que contiene el esquema HR muestra está disponible,
utilizando SQL * Plus o SQL Developer puede establecer una sesión de usuario. Una vez conectado a la
base de datos, usted está listo para comenzar su gira de SQL.

El mandato DESCRIBE TABLE

Para obtener las respuestas que uno busca, hay que hacer las preguntas correctas. Una comprensión de los
términos de referencia, que en este caso, son tablas relacionales, es esencial para la formulación de las
preguntas correctas. Una descripción de la estructura de una tabla es útil para establecer qué preguntas se
pueden hacer de la misma. El servidor de Oracle almacena información acerca de todas las tablas en un
conjunto especial de tablas que es el diccionario de datos, Almacena definiciones de objetos de base de
datos en un formato centralizado, ordenado y estructurado.
Una clara distinción debe hacerse entre almacenar la definición y el contenido de una tabla. La definición
de una tabla incluye información como el nombre de la tabla, propietario de la tabla, los detalles sobre las
columnas que lo componen, y su tamaño físico de almacenamiento en disco. Esta información también se
denomina metadatos. El contenido de una tabla se almacena en filas y se refiere a los datos.
La estructura de metadatos de una tabla puede obtenerse mediante una consulta a la base de datos para el
listado de columnas que la componen utilizando el comando DESCRIBE. La forma general de la sintaxis
de este comando es intuitiva:
DESC [RIBE] <SCHEMA>. Nombretabla
El comando describe puede reducirse a DESC. Todos las tablas pertenecen a un esquema o propietario.
Si usted está describiendo una tabla que pertenece al esquema al que se ha conectado, el <SCHEMA>
parte del comando puede ser omitido. La figura 2-1 muestra cómo la tabla employees se describe desde
SQL * Plus después de conectarse a la base de datos como el usuario HR con el comando DESCRIBE
EMPLOYEES y cómo la tabla DEPARTMENTS

Figura 2.1, descripción de las tablas employees, departments y dual


es descrita usando el comando corto: DESC HR.DEPARTMENTS. El prefijo HR puede
ser omitido ya que la tabla comando de DEPARTAMENTS pertenece al esquema de
HR. El esquema de HR (y cualquier otro esquema) tienen acceso a una tabla especial
llamada DUAL, que pertenece al esquema SYS. Esta tabla puede ser estructuralmente
descrita con el comando: DESCRIBE SYS.DUAL.

La descripción de tablas obtiene resultados interesantes y útiles. Usted sabe qué


columnas de una tabla pueden ser seleccionadas ya que sus nombres son mostrados.
Usted también sabe la naturaleza de los datos contenidos en estas columnas ya que el
tipo de datos de columna es expuesto. Se hablan de tipos de datos de columna
detalladamente en el Capítulo 11. Para la discusión corriente, es suficiente considerar
las columnas de tipo de datos diferentes explicado en esta sección.
Las columnas numéricas a menudo son especificadas como el NÚMBER (p, s), donde
el primer parámetro es la precisión y el segundo es la escala. En la Figura 2-1, la columna
de SALARY de la tabla de EMPLOYEES tiene un tipo de datos de: el NÚMBER (8,2).
Esto significa que los valores almacenados en esta columna pueden tener como máximo 8
dígitos. De estos 8 dígitos, 2 debe ser a la derecha de la coma decimal. Un valor de
SALARY de 999999.99 es aceptable, pero un valor de SALARY de 9999999.9 no lo es,
aunque ambos números contengan 8 dígitos.
VARCHAR2 (longitud) las columnas de este tipo de datos almacenan datos de carácter
alfanumérico de longitud variable, donde la longitud determina el número máximo de
caracteres que una columna puede contener. La columna FIRST_NAME de la tabla
EMPLOYEES tiene el tipo de datos VARCHAR2 (20), lo que significa que esta puede
almacenar los nombres de los EMPLOYEES de hasta 20 caracteres. Note que si esta
columna no contiene ningún datos o su contenido es menor de 20 caracteres, esta no
usará el mismo espacio que usaría para almacenar un nombre con 20 carácteres de
longitud. El tipo de datos CHAR(size)especifica columnas de longitud fija donde el
espacio de fila es preasignado para contener un número fijo de carácteres sin tener en
cuenta sus contenido. El CHAR es mucho menos usado que VARCHAR2. A menos que
la longitud de los datos sea previsible y constante, el tipo de datos de CHAR utiliza el
almacenamiento ineficazmente, rellenando el espacio no usado mediante espacios.
Las columnas con tipos de datos DATE y TIMESTAMP almacenan la información de
tiempo y la fecha. DATE almacena un momento en el tiempo con precisión incluyendo
día, mes, año, horas, minutos, y segundos. El TIMESTAMP (f) almacena la misma
información que DATE, pero también es capaz de almacenar segundos fraccionarios.

Una variedad de tipos de datos está disponible para el uso como tipos de datos
de columna. Muchos tienen un objetivo especializado como Binary Large
Objects (BLOBs), usados para almacenar datos binarios como música o
vídeo. La gran mayoría de tablas, sin embargo, usa los tipos de datos de columna
primitivos: NÚMBER, VARCHAR2, y DATE.El tipo de datos TIMESTAMP se ha
hecho extensamente usado desde su introducción en el Oracle 9i. Familiarizarse
e interacctuar con estos tipos de datos le preparan para tratar con una amplia
variedad de consulatas relacionadas con la base de datos.

Las columnas obligatorias, que son obligadas a almacenar datos para cada fila, son
expuestas por la columna de salida "Null?" del comando DESCRIBE que tiene el valor:
NOT NULL. Oracle garantiza que cualquier columna de datos que son restringidos por
el NOT NULL cuando la tabla es creada debe contener algún dato. Es importante notar
que NULL tiene el sentido especial para el servidor de Oracle. NULL se refiere a una
ausencia de datos. Los espacios en blanco no cuentan como NULL ya que ellos están
presentes en la fila y tienen un poco de longitud aunque ellos no sean visibles.

Ejercicio 2.1
EJERZA 2-1 Descripción del Esquema de Recursos humanos
El esquema de HR contiene siete tablas que representan un modelo de datos de un
Departamento de recursos humanos ficticio. La tabla de EMPLOYEES, que almacena
detalles del personal, y la tabla DEPARTMENTS, que contiene los detalles de los
departamentos en la organización, ha sido descrita. En este ejercicio gradual, una
conexión es hecha usando al Developer de SQL con el usuario de HR y las cinco tablas
de muestra restantes son descritas. Ellos son la tabla de JOBS, que guarda la pista de los
tipos de trabajo diferentes disponibles en la organización, y la tabla JOB_HISTORY,
que guarda la pista de los detalles de trabajo de empleados que cambiaron trabajo, pero
permanecieron en la organización. Para entender el modelo de datos mas adelante, las
tablas LOCATIONS, COUNTRIES, y REGIONS, que guardan la pista de la
información geográfica que pertenece a DEPARTMENTS en la organización, serán
descritas.

1. Inicie el SQL Developer y elija Nuevo del menú de Archivo. Elija conexión de Datos- BASE. Si
esta es la primera vez que usted conecta a la base de datos del SQL Developer, se requiere que usted cree
una conexión. Proporcione un nombre de conexión descriptivo e introduzca la HR como el nombre de
usuario. El resto de detalles de conexión deberían ser obtenidos de su administrador de base de datos.
Una vez que la conexión es guardada, elija el botón Conectar.
2. Navegue al editor de SQL, que es la sección titulada introduzca instruccion SQL.
3. Escriba el siguiente comando:: DESCRIBE JOBS. La terminación de este comando con un
punto y coma es opcional.

4. Ejecute el comando DESCRIBE, pulsando la tecla F5 o haciendo clic


el chasquido en el icono de flecha triangular verde localizado en la barra de herramientas encima
del editor de SQL.
5. La descripción de la tabla JOBS aparece en el cuadro d Resultados como se muestra en la figura
siguiente.
6. Los pasos 3 a 5 pueden ser repetidos para describir el resto de tablas JOB_HISTORY ,
LOCATIONS, COUNTRIES, y REGIONS.
7. El SQL Developer proporciona una alternativa al comando DESCRIBE cuando se quiere la
obtención de la información estructural de tablas.
8. Navegue a la tabla LOCATIONS usando al navegante de Árbol localizado en el marco izquierdo
debajo del nombre de conexión.
9. El SQL Developer describe la tabla automáticamente en la parte derecha como mostrado en la
ilustración siguiente.

Capacidades de la sentencia SELECT

Las tablas de bases de datos relacionales están construidas sobre una sólida base matemática llamada teoría
relacional. En esta teoría, las relaciones o tablas, son manipuladas por un lenguaje formal llamado álgebra
relacional. SQL es una interpretación comercial de las construcciones relacionales algebraicas. Tres
conceptos de la teoría relacional abarcan la capacidad de la sentencia SELECT: proyección, selección y
unión.
Proyección se refiere a la restricción de atributos (columnas) seleccionados de una relación o tabla. Al
solicitar información de una tabla, puede solicitar el ver todas las columnas. Por ejemplo, en la tabla
HR.DEPARTMENTS, puede recuperar todas las filas y columnas, con una instrucción SELECT simple.
Esta consulta devolverá los datos de DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID y
LOCATION_ID para cada registro de departamento almacenado en la tabla. ¿Y si quisiera un listado que
contenga sólo las columnas DEPARTMENT_NAME y MANAGER_ID? Bueno, consultaría sólo esas dos
columnas de la tabla. Esta restricción de columnas se denomina proyección.
La selección se refiere a la restricción de las tuplas o filas seleccionadas de una relación (tabla). A menudo
no es deseable recuperar todas las filas de una tabla. Las tablas pueden contener muchas filas y, en lugar de
preguntar por todos ellos, la selección proporciona un medio para restringir las filas devueltas. Tal vez se le
ha pedido a identificar sólo a los empleados que pertenecen al departamento 30. Con la selección es
posible limitar el conjunto de resultados a dichas filas de datos que tienen un valor de DEPARTMENT_ID
30.
La unión, como un concepto relacional, se refiere a la interacción de las tablas entre sí en una consulta.
Estas relaciones proporcionan el mecanismo para unir tablas entre sí. La unión se discutirá ampliamente en
Capítulo7.
Suponga que hay una necesidad de recuperar las direcciones de correo electrónico de todos los empleados
que trabajan en el departamento de ventas. La columna EMAIL pertenece a la tabla EMPLOYEES,
mientras que la columna DEPARTMENT_NAME pertenece a la tabla DEPARTMENTS. Proyección y la
selección de la tabla de departamentos pueden utilizarse para obtener el valor DEPARTMENT_ID que
corresponde al departamento de ventas. Las filas coincidentes en la tabla empleados pueden estar unidos a
la tabla DEPARTMENTS basado en este valor DEPARTMENT_ID común. La columna de correo
electrónico, entonces puede ser proyectado de este conjunto de resultados.
La sentencia SQL SELECT se rige matemáticamente por estos tres principios. Una combinación ilimitada
de proyecciones, selecciones, y uniones proporciona el lenguaje para extraer los datos relacionales
necesarios.

Ejecute una Select SENTENCIA Básica


Las capacidades prácticas de la instrucción SELECT se realizan en su ejecución. La clave para la
ejecución de cualquier sentencia de lenguaje de consulta es un conocimiento profundo de su sintaxis y las
reglas que rigen su uso. Este tema se trata en primer lugar. Será seguido por una discusión de la ejecución
de una consulta de básica antes de usar expresiones y operadores, que aumentan exponencialmente la
utilidad de los datos almacenados en las tablas relacionales. A continuación, el concepto de un valor nulo
se desmitifica, y sus trampas son expuestas. Estos temas se tratarán en las siguientes cuatro secciones:
■ La sintaxis de la instrucción SELECT básica
■ Las reglas están para ser seguidas
■ SQL expresiones y operadores
■ NULL no es nada

Sintaxis de la declaración SELECT Básica

En su forma más primitiva, la instrucción SELECT apoya la proyección de columnas y la creación de


expresiones aritméticas, de carácter, y de fecha. También facilita la eliminación de los valores duplicados
del conjunto de resultados. La sintaxis básica instrucción SELECT es la siguiente:
SELECT * | {columna [DISTINCT] | expresión [alias], ...}
FROM table;
Las palabras clave especiales o palabras reservadas de la sintaxis de la sentencia SELECT aparecen en
mayúsculas. Al utilizar los comandos, sin embargo, el uso en mayúsculas o minñusculas de las palabras
reservadas en la sentencia de consulta no importa. Las palabras reservadas no se pueden utilizar como
nombres de columna u otros nombres de objetos de bases de datos. SELECT ,DISTINCT, y FROM son
tres elementos clave. Una instrucción SELECT está siempre provista de dos o más cláusulas.
Las dos cláusulas obligatorias son la cláusula SELECT y la cláusula FROM. La barra vertical | se utiliza
para denotar OR. Así que usted puede leer la primera forma de la declaración anterior SELECT como:
SELECT * FROM tabla;
En este formato, el símbolo de asterisco (*) se utiliza para designar a todas las columnas. SELECT *
es una manera sucinta de pedir al servidor de Oracle que devuelva todas las columnas posibles. Se utiliza
el símbolo como un atajo que ahorra tiempo en lugar de escribir SELECT column1, column2, column3,
columna4, ..., ColumnX, para seleccionar todas las columnas. La cláusula FROM especifica qué tabla se
consultará para buscar las columnas solicitadas en la cláusula SELECT.
Puede ejecutar el siguiente comando SQL para recuperar todas las columnas y todas las filas de la tabla
de regiones en el esquema HR:

SELECT * FROM regions;

Como se muestra en la Figura 2-2, cuando se ejecuta este comando en SQL * Plus, devuelve todas las
filas de datos y todas las columnas que pertenecen a esta tabla. El uso del asterisco en una instrucción
SELECT se refiere a veces como un consulta "ciega" porque las columnas exactas que se deben buscar no
se especifican.
La segunda forma de la instrucción SELECT básica tiene la misma cláusula FROM como la primera
forma, pero la cláusula SELECT es diferente:

{SELECT columna [DISTINCT] | expresión [alias], ...}


FROM tabla;

Esta cláusula SELECT se puede simplificar en dos formatos:


SELECT column1 (posiblemente otras columnas o expresiones) [alias opcional]
O
SELECT DISTINCT col1 (posiblemente otras columnas o expresiones) [alias opcional]
FIGURA 2-2
Figura 2.2 proyección de todas las columnas de la tabla REGIONS.
Un alias es un nombre alternativo para hacer referencia a una columna o una
expresión. Los alias se utilizan típicamente para la visualización de salida en una forma
fácil de utilizar. También sirven como una forma abreviada de referirse a columnas o
expresiones para escribir menos. Los alias se discutirán en detalle más adelante en este
capítulo. Al enumerar explícitamente sólo las columnas correspondientes en la cláusula
SELECT que, en efecto, proyectan el subconjunto exacto de los resultados que desea
recuperar. La declaración siguiente devolverá sólo la columna REGION_NAME de la
tabla de regiones como se muestra en la Figura 2-2:

SELECT REGION_NAME
FROM REGIONS;

Se le puede consultar que devuelva todas las funciones de los puestos de la


organización que los empleados han ocupado. Para ello se puede ejecutar el comando:
SELECT * FROM JOB_HISTORY. Sin embargo, la sentencia SELECT * devuelve
además las columnas EMPLOYEE_ID, START_DATE, y END_DATE. El conjunto de
r resultados que contiene sólo las columnas job_id y DEPARTMENT_ID se puede
obtener con la sentencia ejecutada en SQL * Plus, que se muestra en la Figura 2-3.
Figura 2.3 proyección de la tabla JOB_HISTORY

El uso de la palabra clave DISTINCT permite eliminar las filas duplicadas del
conjunto de resultados. En numerosas situaciones se requiere un único conjunto de filas
único. Es importante
Observar que el criterio empleado por el servidor Oracle para determinar si una a fila
es única o distinta depende completamente de lo que es especificado después de la
palabra clave DISTINCT en la cláusula SELECT. Seleccionar los valores de JOB_ID
distintos de la tabla de HISTORIA JOB_ devolverá los ocho distintos tipos de trabajo
como se muestra en la Figura 2-4.
Figura 2.4. Distintos JOB_ID de la tabla JOB_HISTORY.
Compárese esta salida con la Figura 2-3, donde diez filas son devueltas. ¿Puede usted ver que hay dos
ocurrencias de los valores AC_ACCOUNT y ST_CLERK JOB_ID? Éstas son las dos filas duplicadas que
han sido eliminadas buscando valores de JOB_ID distintos. Si seleccionamos los distintos valores de la
columna DEPARTMENT_ID en la tabla JOB_ HISTORY devuelve sólo seis filas, como la Figura 2-5
muestra. Los valores de DEPARTMENT_ ID 50, 80, 90, y 110 tienen dos ocurrencias en la comando
JOB_HISTORY, y por ello cuatro filas han sido eliminadas buscando los diferentes valores de
DEPARTMENT_ID.
Un aspecto importante de la palabra clave DISTINCT es la eliminación de valores duplicados en
combinaciones de columnas. Hay diez filas en la tabla JOB_HISTORY. Ocho filas contienen valores de
JOB_ID distintos. Seis filas contienen valores de DEPARTMENT_ID distintos. ¿Puede usted adivinar
cuántas filas contienen combinaciones distintas de valores de DEPARTMENT_ID y JOB_ID? La figura 2-
6 nos muestra,

FIGURA 2-4

FIGURA 2-5

ISTORY
Figura 2.6 Combinaciones de JOB_ID y DEPARTMENT_ID únicos en la tabla JOB_HISTORY

Que hay nueve filas devueltas en el conjunto de resultados que contienen


combinaciones diferentes de JOB_ID y DEPARTMENT_ID, vemos que una fila de la
Figura 2-3 es eliminado. Esta es, por supuesto, la fila que contiene un valor JOB_ID de
ST_CLERK y un valor DEPARTMENT_ID de 50.

Reglas Se suponen para ser Seguidas


SQL es una lenguaje bastante estricta en términos de reglas de sintaxis, pero permanece
simple y
bastante flexible para apoyar una variedad de programar estilos. Esta sección habla de
algunas reglas básicas que gobiernan select de SQL.

La mayúscula o la Minúscula es un asunto del gusto personal sobre el instancia


en el cual las select SQL son presentadas a la base de datos. Los ejemplos usados hasta
ahora han sido escritos en la mayúscula. Muchos developeres, incluso los autores de
este libro, prefieren escribir sus select SQL en la minúscula. También hay un error
común que SQL reservó la necesidad de palabras
Ejecute una Select SENTENCIA Básica
65

ser especificado en mayúscula. Otra vez, esto es hasta usted. La adhesión a un formato
consecuente y estandarizado es aconsejada. Las tres select siguientes son sintácticamente
equivalentes:
SELECCIONE * DE LOCATIONS; Escogido * de LOCATIONS; seleccione * de
LOCATIONS;
Hay una advertencia en cuanto a la sensibilidad de instancia. Relacionándose con
literal
valores, el instancia realmente importa. Considere la columna JOB_ID de la comando
JOB_HISTORY. Esta columna contiene filas de datos que resultan ser almacenados en
la base de datos en la mayúscula; por ejemplo, SA_REP y ST_CLERK. Solicitando que
el SET de resultados ser restringido por una columna literal, el instancia sea crítico. El
servidor de Oracle
trata la petición de todas las filas en la comando
JOB_HISTORY que contienen un valor de St_Clerk
en la columna JOB_ID diferentemente

Las select de SQL pueden de ST_CLERK en columna JOB_ID.


sea presentado a la base de datos en tampoco Metadata sobre la base de datos diferente objeta la
minúscula o la mayúscula. Usted debe pagar es almacenado en ausencia en la mayúscula en los
datos atención cuidadosa al instancia relacionándose diccionario. Si usted pregunta un diccionario
de base de datos con el carácter datos literales y aliases. comando para devolver una lista de tablas
poseídas por la Petición de una columna llamada JOB_ID o Esquema de HORA, es probable
que los nombres de tabla job_id devuelvan la misma columna, pero devuelto son almacenados
en la mayúscula. Esto hace la petición de filas donde los JOB_ID valoran no significan que una
comando no puede ser creada con es el PRESIDENTE es diferente de preguntar un nombre
minúsculo; puede ser. Son sólo más filas donde el valor de JOB_ID es el presidente. común y el
comportamiento por defecto del Carácter de Oracle los datos literales siempre deberían ser el
servidor para crear y almacenar tablas, columnas, y trató en una manera sensible al instancia.
otro objeto de base de datos metadata en mayúscula en
el diccionario de base de datos.

Select Terminators
de la petición de todas las filas que tienen un valor

Los puntos y coma son generalmente usados como la select de SQL terminators. SQL*Plus
siempre requiere una select terminator, y por lo general un punto y coma es usado. Una
select SQL sola o hasta los grupos de select asociadas a menudo son guardados ya que la
escritura archiva para el futuro uso. Las select individuales en escrituras SQL son
comúnmente terminadas por una ruptura de línea (o retorno) y una cuchillada avanzada en
la siguiente línea, en vez de un punto y coma. Usted puede crear una select SENTENCIA,
terminarlo con una ruptura de línea, incluir una cuchillada avanzada para ejecutar la
select, y guardarlo en un archivo de escritura. El archivo de escritura puede ser llamado
entonces desde dentro SQL*Plus. Note que el Developer SQL hace
66
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

no requieren una select terminator si sólo una select sola está presente, pero no se opondrá si uno es
usado. Es la práctica buena para terminar siempre sus select SQL con un punto y coma. Varios ejemplos
de select SQL*Plus siguen:
seleccione country_name, country_id, location_id de COUNTRIES; ciudad sentencia,
location_id,
state_province, country_id de LOCATIONS /
El primer ejemplo del código demuestra dos reglas importantes. En primer lugar, la select
es terminado por un punto y coma. En segundo lugar, la select entera es escrita en una línea. Es
completamente aceptable para una select SQL ser escrito en una línea o atravesar líneas múltiples
mientras ningunas palabras en la select atraviesan líneas múltiples. La segunda muestra del código
demuestra una select que atraviesa tres líneas que es terminado por una nueva línea y ejecutado con una
cuchillada avanzada.

La sangría, la Legibilidad, y la Práctica Buena


Consideran la pregunta siguiente:
Una técnica común
empleado por algunos diseñadores de pregunta de examen prueba la atención al detalle. Un
signo de puntuación ausente solo como un punto y coma puede hacer la diferencia entre una
respuesta correcta y uno incorrecto. La ortografía incorrecta del objeto llama la atención al
detalle de prueba adicional. Pueden pedirle elegir la select correcta que pregunta la comando
de REGIONS. Una de las opciones puede parecer correcta, pero se refiere a la comando de
REGIÓN. Este error de ortografía puede llevar a una select incorrecta elegida.
ciudad sentencia, location_id,
state_province, country_id de LOCATIONS /
Este ejemplo resalta las ventajas de
sangrar su select SQL para realzar la legibilidad de su código. El servidor de Oracle no se opone si la
select entera es escrita en una línea sin la sangría. Es la práctica buena para separar cláusulas diferentes de
la select SENTENCIA en líneas diferentes. Cuando una expresión en una cláusula es particularmente
compleja, a menudo es mejor separar aquel término de la select en una nueva línea. Desarrollando SQL
para encontrar sus necesidades de obteniendo, el proceso
a menudo es iterativo. El intérprete SQL es mucho más útil durante el desarrollo si las
expresiones complejas son aisladas en líneas separadas, ya que los errores son por lo
general lanzados al formato de: "ERROR en línea X:" Esto hace el proceso de depuración
mucho más simple.
Ejecute una Select SENTENCIA Básica
67

GUIÓN & SOLUCIÓN


Usted quiere construir y ejecutar preguntas contra tablas almacenadas en una base de datos de Oracle. ¿Es
encajonado usted a la utilización de SQL*Plus o Developer SQL?
No. El oracle proporciona SQL*Plus y Developer SQL como herramientas libres para crear y ejecutar preguntas.
Hay numerosos herramientas disponibles del Oracle (por ejemplo, Descubridor, Formas, y JDeveloper) y otro
tercero - vendedores que proporcionan un interface a las tablas almacenadas en una base de datos de Oracle.
Para explorar su entorno de base de datos adelante, le gustaría una lista de tablas, poseídas por su esquema
corriente, disponible para usted preguntar. ¿Cómo interroga usted el diccionario de base de datos para
proporcionar este metadata?
El diccionario de datos es un SET de tablas y las vistas de las otras tablas que pueden ser preguntadas vía SQL. La
select TABLE_NAME escogido de TABLAS USER_; pregunta el diccionario de base de datos para una lista de
nombres de tabla que pertenecen al usuario corriente.
¿Preguntando la comando de JOBS para cada fila que contiene sólo el JOB_ID y columnas MAX_SALARY, es
una proyección, selección, o juntura realizada?
Una proyección es realizada ya que las columnas en la comando de JOBS han sido restringidas al JOB_ID y
columnas MAX_SALARY.

EJERCICIO 2-2 Contestando a Nuestras Primeras Preguntas con SQL


En este ejercicio gradual, una conexión es hecha usando SQL*Plus como el usuario de
HORA a
conteste a dos preguntas usando la select SENTENCIA.
Pregunta 1: en Cuántos los DEPARTMENTS únicos tienen EMPLOYEES que
actualmente trabajan
¿ellos?

1. Comience SQL*Plus y conecte al esquema de HORA. 2. Usted puede ser al


principio tentado encontrar la respuesta en los DEPARTMENTS
comando. Un estudio cuidadoso revela que la pregunta pide la información sobre
EMPLOYEES. Esta información está contenida en la comando de
EMPLOYEES.
3. La palabra "única" debería dirigirle para usar la palabra clave DISTINTA.
68
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

4. Combinando los pasos 2 y 3, usted puede construir la select SQL siguiente:


seleccione department_id distinto de EMPLOYEES;

5. Como mostrado en la ilustración siguiente, esta pregunta devuelve 12 filas. Note esto
la tercera fila es vacía. Esto es un valor nulo en la columna DEPARTMENT_ID.

6. La respuesta a la primera pregunta es por lo tanto: Once DEPARTMENTS


únicos tienen
los EMPLOYEES que trabajan en ellos, pero al menos un empleado no han sido
adjudicados a un departamento.

Pregunta 2: ¿Cuántos COUNTRIES están allí en la región de Europa?


1. Esta pregunta comprende dos partes. Considere la comando de REGIONS, que
contiene cuatro REGIONS cada uno únicamente identificado por un valor de
REGION_ID, y la comando de COUNTRIES, que tiene una columna
REGION_ID que indica a que la región un país pertenece.
2. La primera pregunta tiene que identificar el REGION_ID de la región de
Europa. Esto
es llevado a cabo por la select SQL:
seleccione * de REGIONS;
3. La ilustración siguiente muestra que la región de Europa tiene un REGION_ID
valor de 1:
Ejecute una Select SENTENCIA Básica
69

4. Para identificarse que los COUNTRIES tienen 1 como su REGION_ID, usted necesita a ex -
ecute la pregunta de SQL siguiente
seleccione region_id, country_name de COUNTRIES;
5. A mano contando las filas de país con un REGION_ID de 1 en el siguiente
la ilustración ayuda a contestar a la segunda pregunta:
6. La respuesta a la segunda pregunta es por lo tanto: hay ocho COUNTRIES en
la región de Europa por lo que el modelo de datos de HORA está referido.
70
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

Expresiones de SQL y Operadores


La forma general de la select SENTENCIA introdujo la noción esto columnas
y las expresiones son seleccionables. Una expresión es por lo general arreglada de una
operación realizada en uno o varios valores de columna. Los operadores que pueden
seguir valores de columna para formar una expresión dependen del tipo de datos de la
columna. Ellos son los cuatro operadores aritméticos cardinales (adición, substracción,
multiplicación, y división) para columnas numéricas; el operador de encadenamiento
para carácter o columnas de cuerda; y la adición y operadores de substracción para
fecha y columnas timestamp. Como en la aritmética regular, hay un pedido predefinido
de la evaluación (precedencia de operador) cuando más de un operador ocurre en una
expresión. Los soportes redondos tienen la precedencia más alta. La división y las
operaciones de multiplicación son siguientes en la jerarquía y son evaluadas antes de
adición y substracción, que tienen la precedencia más baja. Estos niveles de precedencia
son mostrados en la Tabla 2-1.
Las operaciones con el mismo nivel de la precedencia son evaluadas de la izquierda a
la derecha. Los soportes redondos pueden ser por lo tanto usados para hacer cumplir la
precedencia de operador no por defecto. La utilización de soportes generosamente
cuando la construcción de expresiones complejas es la práctica buena y es animada. Esto
lleva al código legible que es menos propenso al error. Las expresiones abren un gran
número de posibilidades de manipulación de datos útiles.

Los Operadores aritméticos Consideran el ejemplo de la comando


JOB_HISTORY, que almacena la fecha de inicio y la fecha de finalización del término de
un empleado en un papel de trabajo anterior. Puede ser útil con objetivos de pensión o
impuesto, por ejemplo, de contar cuanto un empleado trabajó en aquel papel. Esta
información puede ser obtenida usando una expresión aritmética. Hay unos elementos
interesantes tanto de la select SQL como de los resultados devueltos de la Figura 2-7
aquella autorización discusión adicional.
Cinco elementos han sido especificados en la cláusula SENTENCIA. Los primeros
cuatro son columnas regulares de la comando JOB_HISTORY a saber: EMPLOYEE_ID,
JOB_ID, FECHA de START_, y END_DATE. Los dos términos últimos proporcionan la
información de la fuente requerida calcular el número de días que un empleado llenó una
posición particular. Considere que el empleado número 176 en la novena fila de salida. Este
empleado comenzó como unas Ventas
TABLA 2-1
Nivel de precedencia
Símbolo de operador
Operación

Precedencia
Más alto

Soportes o paréntesis
de Aritmética
Medio

División
Operadores
Medio

Multiplicación

Más bajo

Substracción

Más bajo

Adición
Ejecute una Select SENTENCIA Básica
71

LA FIGURA 2-7 La expresión aritmética para calcular el número de días trabajó


Gerente el 1 de enero de 1999 y empleo terminado el 31 de diciembre de 1999. Por lo tanto,
este empleado trabajó durante exactamente un año, que, en 1999, consistió en 365 días.
El número de días durante los cuales un empleado fue empleado puede ser calculado
usando el quinto elemento en la cláusula SENTENCIA, que es una expresión. Esta
expresión demuestra que la aritmética realizada en columnas que contienen la
información de fecha devuelve valores numéricos que representan un cierto número de
días.
Para hacer cumplir la precedencia de operador de la operación de substracción, la
subexpresión end_date-start_date es encerrada en soportes redondos. Un día fue añadido
para compensar la pérdida aritmética de un día que proviene de la operación de
substracción. Suliste que un empleado comenzó el trabajo el 1 de enero y salió más tarde
ese día. Un día debe ser añadido a la fórmula, por otra parte la subexpresión end_date-
start_date volvería incorrectamente los días cero trabajaron.
72
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

Una fórmula hipotética para predecir la probabilidad de un meteorito se ducha en a


la región geográfica particular ha sido ideada. Las dos expresiones puestas en una lista en la Figura 2-8 son
idénticas excepto la expresión de % de Probabilidad de Ducha de Meteorito. Sin embargo, como los
resultados en la comando siguiente demuestran, un cálculo diferente está siendo hecho por cada expresión.
Note que las dos expresiones se diferencian muy ligeramente. La expresión 2 tiene un par de paréntesis al
mismo final, encerrando (10 5). Considere como las expresiones son evaluadas para la región de Asia donde
REGION_ID es 3 como mostrado en la comando siguiente:

Paso
1. 2.

3.

4.
5.

6.

Expresión 1
region_id * 10052010  5
Substituya region_id con el valor:
3 * 10052010  5 Los operadores con la precedencia más alta son la dos división y operadores de
multiplicación. Éstos deben ser evaluados primero. Si más de un operador con el mismo nivel de la precedencia está
presente en una expresión, entonces éstos serán evaluados de la izquierda a la derecha. Por lo tanto, la primera
subexpresión para ser evaluada es: 3*100: 300 52010  5 La siguiente subexpresión para ser evaluada es: 300/5:

602010  5 La siguiente subexpresión para ser evaluada es: 20/10: 60 2  5 Los operadores restantes son una
adición y un operador de substracción que comparten el mismo nivel de la precedencia. Éstos serán por lo tanto
evaluados de la izquierda a la derecha. La siguiente subexpresión para ser evaluada es: 60+2: 62  557

Expresión 2
region_id * 100520(10  5)
Substituya region_id con el valor:
3 * 100520(10  5) El operador con la precedencia más alta es el par de paréntesis y éstos deben ser evaluados
primero. Por lo tanto, la primera subexpresión para ser evaluada es: (10  5):

Los 3*1005205 Los siguientes operadores en la expresión con la precedencia más alta son la dos división y
operadores de multiplicación. Si más de un operador con el mismo nivel de la precedencia está presente en una
expresión, entonces éstos serán evaluados de la izquierda a la derecha. Por lo tanto, la siguiente subexpresión para
ser evaluada es: 3*100: 3005205

La siguiente subexpresión para ser evaluada es: 3005: 60205 La siguiente subexpresión para ser evaluada es: 205:

60464
Ejecute una Select SENTENCIA Básica
73

LA FIGURA 2-8 Uso del encadenamiento y operadores aritméticos


Las expresiones ofrecen posibilidades interminables y son una de las
construcciones fundamentales en select SENTENCIAS. Como usted practica SQL
en su entorno de base de datos de prueba, usted puede encontrar dos errores de
Oracle infames: "ORA-00923: DE palabra clave no encontrada donde esperado" y
"ORA-00942: la comando o la vista no existen".Else son indicativos de ortografía o
errores de puntuación, como la ausencia de citas de inclusión alrededor de
literales de carácter. No sea perturbado por estos mensajes. Recuerde, usted no
puede causar daño a la base de datos si todo que usted hace selecciona datos.
Es una operación sólo para leer y el peor que usted puede hacer es ejecutan una
pregunta de nonperformant.
74
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

La expresión y Column Aliasing Figure 2-7 introdujeron un nuevo concepto llamado la columna
aliasing. Note como la columna de expresión tiene un título significativo llamado Días EMPLOYEES.
Este título es un alias. Un alias es un nombre alterno para una columna o una expresión. Si esta expresión
no hiciera el uso de un alias, el título de columna sería: (FECHA-START_DATE de END_) +1, que es
poco atractivo y no muy descriptivo. Los aliases son sobre todo útiles con expresiones o cálculos y pueden
ser puestos en práctica de varios modos. Hay unas reglas que gobiernan el uso de aliases de columna en
select SENTENCIAS. En la Figura 2-7, el alias dado para la expresión deliberada llamada "Días
EMPLOYEES" fue especificado dejando un espacio y escribiendo el alias en dobles comillas. Estas comillas
son necesarias por dos motivos. En primer lugar, este alias es arreglado de más de una palabra. En segundo
lugar, la preservación de instancia de un alias sólo es posible si el alias es doble citado. Ya que la Figura 2-9
muestra, "ORA-00923: DE

LA FIGURA 2-9 Uso de columna y aliases de expresión


Ejecute una Select SENTENCIA Básica
75

la palabra clave no encontrada donde esperado" error es devuelta cuando un alias multiredactado no es
doble citado.
El error ORA-00923 no es al azar generado por el servidor. El intérprete de Oracle trata de tratar la
select y encuentra un problema con ella. Como esto trata esta select particular, esto encuentra un
problema con la línea 2. Un símbolo de asterisco es insertado en el punto de partida del problema: la
palabra Empleada. La línea 2 fue tratada y la expresión era aliased con la palabra Días. El espacio después
de Días indica al intérprete de Oracle que, ya que no hay ninguna coma adicional para indicar otro
término que pertenece a la cláusula SENTENCIA, es completo. Por lo tanto, esto espera encontrar el DE
la cláusula después. En cambio esto encuentra la palabra Empleada y cede este error. Los mensajes de
error del servidor de Oracle son informativos y usted debería leerlos con cuidado para resolver problemas.
Este error es evitado encerrando un alias que contiene un espacio u otros carácteres especiales, tal como #
y $, en dobles comillas como mostrado alrededor del alias "Días EMPLOYEES" en la Figura 2-7.
El segundo ejemplo en la Figura 2-9 ilustra otra característica interesante de la columna aliasing. Han
prescindido otra vez de dobles comillas y un carácter subrayar es substituido por el espacio entre las
palabras para evitar un error devuelto. El intérprete de Oracle trata la select, no encuentra ningún
problema, y la ejecuta. Note que aunque el alias fuera especificado como Date_ Empleado, con sólo las
cartas de título del alias capitalizado, el título de expresión fue devuelto como DATE_EMPLOYED: todas
las cartas fueron automáticamente convertidas a la mayúscula. Así, para conservar el instancia del alias,
debe ser encerrado en dobles comillas.
Los aliases encontrados hasta ahora han sido especificados dejando un espacio después de una columna
o expresión e insertando el alias. SQL ofrece un modo más formalizado de insertar aliases. El YA QUE la
palabra clave es insertada entre la columna o expresión y el alias. La figura 2-10 ilustra el uso variado de
los tipos diferentes de columna aliasing. Tanto el EMPLOYEE_ID como las columnas JOB_ID son
aliased utilización el COMO la palabra clave, mientras los "Días" expresión Empleada son aliased utilización
de un espacio. El YA QUE la palabra clave es opcional ya que también es posible usar un espacio antes de
especificar un alias, como hablado antes. El uso del COMO la palabra clave realmente mejora, sin embargo,
la legibilidad de select SQL, y los autores creen que es SQL bueno codificación del hábito de formarse.

El carácter y el Operador de Encadenamiento de Cuerda Los dobles símbolos de tubo


|| representan al operador de encadenamiento de carácter. Este operador es usado para afiliarse a
expresiones de carácter o columnas juntos para crear una expresión de carácter más grande. Las columnas
de una comando pueden ser conectadas el uno con el otro o con series de carácteres literales para crear
una expresión de carácter consiguiente.
76
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

FIGURA 2-10

Uso del COMO palabra


clave para especificar aliases
de columna

La figura 2-8 muestra que el operador de encadenamiento es bastante flexible para


ser usado tiempos múltiples y casi en todas partes en una expresión de carácter. Aquí, el
carácter literal ser concadenado a los contenido de datos de la columna
REGION_NAME. Esta nueva serie de carácteres es concadenada adelante al carácter la
"región literal está en el Planeta tierra," y la expresión entera es aliased con la columna
amistosa que encabeza "la Posición Planetaria." Note como cada fila en el SET de
resultados es construida por la aplicación sistemática de la expresión a cada valor de fila
de la comando.
Considere la primera fila de datos de la "Posición Planetaria" columna de expresión.
Esto devuelve "La región de Europa está en el Planeta tierra." Una oración legible por las
filas de datos ha sido creada concadenando series literales de carácteres y espacios al
uno o el otro lado del valor de columna REGION_NAME de cada fila. La columna
REGION_ID ha sido aliased para mostrar que las columnas regulares así como las
expresiones pueden ser aliased. Adelante, los títulos de columna son en ausencia
mostrados en la mayúscula, pero pueden ser anulados usando un alias como "región Id."
Los tipos de datos de las columnas preguntadas determinan como SQL*Plus y el
Developer SQL presente sus datos por defecto salida. Si el tipo de datos es numérico
entonces los datos de columna son formateados para ser correctos alineado. Si el tipo
de datos es el carácter o la fecha, entonces los datos de columna son formateados para
ser dejados alineados.

Literales y la Comando DUAL


Ejecute una Select SENTENCIA Básica
77
Los valores literales en expresiones son un acontecimiento común. Estos valores se refieren a numérico,
carácter, o fecha y valores de tiempo encontrados en cláusulas SENTENCIAS que no provienen de
ningún objeto de base de datos. La concatenación de literales de carácter a datos de columna existentes
puede ser útil, como introducido en la Figura 2-8. ¿Y el procesamiento de literales que no tienen nada
que ver con datos de columna existentes? Para asegurar el consecuencia relacional, el Oracle ofrece una
solución inteligente del problema de usar la base de datos para evaluar expresiones que no tienen nada
que ver con ninguna comando o columnas. Para conseguir que la base de datos evalúe una expresión, una
select SENTENCIA sintácticamente legal debe ser presentada. ¿Y si usted quisiera saber la suma de dos
números o dos literales numéricos? Estas preguntas sólo pueden ser contestadas relacionándose con la
base de datos en una manera relacional. El oracle soluciona el problema de la interacción relacional con
la base de datos que actúa sobre expresiones literales ofreciendo una comando especial llamada DUAL.
Recuerde la comando DUAL descrita en la Figura 2-1. Esto contiene una columna llamada el
SIMULADOR del tipo de datos de carácter. Usted puede ejecutar la pregunta: SELECCIONE * DEL
DUAL, y el valor de datos "X" es devuelto como los contenido de la columna FALSA. La comando
DUAL permite que expresiones literales sean seleccionadas de ello para el procesamiento y vuelve la
expresión causa su fila sola. Es excepcionalmente útil ya que esto habilita una variedad de solicitudes de
procesamiento diferentes para ser hechas de la base de datos. Usted puede querer saber cuantos segundos
allí son en un año. La figura 2-11 demuestra una expresión aritmética ejecutada contra la comando
DUAL. Las pruebas de expresiones complejas durante el desarrollo, preguntando la comando dual, son un
método eficaz de evaluar si estas expresiones trabajan correctamente. Las expresiones literales pueden ser
preguntadas de cualquier comando, pero recordar que la expresión será tratada para cada fila en la
comando.
seleccione 'literal' || 'tratando la utilización de la comando de REGIONS' de
REGIONS;
La select precedente devolverá cuatro líneas en el SET de resultados, ya que hay
cuatro filas de datos en la comando de REGIONS.

Dos Citas Solas o el Operador de Cotización Alternativo Las cadenas de caracteres


literales concadenadas hasta ahora han sido palabras singulares prepended y han añadido a expresiones de
columna. Estos literales de carácter son especificados usando comillas solas. Por ejemplo:
seleccione 'Soy un carácter cuerda literal'
78
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

LA FIGURA 2-11 Utilización de la comando DUAL


¿Y los literales de carácter que contienen comillas solas? Plurals plantean un
problema particular para el carácter procesamiento literal. Considere la select siguiente:
escogido 'Plural tiene una cotización demasiado' del dual;
Como el ejemplo en la Figura 2-12 muestra, ejecutando esta select causa un ORA-
00923 error de Oracle para ser generado. Esto podría parecer a un error raro, pero
después del examen más cercano, el intérprete de Oracle con éxito trata la select
SENTENCIA hasta la posición 16, en cual punto esto espera "un DE" la cláusula. La
posición 1 para colocar 16 es:
seleccione 'a Plural
Ejecute una Select SENTENCIA Básica
79

FIGURA 2-12

Error tratando con literales


con citas implícitas

El servidor de Oracle trata este segmento para significar que el carácter literal
'Plural' es aliased como la columna "s". A este punto, el intérprete espera "un DE" la
cláusula, pero en cambio encuentra que la palabra "tiene". Esto entonces genera un error.
¿De este modo, cómo son palabras que contienen comillas solas tratadas con? Hay
esencialmente dos mecanismos disponibles. El más popular de éstos debe añadir una
comilla sola adicional al lado de cada comilla sola que ocurre naturalmente en la
cadena de caracteres. La figura 2-13 demuestra como el error anterior es evitado
reemplazando el carácter 'Plural literal con el literal 'Plural'' s.
El segundo ejemplo en la Figura 2-13 muestra que la utilización de dos citas solas
para manejarse cada cotización sola que ocurre naturalmente en un carácter literal
puede hacerse sucia y susceptible de errores como el número de aumentos de literales
afectados. El oracle ofrece una manera comandoada de tratar con este tipo del carácter
literal en la forma de la cotización alternativa (q) el operador. Note que el problema
consiste en que el Oracle eligió los carácteres de cotización solos como el par especial
de símbolos que encierran o envuelven cualquier otro carácter literal. Estos símbolos
que encierran el carácter podrían haber sido algo además de comillas solas.
Teniendo en cuenta esto, considere la cotización alternativa (q) operador. El
operador q le habilita para elegir de un SET de pares posibles de símbolos envolventes
para literales de carácter como alternativas a los símbolos de cotización solos. Las
opciones son cualquier byte solo
80
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

LA FIGURA 2-13 Uso de dos citas solas con literales con citas implícitas

o carácter de multibyte o los cuatro soportes: (soportes redondos), {tirantes rizados},


[corchetes], o <corchetes angulares>. Usando al operador q, el carácter delimiter puede
ser con eficacia cambiado de una comilla sola a cualquier otro carácter, como mostrado
en la Figura 2-14.
La sintaxis del operador de cotización alternativo es como sigue: el
q'delimiter'character literal que puede incluir las citas solas delimiter'
donde delimiter puede ser cualquier carácter o soporte. Los primeros y segundos
ejemplos en la Figura 2-14 muestran el uso de corchetes angulares y corchetes como el
carácter delimiters, mientras el tercer ejemplo demuestra como una mayúscula "X" ha
sido usada como el carácter especial delimiter símbolo por el operador de cotización
alternativo.
Ejecute una Select SENTENCIA Básica
81

LA FIGURA 2-14 La cotización alterna (q) operador

NULO no Es Nada
El concepto de un valor nulo fue introducido en la discusión más temprana del
comando DESCRIBIR. Tanto el cero de número como un espacio en blanco son
diferentes del nulo ya que ellos ocupan el espacio. Nulo se refiere a una ausencia de
datos. Una fila que contiene un valor nulo carece de datos de aquella columna. Nulo es
formalmente definido como un valor que es no disponible, no adjudicado, desconocido,
o inaplicable. En otras palabras, las reglas de contratación con valores nulos necesitan
el estudio cuidadoso. El frainstancia de prestar atención al tratamiento especial que los
valores nulos requieren llevará casi seguramente a un error, o peor, una respuesta
inexacta.
Los valores nulos pueden ser un concepto complicado para venir a apretones con. El
problema proviene de la ausencia de nulo en una línea numérica. No es un valor
verdadero, tangible que puede estar relacionado con el mundo físico. Nulo es un
placeholder en una columna no obligatoria hasta
82
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

DENTRO DEL EXAMEN


Hay dos objetivos de certificación en este capítulo. Las capacidades de la select SENTENCIA
introducen los tres conceptos teóricos fundamentales de proyección, selección, y conexión. Los
ejemplos prácticos que ilustran la selección incluyen la construcción de la cláusula SENTENCIA y la
utilización de la palabra clave DISTINTA para limitar las filas volvió. La proyección es demostrada en
ejemplos donde las columnas y las expresiones son restringidas para la recuperación. Segundo objec-tive
de ejecutar una select SQL mide su entendimiento de la forma básica de la select SENTENCIA. El
examen mide dos aspectos. En primer lugar, la sintaxis es medida: se requiere que usted manche errores
de sintaxis. Los errores de sintaxis de SQL son levantados cuando el intérprete de Oracle no entiende
una select. Estos errores

podría tomar la forma de select que fallan terminators, como un punto y coma ausente, no encerrando
literales de carácter en operadores de cotización apropiados, o las select que hacen el uso del inválido
reservaron palabras.
En segundo lugar, el sentido de una select es mea-sured. Usted será presentado un syntacti-cally
select legítima y pedido elegir entre descrip-exacto e inexacto tions de aquella select. El examen mide
el conocimiento alrededor de los objetivos de certificación usar preguntas de formato selectas múltiples.
Su entendimiento de columna aliasing, aritmética y operadores de encadenamiento, carácter cotización
literal, el operador de cotización alternativo, sintaxis de select de SQL, y tipos de datos de columna
básicos será probado.

algunos verdaderos datos son almacenados en su lugar. Hasta entonces, precávase de


conducir la aritmética con columnas nulas.
Esta sección se concentra en relacionarse con datos de columna nulos con la
afirmación SENTENCIA y su impacto a expresiones.

No las Tablas de Columnas Nulas y Nullable almacenan filas de datos que


están divididos en una o varias columnas. Estas columnas tienen nombres y tipos de
datos asociados con ellos. Algunos de ellos son obligados por reglas de base de datos de
ser columnas obligatorias. Es obligatorio para algunos datos ser almacenado en el NO
columnas NULAS en cada fila. Cuando las columnas de una comando, sin embargo, no
son obligadas por las coacciones de base de datos a sostener datos para una fila, estas
columnas ejecutan el riesgo de ser vacías.
En la Figura 2-15, la comando de EMPLOYEES es descrita, y unas columnas son
seleccionadas de ella. Hay cinco NO columnas NULAS y seis columnas NULLABLE.
Nullable es un término a veces solía describir una columna que es permitida almacenar
valores nulos. Una de las columnas nullable es la columna COMMISSION_PCT.
Ejecute una Select SENTENCIA Básica
83

LA FIGURA 2-15 Valores nulos en la columna Commission_Pct

La figura 2-15 muestra las dos primeras filas de datos de la comando de EMPLOYEES.
Esto es suficiente para ilustrar que ambos estos archivos de empleado tienen valores
nulos en sus columnas COMMISSION_PCT.
El Developer de SQL hace simple observar valores nulos en columnas, como mostrado
en la Figura 2-16. Aquí, la palabra (nula) es salida cuando se encuentra un valor nulo,
como con la columna COMMISSION_PCT. El Developer de SQL apoya la
personalización de esta descripción por defecto de datos de columna nulos.
La columna aliased como "Aritmética Nula" es una expresión arreglada de
COMMISSION_PCT + EMPLOYEE_ID + 10. En vez de devolver un valor numérico,
esta columna vueltas nulas. Hay una razón importante de esto:
Cualquier cálculo aritmético con un valor NULO siempre vuelve NULO.
84
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

LA FIGURA 2-16 La aritmética nula siempre devuelve un valor nulo.

El oracle ofrece un mecanismo para relacionarse aritméticamente con valores NULOS


usando las funciones generales habladas en el Capítulo 5. Como la expresión de
columna aliased como "División por el Nulo" ilustra, hasta la división por un valor nulo
resulta en el nulo, a diferencia de la división por el cero, que causa un error. Finalmente,
note el impacto de la palabra clave nula cuando usado con el operador de
encadenamiento de carácter. Nulo es concadenado entre el FIRST_NAME y columnas
LAST_NAME, aún no tiene ningún impacto. Los operadores de encadenamiento de
carácter no hacen instancia nulo, mientras las operaciones aritméticas que implican
valores nulos siempre resultan en el nulo.
Ejecute una Select SENTENCIA Básica
85

Las Claves foráneas y el diseño de modelo de Datos de Columnas


Nullable a veces llevan a situaciones problemáticas cuando las tablas están
relacionadas el uno con el otro vía una relación de clave foránea y primaria, pero la
columna en la cual la clave foránea está basada es nullable.
La comando de DEPARTMENTS tiene, como su clave primaria, la columna
DEPARTMENT_ID. La comando de EMPLOYEES tiene una columna
DEPARTMENT_ID que es reprimida por su relación de clave foránea a la columna
DEPARTMENT_ID en la comando de DEPARTMENTS. Esto significa que ningún
registro en la comando de EMPLOYEES es permitido tener en su columna
DEPARTMENT_ID un valor que no está en la comando de DEPARTMENTS. Esta
integridad de referencia forma la base para la tercera forma normal y es crítica a la
integridad de base de datos total.
¿Pero y valores NULOS? ¿Puede la columna DEPARTMENT_ID en la comando de
DEPARTMENTS contener nulls? La respuesta es no. El oracle insiste que cualquier
columna que sea una clave primaria es implícitamente reprimida a ser obligatoria. ¿Pero
y coacciones implícitas en columnas de clave foránea? Esto es un dilema para el Oracle,
desde a fin de permanecer flexible y satisfacer el auditorio más amplio, no puede
insistir que las columnas relacionadas a través de coacciones de integridad de
referencia debieran ser obligatorias. Adelante, no todas las situaciones exigen esta
funcionalidad.

GUIÓN & SOLUCIÓN


Usted construye una expresión aritmética que calcula la renta imponible basada en SUELDO de un empleado y
columnas COMMISSION_PCT, ambos de las cuales son nullable. ¿Es posible convertir los valores nulos en la
una o la otra columna al cero para devolver siempre una renta imponible numérica?
Sí, pero no con la información usted ha cubierto hasta ahora. Los valores nulos requieren manejarse especial. En
el Capítulo 5, hablamos de la función de NVL, que proporciona un mecanismo para convertir valores nulos en
valores de datos más aritméticos y amistosos.
Un alias proporciona un mecanismo para renombrar una columna o una expresión. ¿Bajo qué condiciones debería
usted encerrar un alias en dobles citas?
Si un alias contiene más de una palabra o si el instancia de un alias debe ser conservado, entonces debería ser
encerrado en dobles comillas. El frainstancia de doblar la cotización un alias multiredactado levantará un error de
Oracle. El frainstancia de doblar la cotización un alias de palabra única causará el alias devuelto en la mayúscula.
¿Trabajando con el carácter valores literales que incluyen comillas solas, cómo debería usted especificar estos
literales en la cláusula SENTENCIA sin levantar un error?
Hay dos mecanismos disponibles. Más acercamiento común debe reemplazar cada cotización sola que ocurre
naturalmente con dos citas solas. El otro enfoque debe hacer el uso del operador de cotización alterno para
especificar a un par alterno de carácteres con los cuales encerrar literales de carácter.
86
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

La columna DEPARTMENT_ID en la comando de EMPLOYEES es realmente nullable.


Por lo tanto, el riesgo existe que hay archivos con valores de DEPARTMENT_ID nulos presentes en esta
comando. De hecho, hay tales archivos en la comando de EMPLOYEES. El modelo de datos de HORA
permite a EMPLOYEES, correctamente o no, no para pertenecer a ningún departamento. Realizando
junturas relacionales entre tablas, es completamente posible perder o excluir ciertos archivos que
contienen nulls en la columna de juntura. El capítulo 7 explora modos de tratar con este desafío.
EJERZA 2-3 Experimentación con Expresiones y la Comando DUAL
En este ejercicio gradual una conexión es hecha usando al Developer de SQL como la
HORA
usuario. Use expresiones y operadores para contestar a tres preguntas relacionadas con la
select SENTENCIA: Pregunta 1: se demostró antes como el número de días durante los
cuales los EMPLOYEES fueron EMPLOYEES en un trabajo podría ser calculado. ¿Para
cuántos años fueron EMPLOYEES los EMPLOYEES realizando estos papeles de trabajo
y cual eran sus EMPLOYEE_ID, JOB_ID, START_DATE, y valores de END_DATE?
Alias la columna de expresión en su pregunta con los Años de alias EMPLOYEES.
Suliste que un año consista en 365.25 días.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La proyección


de columnas requeridas incluye EMPLOYEE_ID, JOB_ID,
START_DATE, END_DATE, y una expresión llamada Años EMPLOYEES de la
comando JOB_HISTORY.
3. La expresión puede ser calculada dividiéndose un más la diferencia entre
END_DATE y START_DATE antes de 365.25 días, como mostrado después:
seleccione employee_id, job_id, start_date, end_date,
((end_date-start_date) + 1)/365.25 "Años EMPLOYEES" de
job_history;

4. La ejecución de la select SENTENCIA precedente cede los resultados mostrados


en
la ilustración siguiente:
Ejecute una Select SENTENCIA Básica
87
Pregunta 2: Pregunte la comando de JOBS y devuelva una expresión sola de la forma El Trabajo que Id
para el trabajo <job_title's> es: <job_id>. Tome la nota que el job_title debería tener un apóstrofe y un
"s" añadido a ello para leer más naturalmente. Una muestra de esto salida para el presidente de
organización es: "El Trabajo Id para el trabajo presidencial es: AD_PRES." Alias esta expresión de columna
como "Descripción del trabajo" usando el COMO palabra clave.

1. Hay soluciones múltiples de este problema. El enfoque elegido aquí es


manejarse las comillas solas que ocurren naturalmente con una cotización sola adicional.
2. Una expresión sola aliased como la Descripción del trabajo se requiere y puede ser la estafa -
structed disecando el requisito en el literal "El Trabajo Id para" ser concadenado a la columna
JOB_TITLE. Esta cuerda es entonces concat-enated al literal "'s el trabajo es:" que es
concadenado adelante a la columna JOB_ID. Una comilla sola adicional es añadida para ceder la
select SENTENCIA que sigue:
seleccione 'El Trabajo que Id para el ' || job_title || '''s trabajo es:' ||
job_id COMO "Descripción del trabajo" de JOBS;
88
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

3. Los resultados de esta pregunta de SQL son mostrados en la ilustración siguiente:

Pregunta 3: Utilización de la comando DUAL, calcule el área de un círculo con el radio


6000 unidades, con la pi que es aproximadamente 22/7. Use la fórmula: área = pi ×
radio × radio. Alias el resultado como "área".

1. El funcionamiento con la comando DUAL puede parecer al principio curioso.


Usted se acostumbra a
como su funcionalidad se hace más aparente. Esta pregunta implica escogido -
ing una expresión aritmética literal de la comando DUAL para ceder una fila
sola respuesta calculada que no está basada en los valores de columna en
ninguna comando.
2. La expresión puede ser calculada usando la select SQL siguiente; notar
el uso de soportes para precedencia.
escogido (22/7) * (6000 * 6000) área de dual

3. Los resultados devolvieron el espectáculo el área aproximada del círculo como


113142857.14
unidades cuadradas.

RESUMEN DE CERTIFICACIÓN
Resumen de certificación
89
La construcción de select SENTENCIA forma la base para la mayoría de interacciones
esto ocurre con una base de datos de Oracle. Estas interacciones pueden tomar la forma
de preguntas publicadas del Developer SQL o SQL*Plus o cualquier número del Oracle
y otro tercero - herramientas de cliente. En su corazón, estos herramientas traducen
peticiones de la información en select SENTENCIAS, que son ejecutadas entonces por
la base de datos.
La estructura de una comando ha sido descrita. Las filas de datos han sido
recuperadas y el formato orientado al SET de los resultados fue revelado. Los
resultados fueron refinados por la proyección. En otras palabras, sus preguntas sólo
pueden incluir las columnas usted está interesado en recuperar y excluye las columnas
restantes en una comando.
Las reglas de sintaxis SENTENCIAS son básicas y flexibles, y los errores de lenguaje
deberían ser raros debido a su gramática Parecida a un inglesa. La terminación de select
usando puntos y coma, respeto al carácter sensibilidad del instancia literal, y conciencia
de valores nulos debería asistir con la evitación de errores.
Las expresiones exponen una vista de posibilidades de manipulación de datos por la
interacción de aritmética y operadores de carácter con columna o datos literales, o una
combinación de los dos.
La forma general de la select SENTENCIA fue explorada y la fundación para la
extensión de esta select fue construida.
El Mí los ejercicios de Prueba son arreglados de dos componentes. El primer
componente consiste de preguntas que le dan una idea sobre lo que pueden preguntarle
durante el examen. El segundo componente le habilita para practicar el conocimiento
de la lenguaje hablado en este capítulo en un formato de laboratorio. Hablan de las
soluciones de ambas categorías de preguntas detalladamente en la sección de
soluciones.
90
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

TALADRADORA DE DOS MINUTOS
Liste las Capacidades en una lista de SQL Select SENTENCIAS
❑ Las tres operaciones fundamentales que SELECCIONAN select son capaces de
son la proyección, la selección, y la conexión.
❑ Proyección se refiere a la restricción de columnas seleccionadas de una comando.
Utilización
proyección, usted sólo recupera las columnas del interés y no cada columna posible.
❑ Selección se refiere a la extracción de filas de una comando. La selección incluye el
restricción adicional de las filas extraídas basadas en varios criterios o condi-tions. Esto
permite que usted sólo recupere las filas que son del interés y no cada fila en la comando.
❑ Conexión implica conectar dos o más tablas basadas en atributos comunes.
La conexión permite que datos sean almacenados en la tercera forma normal en tablas
distintas, en - lugar de en una comando grande.
❑ Una combinación ilimitada de proyecciones, las selecciones, y las junturas proveen el
lenguaje para extraer los datos relacionales requeridos.
❑ Una definición estructural de una comando puede ser obtenido usando DESCRIBIR
comando.
❑ Columnas en tablas almacenan tipos diferentes de datos usando varios tipos de datos, lo más
común de que son NÚMERO, VARCHAR2, FECHA, y TIMESTAMP.
❑ El NÚMERO de tipo de datos (x, y) implica que la información numérica almacenó en esto
la columna puede tener en la mayor parte de dígitos x, pero al menos y de estos dígitos debe
aparecer a la derecha de la coma decimal.
❑ El comando DESCRIBIR pone en una lista los nombres, tipos de datos, y estado nullable de
todas las columnas en una comando.
❑ columnas Obligatorias también son mandados a como NO columnas NULAS

Ejecute una Select SENTENCIA Básica


❑ La sintaxis de la cláusula SENTENCIA primitiva es como sigue:
SELECCIONE * | {column|expression [distinto] [alias], }
❑ La select SENTENCIA también es referido como una pregunta SENTENCIA y comprende
al menos dos cláusulas, a saber la cláusula SENTENCIA y el DE cláusula.
Taladradora de dos minutos
91

❑ La cláusula SENTENCIA determina la proyección de columnas. En otras palabras, el


La cláusula SENTENCIA especifica qué columnas son incluidas en los resultados devueltos. ❑ El
asterisco (*) el operador es usado como un símbolo de comodín para indicar todas las columnas.
De este modo, la select SENTENCIA * DE CUENTAS devuelve todas las columnas disponibles en
la comando de CUENTAS.
❑ el DE la cláusula especifica la comando de la fuente o tablas de las cuales los artículos son
seleccionado. ❑ Los artículos de preceder de palabra clave DISTINTOS en las causas de cláusula
SENTENCIAS
combinaciones duplicadas de estos artículos para ser excluidos del SET de resultados devuelto.
❑ SQL select debería ser terminado con un punto y coma. Como una alternativa,
una nueva línea puede ser añadida después de que una select y una cuchillada avanzada pueden ser
usadas para ejecutar la select.
❑ SQL select puede ser escrito y ejecutado en minúscula o mayúscula. Estar
cuidadoso relacionándose con literales de carácter ya que éstos son sensibles al instancia. ❑
operadores Aritméticos y el operador de encadenamiento de cuerda que afecta a Cnel -
el umn y los datos literales forman la base de expresiones SQL. el  Expresiones y columnas
regulares puede ser aliased utilización el COMO la palabra clave o por
la salida de un espacio entre la columna o expresión y el alias. ❑ Si un alias contiene palabras
múltiples o el instancia del alias es importante, esto
debe ser encerrado en dobles comillas. ❑ Naturalmente ocurrir las citas solas en un carácter literal
pueden ser seleccionadas por
la fabricación de uso de una cotización sola adicional por cotización que ocurre naturalmente o del
operador de cotización alternativo.
❑ La comando DUAL es una columna sola y comando de fila sola que a menudo está acostumbrada
evalúe expresiones que no se refieren a columnas específicas o tablas. ❑ Columnas que no son
gobernadas por un NO la coacción NULA tiene el
el potencial para almacenar valores nulos y es a veces mandado a como nullable columnas. ❑ valores
NULOS no son el mismo como un espacio en blanco o cero. Los valores NULOS se refieren a
una ausencia de datos. Nulo es definido como un valor que es no disponible, no adjudicado,
desconocido, o inaplicable.
❑ Precaución debe ser ejercido trabajando con valores nulos desde la aritmética
con un valor nulo siempre cede un resultado nulo.
92
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

MÍ PRUEBA
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.
La prueba siguiente es típica de las preguntas y el formato del OCP 11g examen del tema "Recuperar
Datos usando el SQL Select SENTENCIA." Estas preguntas a menudo hacen el uso del esquema de
Recursos humanos.

Liste las Capacidades en una lista de SQL Select SENTENCIAS


1. Qué pregunta crea una proyección del DEPARTMENT_NAME y LOCATION_ID
¿columnas de la comando de DEPARTMENTS? (Elija la mejor respuesta.) A. SELECCIONE
DEPARTMENT_NAME distinto, LOCATION_ID
DE DEPARTMENTS;
B. SELECCIONE DEPARTMENT_NAME, LOCATION_ID
DE DEPARTMENTS;
C. SELECCIONE DEPT_NAME, LOC_ID
DE DEPARTAMENTO;
D. SELECCIONE DEPARTMENT_NAME COMO "LOCATION_ID"
DE DEPARTMENTS;
2. Después de describir la comando de EMPLOYEES, usted descubre que la columna de SUELDO
tiene unos datos
tipo del NÚMERO (8,2). ¿Qué valor (es) de SUELDO no será permitido en esta columna? (Elija
todo que se aplican.) A. SALARY=12345678 B. SALARY=123456.78 C. SALARY=12345.678
D. SALARY=123456 E. SALARY=12.34
3. Después de describir la comando JOB_HISTORY, usted descubre que el START_DATE y END_
Las columnas de FECHA tienen un tipo de datos de FECHA. Considere la expresión FECHA de
END_DATE-START_. (Elija dos select correctas.) A. Un valor del tipo de datos de FECHA es
devuelto. B. Un valor del NÚMERO de tipo es devuelto. C. Un valor del tipo VARCHAR2 es
devuelto.
Mí Prueba
93

D. La expresión es inválida ya que la aritmética no puede ser realizada en columnas con la


FECHA
tipos de datos.
E. La expresión representa los días entre el END_DATE y START_DATE menos un
día.
4. La comando de DEPARTMENTS contiene una columna DEPARTMENT_NAME con el tipo de
datos
VARCHAR2 (30). (Elija dos select verdaderas sobre esta columna.) A. Esta columna puede
almacenar datos de carácter hasta un máximo de 30 carácteres. B. Esta columna debe almacenar
datos de carácter que son al menos 30 carácteres mucho tiempo. C. El tipo de datos VARCHAR2
es reemplazado por el tipo de datos de TRABAJO POR HORAS. D. Esta columna puede
almacenar datos en una columna con el tipo de datos VARCHAR2 (50) a condición de que el
los contenido son como máximo 30 carácteres mucho tiempo.

Ejecute una Select SENTENCIA Básica


5. ¿Qué select informa sobre valores de JOB_ID únicos de la comando de EMPLOYEES? (Elija
todos
esto se aplica.) A. SELECCIONE JOB_ID DE EMPLOYEES; B. SELECCIONE JOB_ID único DE
EMPLOYEES; C. SELECCIONE JOB_ID distinto, EMPLOYEE_ID DE EMPLOYEES; D.
SELECCIONE JOB_ID distinto DE EMPLOYEES;
6. Elija las dos select ilegales. Las dos select correctas producen resultados idénticos. El
dos select ilegales harán que un error sea levantado: A. SELECCIONE DEPARTMENT_ID ||
'representa el ' ||
DEPARTMENT_NAME ||' Departamento' como "Información de Departamento" DE
DEPARTMENTS;
B. SELECCIONE DEPARTMENT_ID || 'representa el ||
DEPARTMENT_NAME ||' Departamento' como "Información de Departamento" DE
DEPARTMENTS;
C. seleccione department_id || 'representa el ' || department_name ||
'Departamento' "Información de Departamento" de DEPARTMENTS;
D. DEPARTMENT_ID escogido representa el Departamento DEPARTMENT_NAME como
"Información de departamento" DE DEPARTMENTS;
94
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

7. ¿Qué expresiones no devuelven valores NULOS? (Elija todo que se aplican.)


A. escogido ((10 + 20) * 50) + nulo de dual; B. escogido 'esto es un ' || nulo || 'prueba con nulls'
del dual; C. escogido nulo/0 de dual; D. seleccionan nulo || 'prueba' || nulo como "la Prueba" del
dual;
8. Elija la sintaxis correcta para devolver todas las columnas y las filas de los datos de la comando de
EMPLOYEES.
A. seleccione todos de EMPLOYEES; B. seleccionan employee_id, first_name, last_name,
first_name, department_id
de EMPLOYEES; C. seleccionan el % de EMPLOYEES; D. seleccionan * de
EMPLOYEES; E. seleccionan *.* de EMPLOYEES;
9. El carácter siguiente expresión literal es seleccionado de la comando DUAL:
SELECCIONE 'la Coda '' s el juguete de esfuerzo favorito es su anillo naranja' del DUAL; (Elija el
resultado que es devuelto.) A. Un error sería devuelto debido a la presencia del dos juguete de
esfuerzo de favorito de B. Coda de citas adyacente es su anillo naranja C. Coda '' s juguete de
esfuerzo favorito es su anillo naranja D. 'Coda '' s juguete de esfuerzo favorito es su anillo naranja'
10. Hay cuatro filas de datos en la comando de REGIONS. Considere la select SQL siguiente:
SELECCIONE '6 * 6' "área" DE REGIONS; ¿Cuántas filas de resultados son devueltas y que valor es
devuelto por la columna de área? (Elija la mejor respuesta.) A. 1 fila volvió, la columna de área
contiene el valor 36 B. 4 filas volvieron, la columna de área contiene el valor 36 para 4 fila de filas
C. 1 devuelta, la columna de área contiene el valor 6 * 6 D. 4 filas volvieron, la columna de área
contiene el valor 6 * 6 para 4 filas E. Un error de sintaxis es devuelto.

PREGUNTA DE LABORATORIO
En este capítulo usted trabajó por ejemplos en el esquema de Recursos humanos. El oracle proporciona a
número de esquemas de ejemplo para usted para experimentar con y aprender conceptos diferentes de.
Para los ejercicios prácticos, usted usará la Entrada de Pedido, u OE, esquema. Las soluciones para estos
ejercicios
Pregunta de laboratorio
95

será provisto utilización posterior al Developer de SQL. Usando al Developer de SQL o SQL*Plus,
conecte al esquema OE y complete las tareas siguientes.

1. Obtenga la información estructural para el PRODUCT_INFORMATION y PIDE tablas. 2.


Seleccione los valores de SALES_REP_ID únicos de la comando de PEDIDOS. Cuántos diferente
¿los representantes de ventas han sido adjudicados a pedidos en la comando de PEDIDOS?
3. Cree un SET de resultados basado en la comando de PEDIDOS que incluye el ORDER_ID,
ORDER_
FECHA, y columnas ORDER_TOTAL. Note como los ORDER_DATE salida es formateado
diferentemente del START_DATE y columnas END_DATE en la comando de HORA JOB_ID.
4. La comando PRODUCT_INFORMATION almacena datos en cuanto a los productos
disponibles para la venta
en un ficticio ESTO ferretería. Produzca un SET de resultados que serán útiles para un vendedor.
Información de producto de extracto en el formato <PRODUCT_NAME> con código:
<PRODUCT_ ID> tiene el estado de: <PRODUCT_STATUS>. Alias la expresión como
"producto". Los resultados deberían proporcionar el LIST_PRICE, el MIN_PRICE, la diferencia
entre LIST_PRICE, y MIN_PRICE aliased como "Ahorros de Max Actual," junto con una
expresión adicional que toma la diferencia entre LIST_PRICE y MIN_PRICE y se divide esto
por el PRECIO LIST_ y luego multiplica el total por 100. Esta última expresión debería ser
aliased como "% de Max Discount."
5. Calcule la área de superficie de la Tierra usando la comando DUAL. Alias esta expresión como
"El área de la tierra." La fórmula para calcular el área de una esfera es: 4r2. Suliste, para este
ejemplo, que la tierra sea una esfera simple con un radio de 3,958.759 millas y que  es 22/7.
96
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

MÍ PRUEBAN RESPUESTAS
Liste las Capacidades en una lista de SQL Select
SENTENCIAS
1. ® B. Una proyección es una restricción intencional de las columnas devueltas de una
comando. ✓
® A es eliminado ya que la pregunta no tiene nada que ver con duplicados, peculiaridad, ˚
o unicidad de datos. C incorrectamente selecciona columnas inexistentes llamadas
DEPT_NAME y LOC_ID de una comando inexistente llamada el departamento. El D devuelve
sólo una de las columnas solicitadas: DEPARTMENT_NAME. En vez de proyectar además la
columna LOCATION_ID de la comando de DEPARTMENTS, esto intenta al alias la columna
DEPARTMENT_NAME como LOCATION_ID.
2. el ® A y C. Columns con el tipo de datos NÚMERO (8,2) puede almacenar, como máximo, ocho
dígitos; de que, ✓
como máximo, dos de aquellos dígitos son a la derecha de la coma decimal. Aunque A y C sean
las respuestas correctas, noten que ya que la pregunta es expresada negativamente, estos valores
no son permitidos ser almacenados en tal columna. A no es permitido porque contiene ocho dígitos
de número entero, pero el tipo de datos es reprimido a almacenar seis dígitos de número entero y
dos dígitos fraccionarios. El C no es permitido ya que tiene tres dígitos fraccionarios y el tipo de
datos permite un máximo de dos dígitos fraccionarios.
Los ® B, D, y E pueden ser legítimamente almacenados en este tipo de datos y, por lo tanto, son ˚
incorrecto
respuestas a esta pregunta. El D muestra que los números sin la parte fraccionaria son valores
legítimos para esta columna, mientras el número de dígitos en la parte de número entero no excede
seis dígitos.
3. ® B y E. El resultado de aritmética entre dos valores de fecha representa un cierto número de días. ✓
Los ® A, C, y D son incorrectos. Es un error común para esperar el resultado de aritmética
˚
entre dos valores de fecha para ser una fecha también, entonces A puede parecer plausible,
pero es falso.
4. ® A y D. La escala del tipo de datos VARCHAR2, especificado entre paréntesis, determina su ✓
capacidad máxima para almacenar datos de carácter como mencionado por A. Si un valor de datos
que es como máximo 30 carácteres mucho tiempo es almacenado en cualquier tipo de datos,
también puede ser almacenado en esta columna como declarado por D.
® el B es incorrecto porque es posible almacenar datos de carácter de cualquier longitud hasta 30
carácteres ˚
en esta columna. El C es falso, ya que el tipo de datos de TRABAJO POR HORAS existe en la
paralela con el tipo de datos VARCHAR2.

Ejecute una Select SENTENCIA Básica


5. ® D. Los valores de JOB_ID únicos son proyectados de la comando de EMPLOYEES
aplicando el ✓
Palabra clave DISTINTA a sólo la columna JOB_ID.
Los ® A, B, y C son eliminados desde Unas vueltas una lista sin restricción de valores de
JOB_ID incluso ˚
duplicados; el B hace el uso de la palabra clave ÚNICA en el contexto incorrecto; y C selecciona
el
Mí Respuestas de Prueba
97

combinación distinta de JOB_ID y valores de EMPLOYEE_ID. Esto tiene el efecto de devolver


todas las filas de la comando de EMPLOYEES ya que la columna EMPLOYEE_ID contiene
valores únicos para cada registro de empleado. Además, el C devuelve dos columnas, que no es lo
que fue al principio solicitado.
6. los ® B y D representan las dos select ilegales que devolverán errores de sintaxis si ellos son ✓
ejecutado. Esto es una pregunta complicada porque esto pide las select ilegales y no las select
legales. El B es ilegal porque falla una cotización sola que encierra el carácter literal "representa
el." D es ilegal porque esto no hace el uso de citas solas para encerrar sus literales de carácter.
Los ® A y C son las select legales y, por lo tanto, en el contexto de la pregunta, son el ˚
respuestas incorrectas. A y C parecen ser diferentes ya que el instancia de las select SQL es
diferente y Unos usos la palabra clave de alias COMO, mientras que C sólo deja un espacio entre la
expresión y el alias. Aún tanto A como C producen resultados idénticos.
7. los ® B y D no devuelven valores nulos ya que las expresiones de carácter no son afectadas en
mismo ✓
camino por valores nulos como expresiones aritméticas. Los B y D no hacen instancia de la
presencia de valores nulos en sus expresiones y devuelven los literales de carácter restantes.
Los ® A y C devuelven valores nulos porque cualquier expresión aritmética que implique
una voluntad nula ˚
devuelva un nulo.
8. ® D. Un asterisco es el operador SQL que implica que todas las columnas deben ser
seleccionadas de un ✓
comando.
Los ® A, B, C, y E son incorrectos. Unos usos TODA la palabra reservada pero pierden
cualquier columna ˚
la especificación y generará, por lo tanto, un error. El B selecciona algunas columnas, pero no
todas las columnas y, por lo tanto, no contesta a la pregunta. Los C y E hacen el uso de
operadores de selección ilegales.
9. ® B. La llave a la identificación del resultado correcto está en el entendimiento del papel de ✓ solo
comillas. El literal entero es encerrado por un par de citas para evitar la generación de un error. Las
dos citas adyacentes son necesarias para delimitar la cotización sola que aparece en el literal B.
Los ® A, C, y D son incorrectos. A es eliminado ya que ningún error es devuelto. C
inexactamente devuelve ˚
dos citas adyacentes en la expresión literal y D vuelven un literal con todas las citas todavía
presentan. El servidor de Oracle borra las citas usadas como el carácter delimiters después de tratar
el literal.
10. ® D. La expresión literal '6 * 6' es seleccionada una vez para cada fila de datos en las
REGIONS ✓
comando.
Los ® A, B, C, y E son incorrectos. Unas vueltas una fila en vez de cuatro y calculan el
producto ˚
6 * 6. Los operadores de cotización de inclusión ejecutan 6 * 6 un carácter literal y no un literal
numérico que puede ser calculado. B correctamente devuelve cuatro filas, pero incorrectamente
evalúa el carácter literal como un literal numérico. C incorrectamente devuelve una fila en vez de
cuatro y E es incorrecto, porque la select SQL dada puede ser ejecutada.
98
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

RESPUESTA DE LABORATORIO
La asunción es hecha esto una base de datos de Oracle está disponible para usted para practicar con. La
base de datos
el administrador (DBA) en su organización puede asistirle con instalarse y establecerse esto. Para
cualquier instrumento de cliente, como SQL*Plus o Developer SQL para conectar a la base de datos, un
proceso de oyente debería ejecutarse y la base de datos debe ser abierta. Además, usted debería solicitar
que la HORA y las cuentas de esquema OE sean abiertas y que las contraseñas ser reinicializadas. Si
estos esquemas de muestra no están presentes, es un asunto simple para conseguir que el DBA ejecute
las escrituras, que son instaladas cuando la base de datos es instalada, para crearlos. Conecte al esquema
OE usando SQL*Plus o Developer SQL.
1. El comando DESCRIBIR nos da la descripción estructural de una comando. El siguiente
la ilustración muestra estas dos tablas descritas:
Respuesta de laboratorio
99

2. La petición de valores únicos por lo general implica usar la palabra clave DISTINTA como la parte
de su
Select SENTENCIA. Los dos componentes de la select implican la cláusula SENTENCIA y el DE
la cláusula. Le pidieron valores de SALES_REP_ID únicos DE la comando de PEDIDOS. Es simple
traducir esta solicitud a la select SENTENCIA siguiente:
seleccione sales_rep_id distinto
de pedidos;
De los resultados en la ilustración, usted puede contestar a la pregunta original: hay nueve
los representantes de ventas diferentes responsables de pedidos puestos en una lista en la comando de
PEDIDOS, pero hay un pedido que contiene valores nulos en sus espacios de SALES_REP_ID.

3. Cuando pedido crear un SET de resultados, esto traduce para SELECCIONAR una o varias
columnas de una comando.
En este instancia, su cláusula SENTENCIA es construida de las tres columnas solicitadas. Hay no
100
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA
la petición de valores únicos, así no hay ninguna necesidad de considerar la palabra clave
DISTINTA. EL DE La cláusula sólo tienen que incluir la comando de PEDIDOS para construir la
select SENTENCIA siguiente:
seleccione order_id, order_date, order_total
de pedidos;
Considere salida en la ilustración siguiente, expresamente la columna ORDER_DATE. Esto
la columna contiene el día, mes, año, horas, minutos, segundos, y segundos fraccionarios hasta seis sitios
decimales o exacto hasta un millonésimo de un segundo. La descripción de la comando de PEDIDOS
expone ORDER_DATE como un TIMESTAMP (6) con la columna TIMEZONE LOCAL. Esto significa
que los datos en esta columna pueden ser provistos de la precisión fraccionaria hasta seis sitios
decimales y que los datos son conscientes del huso horario. Básicamente, los datos pueden ser trabajados
en por la gente en husos horarios diferentes. Entonces el Oracle proporciona un tipo de datos que
normaliza la hora local al huso horario de base de datos para evitar la confusión. Comparado con el
START_DATE y columnas END_DATE en la comando de HORA JOB_ID, el tipo de datos de columna
de FECHA ORDER_ es mucho más sofisticado. Esencialmente, sin embargo, tanto estos tipos de datos
almacenan la fecha como la información de tiempo, pero a niveles que se diferencian de la precisión.
Respuesta de laboratorio
101

4. La cláusula SENTENCIA para contestar a esta pregunta debería contener una expresión aliased como
"el producto"
arreglado de encadenamientos de literales de carácter con el PRODUCT_NAME, PRODUCT_ID,
y columnas PRODUCT_STATUS. Además, la cláusula SENTENCIA debe contener el
LIST_PRICE y columnas MIN_PRICE y dos expresiones aritméticas adicionales aliased como
"Ahorros de Max Actual" y "% de Max Discount." El DE la cláusula sólo tienen que incluir la
comando de INFORMACIÓN PRODUCT_. Siga construyendo cada una de las tres expresiones
por su parte y liste a todos ellos juntos. La expresión "de producto" podría ser sacada con la select
SENTENCIA siguiente:
seleccione product_name ||' con el código: '|| product_id' ||' tiene el estado
de: '|| order_
estado COMO producto
La "expresión" de Ahorros de Max Actual podría ser sacada con la select SENTENCIA siguiente:
list_price escogido - min_price COMO "Ahorros de Max Actual"

La "expresión" de % de Max Discount toma el cálculo para "Ahorros de Max Actual", divide esto
la cantidad por el LIST_PRICE, y lo multiplica por 100. Podría ser sacado con la select SENTENCIA
siguiente:
Escogido ((list_price-min_price)/list_price) * 100 COMO "% de Max Discount"

Estas tres expresiones, junto con las dos columnas regulares, forman la cláusula SENTENCIA
ejecutada
contra la comando PRODUCT_INFORMATION como mostrado después:
102
Capítulo 2:
Extracción de datos Usando el SQL Select SENTENCIA

5. La comando DUAL versátil claramente se forma el DE la cláusula. La cláusula SENTENCIA es


más
interesante, ya que ningunas columnas actuales están siendo seleccionadas, sólo una expresión
aritmética. Una select SENTENCIA posible para sacar este cálculo podría ser:
escogido (4 * (22/7) * (3958.759 * 3958.759)) COMO "el área de la Tierra"
de dual;
Este cálculo se acerca que la área de superficie del planeta tierra es 197016572.595304 millas cuadradas.

3
La restricción y la
Comandoación de
Datos

OBJETIVOS DE CERTIFICACIÓN

3.01 Limite las Filas Recuperadas por una Pregunta


3.02 Clasifique las Filas Recuperadas por una Consulta 3.03 Substitución de signo ""


Q&A

Taladradora de dos minutos


Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

104
Capítulo 3:
La restricción y la Comandoación de Datos

L a limitación de las columnas recuperadas por una select SENTENCIA es conocida

como la proyección y fue introducida en el Capítulo 2. La restricción de las filas volvió es


conocido como la selección. Este capítulo habla el DONDE la cláusula, que es un realce a la

selección

funcionalidad de la select SENTENCIA. EL DONDE La cláusula especifica una o varias condiciones


esto
el servidor de Oracle evalúa para restringir las filas devueltas por la select. Un realce de lenguaje
adicional es introducido por el PEDIDO POR la cláusula, que proporciona capacidades de
comandoación de datos. La substitución de signo "" introduce una manera de reutilizar la misma
select para ejecutar preguntas diferentes substituyendo elementos de pregunta en el tiempo de
ejecución. Este área del tiempo de ejecución ligando en select SQL es a fondo explorada.

OBJETIVO DE CERTIFICACIÓN 3.01

Limite las Filas Recuperadas por una Pregunta


Uno de los principios de piedra angular en la teoría relacional es la selección. La
selección es
utilización actualizada el DONDE cláusula de la select SENTENCIA. Las condiciones
que restringen el dataset volvieron toman muchas formas y actúan sobre columnas así
como expresiones. Sólo aquellas filas en una comando que se conforman con estas
condiciones son devueltas. Las condiciones restringen filas usando a operadores de
comparación junto con columnas y valores literales. Los operadores booleanos
proporcionan un mecanismo para especificar que condiciones múltiples de restringir las
filas volvieron. Booleano, condicional, hablan de encadenamiento, y operadores
aritméticos para establecer su pedido de la precedencia cuando los encuentran en una
select SENTENCIA. Las cuatro áreas siguientes son investigadas:

■ el DONDE cláusula ■ operadores de Comparación ■ operadores Booleanos ■


reglas de Precedencia

EL DONDE cláusula
EL DONDE la cláusula amplía la select SENTENCIA proporcionando la lenguaje a
restrinja filas devueltas basado en una o varias condiciones. El interrogatorio de una
comando con sólo el ESCOGIDO y DE cláusulas causa cada fila de datos almacenados
en la comando
Limite las Filas Recuperadas por una Pregunta
105

ser devuelto. Usando la palabra clave DISTINTA, los valores duplicados son excluidos, y las filas
consiguientes son restringidas hasta cierto punto. ¿Y si la información muy específica sea requerida de
una comando, por ejemplo, sólo los datos donde una columna contiene un valor específico? ¿Cómo
recuperaría usted los COUNTRIES que pertenecen a la región de Europa de la comando de
COUNTRIES? ¿Y recuperar sólo a aquellos EMPLOYEES que trabajan como representantes de ventas?
Estas preguntas son contestadas usando el DONDE la cláusula para especificar exactamente qué filas
deben ser devueltas. El formato del SQL select SENTENCIA que incluye el DONDE la cláusula es:
SELECCIONE * | {column|expression [distinto] [alias], }
DE comando [DONDE condición (ones)];
Los ESCOGIDOS y DE cláusulas fueron examinados en el Capítulo 2. El DONDE
la cláusula siempre sigue el DE la cláusula. Los corchetes indican que el DONDE la cláusula es opcional.
Una o varias condiciones pueden ser aplicadas simultáneamente para restringir el SET de resultado. Una
condición es especificada comparando dos términos usando a un operador condicional. Estos términos
pueden ser valores de columna, literales, o expresiones. El operador de igualdad más comúnmente es
usado para restringir SETs de resultado. Dos ejemplos de DONDE las cláusulas son mostradas después:
seleccione country_name de COUNTRIES donde region_id=3;

seleccione last_name, first_name de EMPLOYEES donde job_id ='SA_REP';


El primer ejemplo proyecta la columna COUNTRY_NAME de los COUNTRIES
comando. En vez de seleccionar cada fila, el DONDE la cláusula restringe las filas volvió a sólo aquellos que
contienen unos 3 en la columna REGION_ID. El segundo ejemplo proyecta dos columnas, LAST_NAME y
FIRST_NAME de la comando de EMPLOYEES. Las filas volvieron son restringidos a aquellos que
contienen el valor SA_REP en sus columnas JOB_ID.

Las Condiciones de Condiciones basadas del modo numérico deben ser formuladas
apropiadamente para tipos de datos de columna diferentes. Las condiciones que restringen filas basadas en
columnas numéricas pueden ser especificadas de varios modos diferentes. Considere la columna de
SUELDO en la comando de EMPLOYEES. Esta columna tiene un tipo de datos del NÚMERO (8,2). La
figura 3-1 muestra dos caminos diferentes en los cuales la columna de SUELDO ha sido restringida. Los
primeros y segundos ejemplos
106
Capítulo 3:
La restricción y la Comandoación de Datos

FIGURA 3-1

Dos modos de seleccionar


valores numéricos en un
DONDE cláusula
recupere el LAST_NAME y valores de SUELDO de los EMPLOYEES que ganan
10.000$. Note la diferencia en el DONDE las cláusulas de las preguntas siguientes. La
primera pregunta especifica el número 10000, mientras el segundo encierra el número
dentro de citas solas como un carácter literal. Ambos formatos son aceptables para el
Oracle ya que una conversión de tipo de datos implícita es realizada cuando necesario.
seleccione last_name, sueldo de EMPLOYEES donde sueldo = 10000;

seleccione last_name, sueldo de EMPLOYEES donde sueldo = '10000';


Una columna numérica puede ser comparado con otra columna numérica en la
misma fila
construir un DONDE la condición de cláusula, como la pregunta siguiente demuestra:
seleccione last_name, sueldo de EMPLOYEES donde sueldo =
department_id;
El primer ejemplo en la Figura 3-2 muestra como el DONDE la cláusula es demasiado
restrictiva
y no causa ningunas filas seleccionadas. Esto es porque la variedad de valores de
SUELDO es 2100 a 999999.99, y la variedad de valores de DEPARTMENT_ID es 10 a
110. Ya que no hay ningún traslapo en la variedad de DEPARTMENT_ID y valores de
SUELDO, no hay ningunas filas que satisfagan esta condición y por lo tanto nada es
devuelto. El ejemplo también ilustra como un DONDE la condición de cláusula compara
una columna numérica con el otro.
Limite las Filas Recuperadas por una Pregunta
107

FIGURA 3-2

La utilización el DONDE
cláusula con expresiones
numéricas

El segundo ejemplo en la Figura 3-2 demuestra la ampliación el DONDE condición


de cláusula de comparar una columna numérica, SUELDO, a la expresión numérica:
DEPARTMENT_ID*100. Para cada fila, el valor en la columna de SUELDO es
comparado con el producto del valor de DEPARTMENT_ID y 100. El DONDE la
cláusula también permite expresiones a ambos lados del operador de comparación.
Usted podría publicar la select siguiente para ceder resultados idénticos:
seleccione last_name, sueldo de EMPLOYEES donde sueldo/10 =
department_id*10;
Como en álgebra regular, la expresión (SUELDO = DEPARTMENT_ID * 100)
es equivalente a (SUELDO/10 = DEPARTMENT_ID * 10). El aspecto notable sobre
este ejemplo es que los términos a ambos lados del operador de comparación son
expresiones.

Las Condiciones de Condiciones basadas en el carácter que determinan


qué filas son seleccionadas basadas en datos de carácter, son especificadas encerrando
literales de carácter en la cláusula condicional, dentro de citas solas. La columna JOB_ID
en la comando de EMPLOYEES tiene un tipo de datos de VARCHAR2 (10). Suliste que
usted quiso un informe que consiste en los valores LAST_NAME de aquellos
EMPLOYEES actualmente EMPLOYEES como representantes de ventas. El valor de
JOB_ID para un representante de ventas es SA_REP. La select siguiente produce tal
informe.
seleccione last_name de EMPLOYEES donde job_id ='SA_REP';
108
Capítulo 3:
La restricción y la Comandoación de Datos

Si usted tratara de especificar el carácter literal sin las citas, un error de Oracle
sería levantado. Recuerde que el carácter los datos literales son el instancia sensible,
entonces el siguiente DONDE las cláusulas no son equivalentes.
La cláusula 1: donde la Cláusula 2 job_id=SA_REP: donde job_id
='Sa_Rep' la Cláusula 3: donde job_id ='sa_rep'
La cláusula 1 genera "ORA-00904: "SA_REP": identificador inválido" error desde
entonces
SA_REP literal no es envuelto en citas solas. La cláusula 2 y la Cláusula 3 son
sintácticamente correctas, pero no equivalentes. Adelante, ninguna de estas cláusulas
cede cualesquiera datos ya que no hay ningunas filas en la comando de EMPLOYEES
que tengan valores de columna JOB_ID que son Sa_Rep o sa_rep, como mostrado en la
Figura 3-3.
Las condiciones basadas en el carácter no son limitadas con la comparación de
valores de columna con literales. Ellos también pueden ser especificados usando otras
columnas de carácter y expresiones. El LAST_NAME y las columnas FIRST_NAME
son ambos especificados como VARCHAR2 (25) los datos teclearon columnas.
Considere la pregunta:
seleccione employee_id, job_id de EMPLOYEES donde
last_name=first_name;
Tanto el LAST_NAME como las columnas FIRST_NAME aparecen a ambos lados
del
operador de igualdad en el DONDE cláusula. Ningunos valores literales están presentes;
por lo tanto no

FIGURA 3-3

La utilización el DONDE cláusula


con datos de carácter
Limite las Filas Recuperadas por una Pregunta
109

los carácteres de cotización solos son necesarios para delimitarlos. Esta condición
estipula que sólo las filas que contienen el mismo valor de datos (un partido sensible al
instancia exacto) en el LAST_NAME y columnas FIRST_NAME serán devueltas. Esta
condición es demasiado restrictiva y, ya que la Figura 3-4 muestra, ningunas filas son
devueltas.
Las expresiones basadas en el carácter forman una o ambas partes de una condición
separada por un operador condicional. Estas expresiones pueden ser formadas
concadenando valores literales con una o varias columnas de carácter. Las cuatro
cláusulas siguientes demuestran algunas opciones para condiciones basadas en el
carácter:
Cláusula
1:
donde
Un || last_name || first_name = 'Un Rey'
Cláusula
2:
donde
first_name ||' '|| last_name = last_name ||' '|| first_name
Cláusula
3:
donde
'SA_REP' || 'Rey' = job_id || last_name
Cláusula
4:
donde
job_id || last_name = 'SA_REP' || 'Rey'

FIGURA 3-4

Carácter basado en la
columna DONDE cláusula
110
Capítulo 3:
La restricción y la Comandoación de Datos
La cláusula 1 concadena el literal "A" de cuerda al LAST_NAME y FIRST_
Columnas de NOMBRE. Esta expresión es comparado con el literal "Un Rey," y
cualquier fila que cumpla esta condición es devuelta. La cláusula 2 demuestra que las
expresiones de carácter pueden ser colocadas a ambos lados del operador condicional. La
cláusula 3 ilustra que las expresiones literales también pueden ser colocadas a la
izquierda del operador condicional. Es lógicamente equivalente a la cláusula 4, que ha
cambiado el operands en la cláusula 3 alrededor. Las ambas cláusulas 3 y 4 causan la
misma fila de datos devueltos, como mostrado en la Figura 3-5.

Las columnas de FECHA de Condiciones basadas en la fecha son útiles


almacenando información de tiempo y fecha. Los literales de fecha deben ser
encerrados en comillas solas justo como datos de carácter; por otra parte un error es
levantado. Cuando usado en el condicional DONDE cláusulas, las columnas de FECHA
son

FIGURA 3-5

Equivalencia de expresiones
condicionales
Limite las Filas Recuperadas por una Pregunta
111

comparado con otras columnas de FECHA o a literales de fecha. Los literales son automáticamente
convertidos en valores de FECHA basados en el formato de fecha por defecto, que es DD-MON-RR. Si
un literal ocurre en una expresión que implica una columna de FECHA, es automáticamente convertido en
un valor de fecha usando la máscara de formato por defecto. DD representa días, MON representa las tres
primeras cartas de un mes, y RR representa un Año 2000-año dócil (es decir si RR está entre 50 y 99,
entonces el servidor de Oracle vuelve el siglo anterior, más esto devuelve el siglo corriente). El año de
cuatro dígitos apretado, YYYY, también puede ser especificado. Considere las cuatro select SQL siguientes:
La select 1: seleccione employee_id de job_history donde start_date = end_date;

La select 2: seleccione employee_id de job_history donde start_date = '01-JAN-


2001';

La select 3: seleccione employee_id de job_history donde start_date = '01-JAN-01';

La select 4: seleccione employee_id de job_history donde start_date = '01-JAN-99';


La primera select prueba la igualdad entre dos columnas de FECHA. Las filas que contienen
los mismos valores en su START_DATE y columnas END_DATE serán devueltos. Note, sin embargo,
que los valores de FECHA sólo son iguales el uno al otro si hay un partido exacto entre todos sus
componentes incluso día, mes, año, horas, minutos, y segundos. El capítulo 4 habla de los detalles de
almacenar valores de FECHA. Hasta entonces, no se preocupe de las horas, minutos, y componentes de
segundos.
En el DONDE la cláusula de la segunda select, la columna START_DATE es comparado con el
carácter literal: '01-JAN-2001'. El componente de año de cuatro dígitos entero (YYYY) ha sido
especificado. Esto es aceptable para el servidor de Oracle, y todas las filas en la comando JOB_HISTORY
con la columna START_DATE valoran igual al primero de enero de 2001 será devuelto.
La tercera select es equivalente al segundo ya que el literal '01-JAN-01' es convertido a 01-JAN-2001
de valor de fecha. Esto es debido al componente RR que es menos de 50, entonces el siglo (veintiuno)
corriente, 20, es prefijado al año componente de RR para proporcionar un valor de siglo. Todas las filas
en la comando JOB_HISTORY con valores de columna START_DATE = 01-JAN-2001 serán devueltas.
112
Capítulo 3:
La restricción y la Comandoación de Datos

El componente de siglo para el literal '01-JAN-99' se hace el anterior


el siglo (veinte), 19, cede un valor de fecha de 01-JAN-1999 para la cuarta select, ya
que el componente RR, 99, es mayor que 50. Las filas en la comando JOB_HISTORY
con valores de columna START_DATE = 01-JAN-1999 serán devueltas.
La aritmética usando la adición y operadores de substracción es apoyada en
expresiones que implican valores de FECHA. Una expresión como: END_DATE - la
FECHA de START_ devuelve un valor numérico que representa el número de días entre
la FECHA START_ y END_DATE. Una expresión como: START_DATE + 30 vueltas
un valor de FECHA que es 30 días más tarde que START_DATE. Entonces la expresión
siguiente es legítima, como mostrado en la Figura 3-6:
seleccione employee_id de job_history donde start_date + 30 = '31-
JAN-99';
Esta pregunta devuelve filas de la comando JOB_HISTORY que contiene un
START_
Valor de FECHA igual hasta 30 días antes 31-JAN-1999. Por lo tanto, sólo las filas con
un valor de 01-JAN-1999 en la columna START_DATE serán recuperadas.

FIGURA 3-6

La utilización el DONDE
cláusula con expresiones
numéricas
Limite las Filas Recuperadas por una Pregunta
113

Las cláusulas condicionales comparan dos términos usando a operadores de


comparación. Es importante entender los tipos de datos de los términos implicados entonces
ellos pueden ser encerrados en citas solas, si es necesario. Un error común debe suponer que un
DONDE la cláusula es sintácticamente correcta, cuando de hecho, esto pierde la cita

Operadores de comparación
las señales que delimitan literales de fecha o carácter. Otro descuido común no es
consciente que los términos a la izquierda y el derecho del operador de comparación en
una cláusula condicional pueden ser expresiones, columnas, o valores literales. Ambos estos
conceptos pueden ser probados en el examen.
El operador de igualdad es usado extensivamente para ilustrar el concepto de restringir
filas usando un DONDE cláusula. Hay varios operadores alternativos que también
pueden ser usados. Los operadores de desigualdad como "menos que" o "mayor que o igual
a" pueden ser usados para devolver filas que se conforman con condiciones de
desigualdad. El ENTRE el operador facilita la comparación basada en la variedad con la
prueba si un valor de columna está entre dos valores. El EN el ingreso de SET de prueba
de operador, entonces una fila es devuelta si el valor de columna probado en la
condición es un miembro de un SET de literales. Al modelo que empareja al operador
de comparación LE GUSTA es muy potente, permitiendo componentes de datos de
columna de carácter ser emparejado a literales que se conforman con un modelo
específico. El último operador de comparación hablado en esta sección es SER el
operador NULO, que devuelve filas donde el valor de columna contiene un valor nulo.
Estos operadores pueden ser usados en cualquier combinación en el DONDE hablarán
de la cláusula y después.

La igualdad y la Desigualdad que Limita las filas devueltas por una pregunta
implican especificar un conveniente DONDE cláusula. Si la cláusula es demasiado
restrictiva, entonces pocos o ningunas filas son devueltos. Si la cláusula condicional es
demasiado ampliamente especificada, entonces más filas que se requieren son devueltos.
La exploración de los operadores disponibles diferentes debería proveerle de la lenguaje
para solicitar exactamente aquellas filas en las cuales usted está interesado. Las pruebas
para la igualdad en una condición son tanto naturales como intuitivas. Tal condición es
formada usando el "es igual a" (=) operador. Una fila es devuelta si la condición de
igualdad es verdad para aquella fila. Considere la pregunta siguiente:
seleccione last_name, sueldo de EMPLOYEES donde job_id ='SA_REP';
114
Capítulo 3:
La restricción y la Comandoación de Datos

La columna JOB_ID de cada fila en la comando de EMPLOYEES es probada de la igualdad


con el carácter SA_REP literal. Para la información de carácter para ser igual, debe
haber un partido sensible al instancia exacto. Cuando tal partido es encontrado, los
valores para las columnas proyectadas, LAST_NAME y SUELDO, son devueltos para
aquella fila, como mostrado en la Figura 3-7. Note que aunque la cláusula condicional
esté basada en la columna JOB_ID, no es necesario para esta columna ser proyectado
por la pregunta.
Las condiciones basadas en la desigualdad realzan el DONDE especificación de
cláusula. Extiéndase y modelo que empareja comparaciones son operadores de igualdad
y desigualdad de utilización posibles, pero a menudo es preferible usar el ENTRE y
COMO operadores para estas comparaciones. Los operadores de desigualdad son
descritos en la Tabla 3-1.
Los operadores de desigualdad permiten que preguntas basadas en la variedad sean
realizadas. Puede requerirse que usted proporcione un SET de resultados donde un valor
de columna es mayor que otro valor.

FIGURA 3-7

Condiciones basadas en el
operador de igualdad
Limite las Filas Recuperadas por una Pregunta
115

TABLA 3-1

Operadores de desigualdad

Operador
¡<> <=> = <>! =

Descripción
Menos que Mayor que Menos que o igual a Mayor que o igual a No igual a No igual a

Por ejemplo, la pregunta siguiente puede ser publicada para obtener una lista de
LAST_NAME y valores de SUELDO para EMPLOYEES que ganan más que 5000$:
seleccione last_name, sueldo de EMPLOYEES donde sueldo> 5000;
Del mismo modo, para obtener una lista de EMPLOYEES que ganan menos de
3000$, el siguiente
la pregunta puede ser presentada:
seleccione last_name, sueldo de EMPLOYEES donde sueldo <3000;
Los operadores de desigualdad compuestos (arreglado de más de un símbolo) son
utilizados
en las cuatro cláusulas siguientes:
Cláusula
1:
donde
sueldo
<=
3000;
Cláusula
2:
donde
sueldo
> =
5000;
Cláusula
3:
donde
sueldo
<>
department_id;
Cláusula
4:
donde
sueldo
! =
4000+department_id;
La cláusula 1 devuelve aquellas filas que contienen un valor de SUELDO que es
menos que o
igual a 3000. La cláusula 2 obtiene datos donde el valor de SUELDO es mayor que o
igual a 5000, mientras las cláusulas 3 y 4 demuestran las dos formas del "no igual a"
operadores. La cláusula 3 devuelve las filas que tienen valores de columna de SUELDO
que no son iguales a los valores de DEPARTMENT_ID. El suplente "no igual" al
operador en la cláusula 4 ilustra que las columnas, los literales, y las expresiones pueden
ser todos comparados usando a operadores de desigualdad. La cláusula 4 devuelve
aquellas filas que contienen un valor de SUELDO que no es igual a la suma del
DEPARTMENT_ID para aquella fila y 4000.
La desigualdad numérica es naturalmente intuitiva. La comparación de carácter y
términos de fecha, sin embargo, es más compleja. Las pruebas de la desigualdad de
carácter son interesantes ya que las cuerdas comparadas a ambos lados del operador de
desigualdad son convertidas
116
Capítulo 3:
La restricción y la Comandoación de Datos

a una representación numérica de sus carácteres. Basado en el SET de caracteres de


base de datos y NLS (Apoyo de Lenguaje Nacional) configuraciones, cada cadena de
caracteres es adjudicada un valor numérico. Estos valores numéricos forman la base
para la evaluación de la comparación de desigualdad. Considere la select siguiente:
seleccione last_name de EMPLOYEES donde last_name <'Rey';
El carácter 'Rey' literal es convertido a una representación numérica. Asunción
un SET de caracteres de base de datos US7ASCII con configuraciones NLS
AMERICANAS, el 'Rey' literal es convertido en una suma de sus valores de carácter
ordinales: K + yo + n + g = (75+105+110+103=393). Para cada fila en la comando de
EMPLOYEES, la columna de NOMBRE de LAST_ es de manera similar convertida a
un valor numérico. Si este valor es menos de 393, entonces la fila es seleccionada. El
mismo proceso para comparar datos numéricos usando a los operadores de desigualdad
se aplica a datos de carácter. La única diferencia es que los datos de carácter son
convertidos implícitamente por el servidor de Oracle a un valor numérico basado en
ciertas configuraciones de base de datos.
Las comparaciones de desigualdad que actúan sobre valores de fecha siguen un
proceso similar a datos de carácter. El servidor de Oracle almacena fechas en un
formato numérico interno, y estos valores son comparados dentro de las condiciones. El
segundo de junio de un cierto año ocurre antes que el tercero de junio del mismo año.
Por lo tanto, el valor numérico de la fecha 02-JUN-2008 es menos que el valor
numérico de la fecha 03-JUN-2008. Considere la pregunta siguiente:
seleccione last_name de EMPLOYEES donde hire_date <'01-JAN-2000';
Esta pregunta recupera cada registro de empleado que contiene un valor de
HIRE_DATE esto
es antes que '01-JAN-2000'. Las filas con el empleado HIRE_DATE=31-DEC-1999 serán
devueltas, mientras las filas con el empleado que HIRE_DATE valora más tarde que el
primero de enero de 2000 no serán devueltas, como mostrado en la Figura 3-8.

EL DONDE la cláusula es una extensión fundamental a la select SENTENCIA y


forma la parte de la mayor parte de preguntas. Aunque muchos operadores de
comparación existan, la mayoría de condiciones están basados en la
comparación de dos términos usando tanto la igualdad como los operadores de
desigualdad.

La Comparación de variedad con el ENTRE el Operador el ENTRE


el operador prueba si una columna o la expresión valoran caídas dentro de una variedad
de dos valores límites. El artículo debe ser al menos el mismo como el valor límite
inferior, o como máximo el mismo como el valor límite más alto, o caída dentro de la
variedad, para la condición de ser verdad.
Limite las Filas Recuperadas por una Pregunta
117

FIGURA 3-8

Condiciones basadas en los


operadores de desigualdad
Suliste que usted quiere los apellidos de EMPLOYEES que ganan un sueldo en la
variedad de 3400$ y 4000$. Una solución posible usando el ENTRE el operador es como
sigue:
seleccione last_name de EMPLOYEES donde sueldo entre 3400 y 4000;
Este operador permite el DONDE condición de leer en una manera inglesa natural.
Los apellidos de todos los EMPLOYEES que ganan de 3400$ a 4000$ serán devueltos.
Hablan de operadores booleanos como Y, O, y NO más tarde en este capítulo, pero
ellos son introducidos aquí para realzar la descripción del ENTRE el operador. El Y
operador es usado para especificar múltiple DONDE las condiciones, todo de las
cuales debe estar satisfecho para una fila para ser devuelta. Usando el Y operador, el
ENTRE el operador es equivalente a dos condiciones usando el "mayor que o igual a" y
118
Capítulo 3:
La restricción y la Comandoación de Datos

"menos que o igual a" operadores, respectivamente. La select SQL precedente es


equivalente a la select siguiente, como mostrado en la Figura 3-9.
seleccione last_name de EMPLOYEES donde sueldo> = 3400 y sueldo <=
4000;
El valor de SUELDO para una fila es probado primero si es mayor que o igual a 3400
y segundo si es menos que o igual a 4000. Si ambas condiciones están satisfechas, el
valor de LAST_NAME de la parte de formas de fila del SET de resultados. Si sólo un o
ninguna de las condiciones están satisfechos, la fila no es seleccionada.
Las condiciones especificadas con el ENTRE el operador pueden ser por lo tanto
equivalentemente denotadas usando dos condiciones basadas en la desigualdad, pero es
más corto y más simple a

FIGURA 3-9

EL ENTRE operador
Limite las Filas Recuperadas por una Pregunta
119

especifique la condición de variedad usando el ENTRE el operador. La implicación de esta equivalencia


es que el mecanismo utilizado para evaluar numérico, carácter, y fecha operands por los operadores de
desigualdad es el mismo para el ENTRE el operador. La pregunta siguiente prueba si el valor de columna
HIRE_DATE es más tarde que 1994 24-JUL-, pero antes que 07-JUN-1996:
seleccione first_name, hire_date de EMPLOYEES donde hire_date entre '24-JUL-1994'
y '07-JUN-1996';
Usted no es restringido a la especificación de valores literales como el operands al
ENTRE el operador, ya que éstos pueden ser valores de columna y expresiones, como lo siguiente:
seleccione first_name, hire_date de EMPLOYEES donde '24-JUL-1994' entre
hire_date+30 y '07-JUN-1996';
Para una fila para ser devuelta por esta pregunta, el literal 24-JUL-1994 de fecha debe caerse
entre la columna HIRE_DATE de la fila valoran más 30 días y el literal 07-JUN-1996 de fecha.

La Comparación de SET con el EN el Operador el EN el operador prueba si un artículo


es un miembro de un SET de valores literales. El SET es especificado por una coma que separa los
literales y los encierra en soportes redondos. Si los literales son carácter o valores de fecha, entonces
éstos deben ser delimitados usando citas solas. Usted puede incluir tantos literales en el SET como usted
desea. Considere el ejemplo siguiente:
seleccione last_name de EMPLOYEES donde sueldo en (1000,4000,6000);
El valor de SUELDO en cada fila es comparado para la igualdad con los literales especificados
en el SET. Si el valor de SUELDO iguala 1000, 4000, o 6000, el valor de LAST_NAME para aquella
fila es devuelto. El Booleano O el operador, hablado más tarde en este capítulo, son usados para
especificar múltiple DONDE las condiciones, al menos un de las cuales debe estar satisfecho para una fila
para ser devuelta. El EN el operador es por lo tanto equivalente a una serie de O condiciones. La select
SQL precedente puede ser escrita usando múltiple O cláusulas de condición, por ejemplo:
seleccione last_name de EMPLOYEES donde sueldo = 1000 O sueldo = 4000 O sueldo =
6000;
120
Capítulo 3:
La restricción y la Comandoación de Datos

Esta select devolverá LAST_NAME de un empleado si al menos un del


DONDE las condiciones de cláusula son verdad; esto tiene el mismo sentido que la
select anterior que usa el EN el operador, como mostrado en la Figura 3-10.
Las pruebas del ingreso de SET usando el EN el operador son más sucintas que la
utilización múltiple O condiciones, especialmente como el número de miembros en el
SET aumenta. Las dos select siguientes demuestran el uso del EN el operador con datos
de CARÁCTER y FECHA.
seleccione last_name de EMPLOYEES donde last_name en ('Rey',
'Garbharran', 'Ramklass');

seleccione last_name de EMPLOYEES donde hire_date en ('01-JAN-1998',


'01-DEC-1999');

La Comparación de modelo con el Operador PARECIDO Para


examinar, el ENTRE el operador proporciona una manera concisa de especificar que las
condiciones basadas en la variedad, y el EN el operador proporcionan un método
óptimo al ingreso de equipo de prueba. Ahora presentamos al operador PARECIDO,
que es diseñado exclusivamente para datos de carácter y proporciona un mecanismo
potente a buscar cartas o palabras.
COMO es acompañado por dos carácteres de comodín: el símbolo de porcentaje (%) y
el carácter subrayar (_). El símbolo de porcentaje es usado para especificar el cero o más
carácteres de comodín, mientras el carácter subrayar especifica un carácter de comodín.
Un comodín puede representar cualquier carácter.

FIGURA 3-10

EL EN operador
Limite las Filas Recuperadas por una Pregunta
121

Puede solicitarse que usted proporcione una lista de EMPLOYEES cuyos nombres comienzan con la
carta "A". La pregunta siguiente puede ser usada para proporcionar este SET de resultados:
seleccione first_name de EMPLOYEES donde first_name como 'Un %';
El carácter literal comparado con que la columna FIRST_NAME es es encerrado en
citas solas como un carácter regular literal. Además, esto tiene un símbolo de porcentaje, que tiene un
sentido especial en el contexto del operador PARECIDO. El símbolo de porcentaje substituye el cero o más
carácteres añadidos a la carta A. Los archivos de empleado con valores de FIRST_NAME que comienzan
con la carta A son devueltos.
Los carácteres de comodín pueden aparecer al principio, medio o al final de carácter literal. Ellos
pueden parecer hasta solos como en:
donde first_name como '%';
En este instancia, cada fila que contiene un valor de FIRST_NAME que no es nulo será
devuelto. Los símbolos de comodín no son obligatorios usando al operador PARECIDO. En tales
instancias, COMO se comporta como un operador de igualdad que prueba de partidos de carácter exactos;
tan los dos siguientes DONDE las cláusulas son equivalentes:
donde last_name como 'Rey'; donde last_name = 'Rey';
El símbolo de comodín subrayar substituye exactamente un otro carácter en a
literal. Considere la busca de EMPLOYEES cuyos apellidos son cuatro cartas mucho tiempo, comienzan
con un "K", tienen una segunda carta desconocida, y final con un ng. Usted puede publicar la select
siguiente:
donde last_name como 'K_ng';
Según el dataset, usted puede recuperar a EMPLOYEES llamados al Rey, Kong, y
Kung. Una manera alterna de realizar el modelo correspondiente es usar una serie interminable de O
condiciones, pero conseguir los resultados precedentes sin usar al operador PARECIDO es
prohibitivamente complejo. Por ejemplo, puede ser conseguido con la serie siguiente de O condiciones:
donde last_name = 'Kang' O last_name = 'Kbng' O last_name = 'Kcng' OR last_name =
'Kzng'
Este ejemplo es incompleto, ya que no es factible poner cada carácter posible en una lista
esto podría ser substituido. Este ejemplo demuestra el esfuerzo escarpado requerido substituir un carácter
solo sin usar al operador PARECIDO y subrayar
122
Capítulo 3:
La restricción y la Comandoación de Datos

símbolo de comodín. Para un número desconocido (cero o más) de substituciones de


carácter, las posibilidades son exponencialmente más grandes que para la substitución
de carácter solo. No es prácticamente posible realizar el modelo de carácter que
empareja sin el uso del operador PARECIDO y los símbolos de comodín.
Como la Figura 3-11 muestra, los dos símbolos de comodín pueden ser usados
independientemente, juntos, o hasta tiempos múltiples en un single DONDE condición.
La primera pregunta recupera aquellos archivos donde COUNTRY_NAME comienza
con la carta "I" seguida del cero o más carácteres, uno de los cuales debe ser una
minúscula "a".
La segunda pregunta recupera aquellos COUNTRIES cuyos nombres contienen la
carta "i" como su quinto carácter. La longitud de los valores de COUNTRY_NAME y
la carta con la cual ellos comienzan es sin importancia. Los cuatro subrayan símbolos de
comodín que preceden a la minúscula "i" en el DONDE la cláusula representa
exactamente cuatro carácteres (que podría ser cualquier carácter). La quinta carta debe
ser un "i", y el símbolo de porcentaje

FIGURA 3-11

Los símbolos de comodín


del operador PARECIDO
Limite las Filas Recuperadas por una Pregunta
123

especifica que el COUNTRY_NAME puede tener el cero o más carácteres del sexto
carácter adelante.
¿Y el guión cuando usted busca un literal que contiene un porcentaje o subraya el
carácter? El oracle proporciona una manera de inhibir temporalmente su sentido especial
y considerarlos como carácteres regulares usando el identificador de FUGA. La
comando de JOBS contiene valores de JOB_ID que son literalmente especificados con
un carácter subrayar, como el SA_MAN, AD_VP, MK_REP, y SA_REP. Suliste que
haya, además, una fila en la comando de JOBS con un JOB_ID de SA%MAN. El aviso
allí no es subrayan el carácter en este JOB_ID. ¿Cómo puede valores ser recuperado de
la comando de JOBS si usted busca valores de JOB_ID que comienzan con los carácteres
SA _? Considere la select SQL siguiente:
seleccione * de JOBS donde job_id como 'SA _ %';
Esta pregunta devolverá las filas SA_REP, SA_MAN, y SA%MAN. El
no cumplen con el requisito en este ejemplo desde una fila adicional, SA%MAN, no
conformándose con el criterio que esto comienza con los carácteres SA _, también es
devuelto, como el primer ejemplo en espectáculos de Figura 3-12.
Naturalmente ocurrir subraya el carácter puede ser evitado (o tratado como un
símbolo no especial regular) la utilización del identificador de FUGA junto con un
carácter de FUGA. El segundo ejemplo en la Figura 3-12 muestra la select SQL que
recupera los archivos de comando de JOBS con los valores de JOB_ID iguales a
SA_MAN y SA_REP y que se conforma con el requisito original:
seleccione job_id de JOBS donde job_id como 'SA \_ %' se escapan '\';

FIGURA 3-12

El identificador de FUGA y
otros por el estilo operador
124
Capítulo 3:
La restricción y la Comandoación de Datos

El identificador de FUGA instruye al servidor de Oracle de tratar cualquier carácter encontrado


después del carácter de barra invertida como un símbolo no especial regular sin sentido
de comodín. En el precedente DONDE cláusula, cualquier valor de JOB_ID que
comience con los tres carácteres "SA _" será devuelto. Tradicionalmente, el carácter de
FUGA es el símbolo de barra invertida, pero no tiene que ser. La select siguiente es
equivalente a la anterior, pero usa un símbolo de dólar como el carácter de FUGA en
cambio.
seleccione job_id de JOBS donde job_id como 'el SA$ _ %' evitan 'el
$';
El símbolo de porcentaje puede ser de manera similar evitado cuando ocurre
naturalmente
como datos de carácter. Suliste, hay un requisito para recuperar la fila con JOB_ID
hipotético: SA%MAN introducido antes. El interrogatorio de la comando de JOBS para
valores de JOB_ID, como el SA%MAN usando el código siguiente causa los archivos
SA_MAN y SA%MAN devuelto.
seleccione job_id de JOBS donde job_id como 'SA%MAN';
El servidor de Oracle interpreta el símbolo de porcentaje en el DONDE cláusula
como a
símbolo de comodín cuando usado con el operador PARECIDO. Obtener la fila con
JOB_ID: SA%MAN usando al operador PARECIDO, el símbolo de porcentaje puede
ser evitado usando la select siguiente:
seleccione job_id de JOBS donde job_id como 'SA \FUGA' DE HOMBRE de %
'\';
La barra invertida es definida como el carácter de FUGA que instruye el Oracle
servidor no para hacer instancia de las propiedades de comodín del símbolo que ocurre
inmediatamente después de la barra invertida. De esta manera, ambos símbolos de
comodín pueden ser usados como carácteres especializados o como regulares en
segmentos diferentes de la misma cadena de caracteres.

EJERZA 3-1 Utilización del Operador PARECIDO


Recupere una lista de valores de DEPARTMENT_NAME que se terminan con las
tres cartas
"ing" de la comando de DEPARTMENTS.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La cláusula


SENTENCIA es
DEPARTMENT_NAME ESCOGIDO

3. El DE la cláusula es
DE DEPARTMENTS
Limite las Filas Recuperadas por una Pregunta
125
4. El DONDE la cláusula debe realizar una comparación entre el DEPARTMENT_
Valores de columna de NOMBRE y un modelo de carácteres que comienzan con cero o más carácteres
pero se terminan con tres carácteres específicos, "ing".
5. El operador que habilita el modelo de carácter correspondiente es el operador PARECIDO. El
modelo con el cual la columna DEPARTMENT_NAME debe conformarse es '%ing'. El símbolo de
comodín de porcentaje indica que el cero o más carácteres pueden preceder a la serie "ing" de
carácteres.
6. Así, el DONDE la cláusula es
DONDE DEPARTMENT_NAME COMO '%ing' 7. La ejecución de esta select devuelve el SET de
resultados que emparejan este modelo como
mostrado en la ilustración siguiente:
126
Capítulo 3:
La restricción y la Comandoación de Datos

La Comparación nula con SER el Operador NULO valores NULOS


inevitablemente encuentra su camino en tablas de base de datos. A menudo hace falta
que sólo aquellos archivos que contienen un valor NULO en una columna específica
sean buscados. SER el operador NULO sólo selecciona las filas donde un valor de
columna específico es NULO. Las pruebas de valores de columna para la igualdad con el
NULO son realizadas usando SER el operador NULO en vez del "es igual" al operador
(=).
Considere la pregunta siguiente que trae la columna LAST_NAME de la comando de
EMPLOYEES para aquellas filas que hacen almacenar valores NULOS en la columna
COMMISSION_PCT:
seleccione last_name de EMPLOYEES donde commission_pct es nulo;
Esto DONDE la cláusula lee naturalmente y sólo recupera los archivos que contienen
Valores de COMMISSION_PCT nulos. Como la Figura 3-13 muestra, la pregunta usando el
"es igual" al operador no devuelve ninguna fila, mientras la pregunta usando SER el operador
NULO hace.

Operadores booleanos
Los datos son restringidos usando un DONDE cláusula con una condición sola. Los
operadores booleanos o lógicos habilitan condiciones múltiples para ser especificadas
en el DONDE la cláusula de la select SENTENCIA. Esto facilita una capacidad de
extracción de datos más refinada. Considere el aislamiento de aquellos archivos de
empleado con valores de FIRST_NAME que comienzan con la carta "J" y quiénes
ganan un mayor COMMISSION_PCT que el 10 por ciento. En primer lugar, los datos
en la comando de EMPLOYEES deben ser restringidos a valores de FIRST_NAME
como "J %", y en segundo lugar, los valores de COMMISSION_PCT para los archivos
deben ser probados para averiguar si ellos son más grandes que el 10 por ciento. Estas
dos condiciones separadas pueden tener que ver usando el Booleano Y operador y son
aplicadas consecutivamente en un DONDE cláusula. Un SET de resultado que se
conforma con algunas o todas condiciones o con la negación de una o varias
condiciones puede ser especificado usando a operadores Booleanos.

EL Y Operador el Y operador fusiona condiciones en una condición más grande a


la cual una fila debe conformarse para ser incluida en el SET de resultados. Los
operadores booleanos son definidos usando tablas de verdad. La tabla 3-2, el Y comando
de verdad de operador, resume su funcionalidad.
Si dos condiciones especificaran en un DONDE la cláusula es afiliada con un Y
operador, entonces una fila es probada consecutivamente de la conformidad a ambas
condiciones antes de ser recuperada. Si esto no se conforma con ninguno o sólo una de
las condiciones, la fila es excluida ya que el resultado es FALSO. Si la fila contiene un
valor NULO que causa una de las condiciones de evaluar al NULO, entonces aquella
fila es excluida. Una fila sólo será
Limite las Filas Recuperadas por una Pregunta
127

FIGURA 3-13

La utilización de SER
operador NULO
TABLA 3-2

Y Comando de Verdad de Operador

Condición X
FALSO VERDADERO FALSO VERDADERO VERDADERO NULO FALSO NULO NULO
Condición Y
FALSO FALSO VERDADERO VERDADERO NULO VERDADERO NULO FALSO NULO

Resultado
FALSO FALSO FALSO VERDADERO NULO NULO FALSO FALSO NULO
128
Capítulo 3:
La restricción y la Comandoación de Datos
devuelto si cada condición afiliada con un Y operador evalúa al VERDADERO. En un
guión con más de dos condiciones afiliadas con el Y operador, sólo los datos que se
conforman con cada condición serán devueltos.
Los archivos de empleado con valores de FIRST_NAME que comienzan con la carta
"J" y COMMISSION_PCT mayor que el 10 por ciento pueden ser recuperados usando
la pregunta siguiente:
seleccione first_name, last_name, commission_pct, hire_date de
EMPLOYEES donde first_name como 'J %' y commission_pct> 0.1;
Note que el DONDE la cláusula ahora tiene dos condiciones, pero sólo un DONDE
palabra clave. El Y operador separa las dos condiciones. Para especificar condiciones
adelante obligatorias, simplemente añádalos y asegure que ellos son separados por
adicional Y operadores. Usted puede especificar tantas condiciones como usted desea.
Recuerde, sin embargo, más Y condiciones especificadas, más restrictivo la pregunta se
hace. La figura 3-14 muestra la pregunta precedente seguida de dos restricciones
adicionales. El valor de HIRE_DATE debe ser más grande que 01-JUN-1996, y el
LAST_NAME debe contener la carta "o". La primera pregunta devuelve cuatro filas. Note
que el adicional Y las condiciones en la segunda pregunta están satisfechos por sólo dos
filas.

EL U OPERADOR EL U OPERADOR separa condiciones múltiples, al menos un


de las cuales debe estar satisfecho por la fila seleccionada para garantizar la inclusión en
el SET de resultados. La tabla 3-3, el O comando de verdad de operador, resume su
funcionalidad.

TABLA 3-3

O Comando de Verdad de Operador

Condición X
FALSO VERDADERO FALSO VERDADERO VERDADERO NULO FALSO NULO NULO

Condición Y
FALSO FALSO VERDADERO VERDADERO NULO VERDADERO NULO FALSO NULO

Resultado
FALSO VERDADERO VERDADERO VERDADERO VERDADERO VERDADERO NULO NULO
NULO
Limite las Filas Recuperadas por una Pregunta
129

FIGURA 3-14

La utilización el Y operador

Si dos condiciones especificaran en un DONDE la cláusula es afiliada con UN U


OPERADOR entonces una fila es probada consecutivamente de la conformidad a o a
ambas condiciones antes de ser recuperada. La conformación con sólo uno del O
condiciones es suficiente para el registro para ser devuelto. Si esto no se conforma con
ninguna de las condiciones, la fila es excluida ya que el resultado es FALSO. Una fila
sólo será devuelta si al menos una de las condiciones asociadas con UN U OPERADOR
evalúa al VERDADERO.
Recuperar archivos de empleado que tienen valores de FIRST_NAME que
comienzan con la carta B o aquellos con un mayor COMMISSION_PCT que el 35 por
ciento pueden ser escritos como:
seleccione first_name, last_name, commission_pct, hire_date de
EMPLOYEES donde first_name como 'B %' o commission_pct> 0.35;
130
Capítulo 3:
La restricción y la Comandoación de Datos

Note que las dos condiciones son separadas por el O palabra clave. Todo el empleado
los archivos con valores de FIRST_NAME que comienzan con una mayúscula "B" serán
devueltos sin tener en cuenta sus valores de COMMISSION_PCT, aun si ellos son
NULOS. Todos aquellos archivos que tienen COMMISSION_PCT valoran mayor que
el 35 por ciento, sin tener en cuenta con qué la carta sus valores de FIRST_NAME
comienza, también es devuelto.
Adelante O las condiciones pueden ser especificadas separándolos con UN U
OPERADOR. Más O condiciones usted especifica, menos restrictivo su pregunta se hace. La
figura 3-15 muestra la pregunta precedente con dos adicional O condiciones. El valor de
HIRE_DATE debe ser más grande que 01-JAN-2000 o el LAST_NAME deben comenzar
con la carta "B". La primera pregunta devuelve menos filas que la segunda pregunta ya que
más filas encuentran las condiciones menos restrictivas en la segunda pregunta que en el
primer.

FIGURA 3-15

La utilización EL U
OPERADOR
Limite las Filas Recuperadas por una Pregunta

GUIÓN & SOLUCIÓN


131
Usted tiene una pregunta compleja con condiciones múltiples. ¿Hay una restricción del número de condiciones que
usted puede especificar en el DÓNDE cláusula? ¿Hay un límite del número de operadores de comparación que usted
puede usar en una pregunta sola?
No. Usted puede especificar cualquier número de condiciones en el DONDE cláusula separada por los operadores
Booleanos. No hay ningún límite usando a los operadores de comparación, y ellos pueden ser especificados tiempos
múltiples si es necesario en una pregunta sola.
Usted ha sido encargado para localizar filas en la comando de EMPLOYEES donde los valores de SUELDO
contienen los números 8 y 0 adyacentes el uno al otro. La columna de SUELDO tiene un tipo de datos de
NÚMERO. ¿Es posible usar al operador de comparación PARECIDO con datos numéricos?
Sí. El oracle automáticamente echa los datos en el tipo de datos requerido, de ser posible. En este instancia, los
valores de SUELDO numéricos son momentáneamente "cambiados" en datos de carácter que permiten el uso del
operador PARECIDO localizar modelos correspondientes. La pregunta siguiente localiza las filas requeridas:
SELECCIONE * DE EMPLOYEES
DONDE SUELDO COMO 'EL %80 %';"
¿Restringiendo las filas volvió de la comando de JOBS a aquellos que contienen el valor SA_REP en la columna
JOB_ID, son una proyección, selección o juntura realizada?
Una selección es realizada ya que las filas son restringidas.

EL NO Operador el NO el operador niega a operadores condicionales. Una fila


seleccionada debe conformarse con la parte de enfrente lógica de la condición a fin de ser
incluida en el SET de resultados. La tabla 3-4, el NO comando de verdad de operador,
resume su funcionalidad.
Los operadores condicionales pueden ser negados por el NO operador como
mostrado por el DONDE las cláusulas pusieron en una lista en la Tabla 3-5.
Como los ejemplos en la Tabla 3-5 sugieren, el NO el operador puede ser muy útil. Es
importante entender que el NO el operador niega al operador de comparación en una
condición, si es una igualdad, desigualdad, variedad basada, modelo correspondiente,
ingreso de SET, u operador de pruebas nulo.

TABLA 3-4

EL NO Comando de Verdad de Operador

Condición X
FALSO VERDADERO NULO

NO Condición X
VERDADERO FALSO NULO
132
Capítulo 3:
La restricción y la Comandoación de Datos

TABLA 3-5

Condiciones Negadas por el NO Operador

Positivo
donde last_name ='King' donde first_name COMO 'R %' donde department_id EN (10,20,30) donde sueldo ENTRE 1
y 3000 donde commission_pct es NULO

Negativo
donde NO (last_name ='King') donde first_name NO COMO 'R %' donde department_id NO EN (10,20,30)
donde sueldo NO ENTRE 1 y 3000 donde commission_pct no es NULO

Recuperar al empleado registra con valores de FIRST_NAME que no comienzan con


la carta "B" o aquellos que no cumplen con un mayor COMMISSION_PCT que el 35
por ciento puede ser escrito como:
seleccione first_name, last_name, commission_pct, hire_date de
EMPLOYEES donde first_name no como 'B %' o no (commission_pct> 0.35);
Note que las dos condiciones todavía son separadas por EL U OPERADOR y el
NO el operador acaba de ser añadido sólo a ellos.

Y y O son operadores Booleanos que habilitan múltiple DONDE condiciones de


cláusula para ser especificadas en una pregunta sola. Todas las condiciones
separadas por un Y operador deben evaluar al verdadero después de probar los
valores de una fila para impedirle ser excluido del SET de resultados finales. Sin
embargo, sólo una de las condiciones separadas por UN U OPERADOR debe
evaluar al verdadero para evitar su exclusión del SET de resultados finales. Si
cinco condiciones, A, B, C, D, y E, ocurren en un DONDE la cláusula como
DONDE A y B o C o D y E, entonces una fila será devuelta si ambas condiciones
A y B son realizadas, o sólo condición C son encontrados, o sólo condición D es
encontrada, o ambas condiciones D y E son realizados.

Reglas de precedencia
La aritmética, el carácter, la comparación, y las expresiones Booleanas fueron
examinados en el contexto del DONDE cláusula. ¿Pero cómo se relacionan estos
operadores el uno con el otro? Los operadores aritméticos se suscriben a una jerarquía de
precedencia. Las expresiones acorchetadas son evaluadas antes de multiplicación y
operadores de división, que son evaluados antes de operadores de adición y
substracción. Del mismo modo, hay una jerarquía de precedencia para los operadores
antes mencionados como mostrado en la Tabla 3-6.
Los operadores al mismo nivel de la precedencia son evaluados de la izquierda a la
derecha si los encuentran juntos en una expresión. Cuando el NO el operador modifica
el
Limite las Filas Recuperadas por una Pregunta
133

TABLA 3-6

Jerarquía de Precedencia de operador

Nivel de precedencia
12345

78910 11

Símbolo de operador
()/, * , 
|| =, <>, <=>, =

¡[NO] COMO, NO ES NULO, [NO] EN [NO] ENTRE! =, <> NO Y O


Operación
Paréntesis o División de soportes y Adición de multiplicación e Igualdad de Encadenamiento de substracción y
desigualdad
comparación
Modelo, nulo, y SET
comparación
Comparación de variedad No igual a NO condición lógica Y condición lógica O condición lógica

COMO, es NULO, y EN operadores de comparación, su nivel de precedencia


permanece el mismo como la forma positiva de estos operadores.
Considere la select SENTENCIA siguiente que demuestra la interacción de varios
operadores diferentes:
seleccione last_name,salary,department_id,job_id,commission_pct de
EMPLOYEES donde last_name como '%a %' y sueldo> department_id * 200
o job_id en ('MK_REP', 'MK_MAN') y commission_pct no es nulo
El LAST_NAME, SUELDO, DEPARTMENT_ID, JOB_ID, y
Las columnas de COMMISSION_PCT son proyectadas de la comando de
EMPLOYEES basada en dos condiciones distintas. La primera condición recupera los
archivos que contienen el carácter "a" en el espacio de LAST_NAME Y con un valor
de SUELDO mayor que 200 veces el valor de DEPARTMENT_ID. El producto de
DEPARTMENT_ ID y 200 es tratado antes del operador de desigualdad ya que la
precedencia de la multiplicación es más alta que la comparación de desigualdad.
La segunda condición trae aquellas filas con valores JOB_ID DEL HOMBRE MK_
o de MK_REP en el cual los valores de COMMISSION_PCT no son nulos. Para una
fila para ser devuelta por esta pregunta, las primeras O segundas condiciones tienen
que ser realizadas. La figura 3-16 ilustra tres preguntas. La consulta 1 devuelve cuatro
filas. La consulta 2 está basada en la primera condición sólo hablada y devuelve cuatro
filas. La consulta 3 está basada en la segunda condición y devuelve filas cero.
134
Capítulo 3:
La restricción y la Comandoación de Datos

FIGURA 3-16

Precedencia de operador en el
DONDE cláusula
El cambio del pedido de las condiciones en el DONDE la cláusula cambia su sentido
debido a la precedencia diferente de los operadores. Considere la muestra de código
siguiente:
seleccione last_name,salary,department_id,job_id,commission_pct de
EMPLOYEES donde last_name como '%a %' y sueldo> department_id * 100
y commission_pct no es nulo o job_id = 'MK_MAN'
Hay dos condiciones compuestas en esta pregunta. La primera condición recupera
los archivos con el carácter "a" en el LAST_NAME paran y devuelven la pelota Y un
valor de SUELDO mayor que 100 veces el valor de DEPARTMENT_ID Y donde el
valor de COMMISSION_PCT no es nulo. La segunda condición trae aquellas filas con
valores JOB_ID de MK_MAN. Una fila es devuelta por esta pregunta, si esto se
conforma para condicionar un O condición dos, pero no necesariamente a ambos.
Limite las Filas Recuperadas por una Pregunta
135

FIGURA 3-17

Efecto de cláusula de
condición que pide debido a
reglas de precedencia
Como la Figura 3-17 ilustra, esta pregunta devuelve seis filas. Esto espectáculos
adicionales la división de la pregunta en dos preguntas basadas en sus dos condiciones
compuestas. La primera condición causa cinco filas devueltas mientras los segundos
resultados en la recuperación de sólo una fila con un valor JOB_ID de MK_MAN.

Los operadores booleanos O y Y permiten múltiple DONDE condiciones de


cláusula ser especificado. El Booleano NO el operador niega a un operador condicional y puede
ser usado varias veces dentro de la misma condición. La igualdad, desigualdad, ENTRE, EN, y
COMO

los operadores de comparación prueban dos términos dentro de una condición sola. Sólo un
operador de comparación es usado por cláusula condicional. La distinción entre Booleano y
operadores de comparación es importante y forma la base para muchas preguntas relacionadas
con este capítulo en el examen.
136
Capítulo 3:
La restricción y la Comandoación de Datos

OBJETIVO DE CERTIFICACIÓN 3.02

Clasifique las Filas Recuperadas por una Pregunta


Los diccionarios de lenguaje regulares clasifican palabras en comando alfabético. Las
páginas imprimidas en a
el libro es clasificado numéricamente en comando ascendente desde el principio hasta el
final. Las realizaciones prácticas de selección y proyección han sido cubiertas hasta
ahora. La utilidad de datasets recuperado puede ser considerablemente realzada con un
mecanismo para pedir o clasificar la información. La información puede ser clasificada
por comando alfabético, numéricamente, del más temprano al último, o en ascensión o
bajada del pedido. Adelante, los datos pueden ser clasificados por una o varias
columnas, incluso columnas que no son puestas en una lista en la cláusula
SENTENCIA. La comandoación es realizada una vez que los resultados de una select
SENTENCIA han sido traídos. Los parámetros de comandoación no influyen en los
archivos devueltos por una pregunta, sólo la presentación de los resultados. Exactamente
las mismas filas son devueltas por una select incluso una cláusula de clase como son
devueltos por una select excluyendo una cláusula de clase. Sólo el pedido de salida
puede diferenciarse. La comandoación de los resultados de una pregunta es llevada a
cabo usando el PEDIDO POR la cláusula.

El PEDIDO POR Cláusula


Cuando las tablas son creadas, ellos son al principio vacíos y no contienen ningunas
filas. Como filas
son insertados, actualizados, y borrados por uno o varios usuarios o sistemas de
aplicación, el pedido original de las filas almacenadas es perdido. El servidor de Oracle
no puede y no garantizar que las filas son almacenadas secuencialmente. Esto no es un
problema ya que un mecanismo para clasificar dataset recuperado está disponible en la
forma del PEDIDO POR la cláusula.
Esta cláusula es responsable de transformar salida de una pregunta en datos
clasificados más prácticos, fáciles de usar. El PEDIDO POR la cláusula siempre es la
última cláusula en una select SENTENCIA. Como la sintaxis llena de la select
SENTENCIA es cada vez más expuesta, usted observará nuevas cláusulas añadidas pero
ninguno de ellos será colocado después del PEDIDO POR la cláusula. El formato del
PEDIDO POR la cláusula en el contexto del SQL select SENTENCIA es como sigue:
SELECCIONE * | {column|expression [distinto] [alias], }
DE la comando [DONDE condición (ones)] [PIDEN POR {Cnel (es) |expr|
numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]];
Clasifique las Filas Recuperadas por una Pregunta
137

La ascensión y la Bajada de la Comandoación del pedido de Comandoación ascendente son


naturales para la mayor parte de tipos de datos y son por lo tanto el pedido de clase por defecto usado
siempre que el PEDIDO POR la cláusula sea especificado. Un pedido de comandoación ascendente por
números es el más bajo al más alto, mientras es el más temprano al último para fechas y por comando
alfabético para carácteres. La primera forma del PEDIDO POR la cláusula muestra que los resultados de
una pregunta pueden ser clasificados por una o varias columnas o expresiones:
PEDIDO POR Cnel (es) |expr; Suliste que un informe es solicitado que debe contener LAST_ de un
empleado
NOMBRE, HIRE_DATE, e información de SUELDO, clasificada por comando alfabético por la columna
LAST_NAME para todos los representantes de ventas y gerentes de marketing. Este informe podría ser
extraído con la select SENTENCIA siguiente:
seleccione last_name, hire_date, sueldo de EMPLOYEES donde job_id en ('SA_REP', 'MK_MAN')
piden por last_name;

Los datos seleccionados pueden ser pedidos por cualquiera de las columnas de las tablas en el
DE la cláusula, incluso aquellos que no aparecen en la lista SENTENCIA. Los resultados de la pregunta
precedente pueden ser clasificados por la columna COMMISSION_PCT, como mostrado en la Figura 3-
18.
El segundo ejemplo en la Figura 3-18 muestra que añadiendo la palabra clave DESC al PEDIDO POR
la cláusula, las filas son devueltas clasificadas en el pedido inclinado basado en la columna
COMMISSION_PCT. El tercer ejemplo demuestra NULLS opcional ÚLTIMAS palabras claves, que
especifican que si la columna de clase contiene valores nulos, entonces estas filas deben ser puestas en
una lista últimas después de clasificar las filas restantes basadas en su NO valores NULOS. Para
especificar que las filas con valores nulos en la columna de clase deberían ser mostradas primero, añada
el NULLS PRIMERAS palabras claves al PEDIDO POR la cláusula.
El ejemplo siguiente clasifica un basado dataset en una expresión. Esta expresión calcula el valor de un
empleado a una compañía basada en su HIRE_DATE y valores de SUELDO. Esta fórmula toma el valor de
HIRE_DATE y resta un número especificado de días para devolver una fecha más temprana. El número
de días restados es calculado dividiendo el valor de SUELDO por 10. La expresión es aliased como
EMP_VALUE como sigue:
seleccione last_name, sueldo, hire_date, hire_date-(sueldo/10) emp_value de EMPLOYEES
donde job_id en ('SA_REP', 'MK_MAN') piden por emp_value;
138
Capítulo 3:
La restricción y la Comandoación de Datos

FIGURA 3-18

La comandoación de datos
usando el PEDIDO POR
cláusula

La expresión EMP_VALUE es iniciada con el valor de HIRE_DATE y es


compensada adelante en el pasado basado en el espacio de SUELDO. La fecha
EMP_VALUE más temprana parece primera en el SET de resultado salida ya que el
PEDIDO POR la cláusula especifica que los resultados serán clasificados por el alias de
expresión. Note que los resultados podrían ser clasificados por la expresión explícita y el
alias podría ser omitido ya que EN el pedido POR LA FECHA HIRE_ - (SUELDO/10),
pero aliases de utilización ejecuta la pregunta más fácil a leer.
Varias opciones por defecto implícitas son seleccionadas cuando usted usa el
PEDIDO POR la cláusula. El más importante de éstos es que a menos que DESC sea
especificado, se supone que el pedido de clase suba. Si los valores nulos ocurren en la
columna de clase, se supone que el pedido de clase por defecto sea NULLS ÚLTIMO
para comandoaciones ascendentes y NULLS PRIMERO para bajar clases. Si ningún
PEDIDO POR la cláusula es especificado, la misma pregunta ejecutada en tiempos
diferentes puede volver el mismo SET de causa el pedido de fila diferente, entonces
ningunas asunciones deberían ser hechas en cuanto al pedido de fila por defecto.

Comandoación posicional
Clasifique las Filas Recuperadas por una Pregunta
139
El oracle ofrece una manera alterna y más corta de especificar la columna de clase o expresión. En vez de
especificar el nombre de columna, la posición de la columna como ocurre en la lista SENTENCIA es
añadida al PEDIDO POR la cláusula. Considere el ejemplo siguiente:
seleccione last_name, hire_date, sueldo de EMPLOYEES donde job_id en ('SA_REP',
'MK_MAN') piden por 2;
El PEDIDO POR la cláusula especifica los dos literales numéricos. Esto es equivalente a
especificando el PEDIDO POR HIRE_DATE, ya que la columna HIRE_DATE es la segunda columna
seleccionada en la cláusula SENTENCIA.
La comandoación posicional sólo se aplica a columnas en la lista SENTENCIA que hacen asociar una
posición numérica con ellos. La modificación de la pregunta precedente para clasificar los resultados por
la columna JOB_ID no es la comandoación posicional posible que usa ya que esta columna no ocurre en
la lista SENTENCIA.

Los Resultados de Comandoación compuestos de una pregunta pueden ser clasificados por más
de una columna usando la comandoación compuesta. Dos o más columnas pueden ser especificadas
(literalmente o posicionalmente) como el criterio de comandoación compuesto por comas que los separan
en el PEDIDO POR la cláusula. Piense que el requisito trae el JOB_ID, LAST_NAME, SUELDO, y
valores de HIRE_DATE de la comando de EMPLOYEES. Los requisitos adicionales son que los
resultados deben ser clasificados en el comando alfabético inverso por JOB_ID primero, luego en la
ascensión del comando alfabético por LAST_NAME, y finalmente en el pedido numéricamente inclinado
basado en la columna de SUELDO. La select SENTENCIA siguiente cumple estos requisitos:
seleccione job_id, last_name, sueldo, hire_date de EMPLOYEES donde job_id en
('SA_REP', 'MK_MAN') piden por job_id desc, last_name, 3 desc;
Cada columna implicada en la clase es puesta en una lista dejada a directamente en el comando de
importancia
separado por comas en el PEDIDO POR la cláusula, incluso el modificador DESC, que ocurre dos veces
en esta cláusula. Este ejemplo también demuestra especificaciones de columna literales y posicionales que
se mezclan. Como la Figura 3-19 muestra, hay varias filas con el mismo valor de JOB_ID, por ejemplo,
SA_REP. Para estas filas, los datos son clasificados por comando alfabético por el criterio de
comandoación secundario, que es la columna LAST_NAME.
140
Capítulo 3:
La restricción y la Comandoación de Datos

FIGURA 3-19

Comandoación compuesta
usando el PEDIDO POR
cláusula

Para las filas con mismo JOB_ID y mismos valores de columna LAST_NAME, como el
SA_REP y Smith, estas filas son clasificadas en el pedido de bajada numérico por la
tercera columna de clase, SUELDO.

El concepto de clasificar datos es por lo general a fondo probado. La sintaxis


del PEDIDO POR la cláusula es términos de clase francos, pero múltiples como expresiones,
columnas, y specifiers posicional, conectado con pedidos de clase inclinados por unos

términos y pedidos de comandoación ascendente por otros, proporcione un mecanismo de


comandoación de datos potente que viene con un aumento correspondiente de la complejidad.
Esta complejidad a menudo es probada, tan asegure que usted tiene un entendimiento sólido del
PEDIDO POR la cláusula.
EJERZA 3-2 Datos de Comandoación Usando el PEDIDO POR Cláusula
Clasifique las Filas Recuperadas por una Pregunta
141
La comando de JOBS contiene descripciones de tipos diferentes de JOBS que un
empleado en la organización puede ocupar. Esto contiene el JOB_ID, JOB_TITLE,
MIN_SALARY, y columnas MAX_SALARY. Se requiere que usted escriba una
pregunta que extrae el JOB_TITLE, MIN_SALARY, y columnas MAX_SALARY, así
como una expresión llamada el DESACUERDO, que es la diferencia entre el
MAX_SALARY y valores de MIN_SALARY, para cada fila. Los resultados sólo deben
incluir valores de JOB_TITLE que contienen la palabra "President" o "gerente". Clasifique
la lista en el pedido inclinado basado en la expresión de DESACUERDO. Si más de una
fila tiene el mismo valor de DESACUERDO, entonces, además, clasifican estas filas
por JOB_TITLE en el pedido alfabético inverso.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula


SENTENCIA es
SELECCIONE JOB_TITLE, MIN_SALARY, MAX_SALARY,
(MAX_SALARY - MIN_SALARY) DESACUERDO
3. El DE la cláusula es
DE JOBS
4. El DONDE las condiciones deben permitir sólo aquellas filas cuyo JOB_TITLE
la columna contiene la cuerda "presidente" O la cuerda "gerente".
5. El DONDE la cláusula es
DONDE JOB_TITLE COMO '%President %' O JOB_TITLE COMO '%Manager
%'
6. La comandoación es llevada a cabo con el PEDIDO POR la cláusula. La
comandoación compuesta es
utilización requerida tanto la expresión de DESACUERDO como la columna
JOB_TITLE en pedido inclinado.
7. El PEDIDO POR cláusula es
PEDIDO POR DESACUERDO DESC, JOB_TITLE DESC. Usted puede
especificar alternativamente la expresión explícita en el PEDIDO POR la cláusula
en vez del alias de expresión.
142
Capítulo 3:
La restricción y la Comandoación de Datos

8. La ejecución de la select devuelve un SET de resultados que emparejan este modelo como
mostrado en la ilustración siguiente.
OBJETIVO DE CERTIFICACIÓN 3.03

Substitución de signo ""


Como las preguntas son desarrolladas y perfeccionadas, ellos pueden ser guardados para
el futuro uso. A veces,
las preguntas se diferencian muy ligeramente, y es deseable tener una forma más
genérica de la pregunta que tiene una variable o placeholder definió lo que puede ser
substituido en el tiempo de ejecución.
Substitución de signo ""
143

El oracle ofrece esta funcionalidad en la forma de la substitución de signo "". Cada


elemento de la select SENTENCIA puede ser substituido, y la reducción de preguntas a
sus elementos principales para facilitar la reutilización puede guardarle las horas del
trabajo aburrido y reiterativo. Las áreas siguientes son examinadas en esta sección:

■ variables de Substitución ■ DEFINIR y VERIFICAN comandos

Variables de substitución
La llave al entendimiento de variables de substitución debe considerarlos como
placeholders.
Una pregunta de SQL es formada de dos o más cláusulas. Cada cláusula puede estar
dividida en subcláusulas, que son por su parte arregladas del texto de carácter.
Cualquier texto, subcláusula o elemento de cláusula, o hasta la pregunta de SQL entera
son un candidato por la substitución. Considere la select SENTENCIA en su forma
general:
SELECCIONE * | {column|expression [distinto] [alias], }
DE la comando [DONDE condición (ones)] [PIDEN POR {Cnel (es) |expr|
numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]];
Usando la substitución, usted inserta valores en los elementos puestos en bastardilla,
eligiendo que
palabras claves opcionales para usar en sus preguntas. Cuando la columna
LAST_NAME en la comando de EMPLOYEES se requiere, la pregunta es construida
usando la forma general de la select SENTENCIA y substituyendo el nombre de
columna LAST_NAME en el lugar de la columna de palabra en la cláusula
SENTENCIA y el nombre de tabla; EMPLOYEES en lugar de la comando de palabra
en el DE cláusula.

La Substitución de Signo "" sola La forma más básica y popular de la


substitución de elementos en una select SQL es la substitución de signo "" sola. El
carácter de signo "" (&) es el símbolo elegido para designar una variable de substitución
en una select y precede al nombre de variable sin espacios entre ellos. Cuando la
select es ejecutada, el servidor de Oracle trata la select, nota una variable de
substitución, e intenta resolver el valor de esta variable de uno de dos modos. En primer
lugar, esto comprueba si la variable es definida en la sesión de usuario. (Hablan del
comando DEFINIR más tarde en este capítulo.) Si la variable no es definida, el proceso
de usuario apremio para un valor que será substituido en el lugar de la variable. Una
vez que un valor es presentado, la select es completa y es ejecutada por el servidor de
Oracle. La variable de substitución de signo "" es resuelta en el tiempo de ejecución y es a
veces conocida como tiempo de ejecución ligando o substitución de tiempo de ejecución.
144
Capítulo 3:
La restricción y la Comandoación de Datos

Un requisito común en el departamento de HORA de muestra puede deber recuperar el


misma información para EMPLOYEES diferentes en tiempos diferentes. Quizás se
requiere que usted busque la información de contacto como datos PHONE_NUMBER
dados NOMBRE de LAST_ o valores de EMPLOYEE_ID. Esta solicitud genérica puede
ser escrita como sigue:
seleccione employee_id, last_name, phone_number de EMPLOYEES donde
last_name = &LASTNAME o employee_id = &EMPNO;
Como la Figura 3-20 muestra, ejecutando esta pregunta, el servidor de Oracle le
apremio a
introduzca un valor para la variable llamada LASTNAME. Usted escribe el apellido de un
empleado, si usted lo sabe, por ejemplo, 'Rey'. Si usted no sabe el apellido, pero sabe el
Número de identificación de empleado, usted puede teclear en cualquier valor y pulsar la
TECLA DE ENTRADA para presentar el valor. El oracle entonces le apremio para escribir un
valor para la variable EMPNO. Después de teclear en un valor, por ejemplo, 0, y golpear
ENTER, no hay ningunas variables de substitución restantes para el Oracle para resolverse
y la select siguiente es ejecutada:
seleccione employee_id, last_name, phone_number de EMPLOYEES donde
last_name = 'Rey' o employee_id = 0;
Las variables pueden ser adjudicadas cualquier nombre alfanumérico que sea un
nombre de identificador válido.
El literal que usted substituye cuando apremio por una variable debe ser un tipo de datos
apropiado para aquel contexto; por otra parte, un ORA-00904: el error de identificador
inválido es devuelto. Si la variable se supone para substituir un carácter o valor de
fecha, las necesidades literales para ser encerradas en citas solas. Una técnica útil debe
encerrar la variable de substitución de signo "" en citas solas tratando con valores de
fecha y carácter. De esta manera,

FIGURA 3-20

Substitución de signo "" sola


Substitución de signo ""
145

se requiere que el usuario presente un valor literal sin preocuparse de la inclusión de ello en citas. La
select siguiente vuelve a escribir el anterior, pero encierra la variable LASTNAME en citas:
seleccione employee_id, last_name, phone_number, e-mail de EMPLOYEES donde
last_name = '&LASTNAME' o employee_id = &EMPNO;
Cuando apremio para un valor para substituir a la variable LASTNAME, usted puede
por ejemplo, presente al Rey de valor sin cualquier cita sola, ya que éstos están presentes ya y cuando la
substitución de tiempo de ejecución es realizada, el primer DONDE la condición de cláusula se resolverá
a: DONDE LAST_NAME = 'Rey'.

La doble Substitución de Signo "" Allí es ocasiones cuando se refiere una variable de
substitución tiempos múltiples en la misma pregunta. En tales situaciones, el servidor de Oracle le
apremio para escribir un valor para cada acontecimiento de la variable de substitución de signo "" sola.
Para escrituras complejas esto puede ser muy ineficaz y aburrido. La select siguiente recupera el
FIRST_NAME y columnas LAST_NAME de la comando de EMPLOYEES para aquellas filas que
contienen el mismo SET de carácteres en ambos estos espacios:
seleccione first_name, last_name de EMPLOYEES donde last_name como '%&SEARCH%' y
first_name como '%&SEARCH%';
Las dos condiciones son idénticas, pero se aplican a columnas diferentes. Cuando esto
la select es ejecutada, usted es apremio primero para escribir un valor de substitución para la variable de
BÚSQUEDA usada en la comparación con la columna LAST_NAME. A partir de entonces, usted es
apremio para escribir un valor de substitución para la variable de BÚSQUEDA usada en la comparación
con la columna FIRST_NAME. Esto plantea dos problemas. En primer lugar, es ineficaz para escribir el
mismo valor dos veces, pero segundo y lo que es más importante los errores tipográficos pueden confundir
la pregunta ya que el Oracle no verifica que el mismo valor literal es entrado cada vez que las variables de
substitución con el mismo nombre son usadas. En este ejemplo, la asunción lógica es que los contenido de
las variables substituidas deberían ser el mismo, pero el hecho que las variables tienen el mismo nombre
no tiene ningún sentido al servidor de Oracle y esto no hace ninguna tal asunción. El primer ejemplo en la
Figura 3-21 muestra los resultados de ejecutar la pregunta precedente y presentar dos valores distintos para
la variable de substitución de BÚSQUEDA. En este ejemplo particular, los resultados son incorrectos ya
que el requisito debía recuperar FIRST_NAME y pares de NOMBRE de LAST_ que contuvieron la serie
idéntica de carácteres.
146
Capítulo 3:
La restricción y la Comandoación de Datos

FIGURA 3-21

Doble substitución de signo


""

En situaciones cuando se refiere una variable de substitución tiempos múltiples en la


misma pregunta y su intención son que la variable debe tener el mismo valor en cada
acontecimiento en la select, es preferible hacer el uso de la doble substitución de signo "".
Esto implica prefijar el primer acontecimiento de la variable de substitución que ocurre
tiempos múltiples en una pregunta, con dos símbolos de signo "" en vez de uno. Cuando
el servidor de Oracle encuentra una doble variable de substitución de signo "", un valor de
sesión es definido para aquella variable y usted no es apremio para escribir un valor
para ser substituido por esta variable en referencias subsecuentes.
El segundo ejemplo en la Figura 3-21 demuestra como la variable de BÚSQUEDA
es precedida por dos signos "" en la condición con la columna FIRST_NAME y a partir
de entonces es prefijada por un signo "" en la condición con la columna
LAST_NAME. Cuando ejecutado, usted es apremio para escribir un valor para ser
substituido por la variable de BÚSQUEDA sólo una vez para la condición con la
columna FIRST_NAME. Este valor es automáticamente resuelto entonces del valor de
sesión de la variable en referencias subsecuentes a ello, como en la condición con la
columna LAST_NAME. Para no definir la variable de BÚSQUEDA, usted tiene que
usar el comando de UNDEFINE descrito más tarde en este capítulo.
Substitución de signo ""
147

Si usted trabaja como un developer, administrador de base de datos, o usuario final comercial,
todo SQL le pregunta el encuentro puede ser ampliamente clasificado como ad hoc o repitió
preguntas. Las preguntas ad hoc son select por lo general únicas escritas durante un poco de
ejercicio de investigación de datos que con poca probabilidad serán reutilizados. Las preguntas
repetidas son aquellos que son ejecutados con frecuencia o periódicamente, que son por lo
general guardados ya que la escritura archiva y ejecutado con poco a ninguna modificación
siempre que requerido. La reutilización previene el tiempo de reurbanización costoso y permite
que estas preguntas consecuentes se beneficien potencialmente de los aspectos de afinación
automáticos natales del Oracle engranados hacia el rendimiento de pregunta que mejora.

La substitución de Nombres de Columna elementos Literales del DONDE cláusula han sido
el foco de la discusión sobre la substitución hasta ahora, pero prácticamente cualquier elemento de una
select SQL es un candidato por la substitución. En la select siguiente, el FIRST_NAME y las columnas
JOB_ID son estáticos y siempre serán recuperados, pero la tercera columna seleccionada es variable y
especificada como una variable de substitución llamada: Coronel. El SET de resultado es clasificado
adelante por esta columna variable en el PEDIDO POR la cláusula:
seleccione first_name, job_id, &&col de EMPLOYEES donde job_id en ('MK_MAN',
'SA_MAN') piden por &col;
Como la Figura 3-22 demuestra, en el tiempo de ejecución, usted es apremio para proporcionar un
valor
para el doble signo "" la variable llamó al Coronel. Usted podría escribir, por ejemplo, la columna llamada
el SUELDO y presentar su ingreso. La select que ejecuta realiza la substitución y recupera el
FIRST_NAME, JOB_ID, y columnas de SUELDO de la comando de EMPLOYEES clasificada por el
SUELDO.
A diferencia de carácter y literales de fecha, las referencias de nombre de columna no requieren citas
solas tanto cuando explícitamente especificado como cuando substituido vía la substitución de signo "".

Substituyendo Expresiones y texto Casi cualquier elemento de una select SQL puede ser
substituido en el tiempo de ejecución. La coacción consiste en que el Oracle requiere al menos que la
primera palabra sea estática. En instancia de la select SENTENCIA, en el muy mínimo, la palabra clave
SENTENCIA se requiere y el resto de la select puede ser substituido como sigue:
escogido &rest_of_statement;
148
Capítulo 3:
La restricción y la Comandoación de Datos
FIGURA 3-22

Substitución de nombres de
columna

Cuando ejecutado, usted es apremio para presentar un valor para la variable llamada:
REST_OF_STATEMENT, que podría ser cualquier pregunta legítima, como el
DEPARTMENT_NAME de DEPARMENTS. Si usted presenta este texto como
introducido para la variable, la pregunta que es ejecutada será resuelta a la select
siguiente:
seleccione department_name de DEPARTMENTS;
Considere la forma general de la select SQL vuelta a escribir usando el signo ""
substitución, como mostrado después:
seleccione &SELECT_CLAUSE de &FROM_CLAUSE donde &WHERE_CLAUSE piden
por &ORDER_BY_CLAUSE;
La utilidad de esta select es discutible, pero esto realmente ilustra el concepto
de substitución con eficacia. Como la Figura 3-23 muestra, la select precedente permite
que cualquier pregunta hablada hasta ahora sea presentada en el tiempo de ejecución. La
primera ejecución pregunta la comando de REGIONS, mientras la segunda ejecución
pregunta la comando de COUNTRIES. Los candidatos útiles por la substitución de
signo "" son select que son ejecutadas tiempos múltiples y se diferencian ligeramente el
uno del otro.
Substitución de signo ""
149

FIGURA 3-23

La substitución de
expresiones y texto
Defina y Verifique
La doble substitución de signo "" es usada para evitar el ingreso reiterativo cuando la
misma variable ocurre tiempos múltiples en una select. Cuando una doble substitución
de signo "" ocurre, la variable es almacenada como una variable de sesión. Como la
select ejecuta, todos los acontecimientos adicionales de la variable son automáticamente
resueltos usando la variable de sesión almacenada. Cualquier ejecución subsecuente de
la select dentro de la misma sesión automáticamente resuelve las variables de
substitución de valores de sesión almacenados. Esto no siempre es deseable y en efecto
limita la utilidad de variables de substitución. El oracle realmente proporciona, sin
embargo, un mecanismo a UNDEFINE estas variables de sesión.
150
Capítulo 3:
La restricción y la Comandoación de Datos

DENTRO DEL EXAMEN


Hay tres objetivos de certificación en este capítulo. La limitación de las filas recuperadas por una
pregunta introdujo el DONDE la cláusula, que prácticamente demuestra el concepto de la selección.
Las condiciones que limitan las filas volvieron están basados en comparaciones usando el ENTRE, EN,
COMO, Igualdad, e Inequal-ity operadores. Su entendimiento cuidadoso de estos operadores de
comparación y su comportamiento con el carácter, numérico, y tipos de datos de fecha será examinado,
junto con como ellos son diferentes del Booleano NO, Y, y U OPERADORES.
La utilización del PEDIDO POR la cláusula para clasificar resultados recuperados es opcional y muy
útil. Las preguntas de examen que prueban los conceptos de la comandoación tradicional, posicional, y
compuesta, junto con como los valores NULOS pueden ser manejados, son comunes. Cuando términos
de clase múltiples son

presente en el PEDIDO POR la cláusula, es aceptan - capaz de especificar pedidos de comandoación


ascendente por unos y bajando pedidos de clase por otros. Es un error común para olvidar que el Oracle
pro - vides esto mezcló el aspecto de comandoación también para la especificación del NULLS FIRST|
LAST modificador.
Su entendimiento de la substitución usando signos "" solos y dobles así como DEFINIR y comandos
de UNDEFINE será probado. Pueden darle una select que incluye una doble substitución de signo ""
vari-capaz que es referido posteriormente tiempos múltiples en la select, junto con una variable de
substitución de signo "" sola; se esperará que usted entienda las diferencias en su comportamiento. Su
entendimiento de nombre de columna, expresión, y substitución de texto también será medido.

El comando VERIFICAR es específico para SQL*Plus y controla si los elementos


substituidos son repetidos en la pantalla del usuario antes de la ejecución de una select
SQL que variables de substitución de usos. Hablan de estos comandos en las siguientes
secciones.

DEFINIR y las variables de nivel de Sesión de Comandos de UNDEFINE


son implícitamente creados cuando los se los refieren al principio en select SQL usando
la doble substitución de signo "". Ellos persisten o permanecen disponibles para la
duración de la sesión o hasta que ellos sean explícitamente indeterminados. Una sesión
se termina cuando el usuario sale su instrumento de cliente como SQL*Plus o cuando el
proceso de usuario es terminado anormalmente.
Substitución de signo ""
151

El problema con variables de sesión persistentes es ellos tienden a quitar mérito a la naturaleza
genérica de select que variables de substitución de signo "" de uso. Por suerte, estas variables de sesión
pueden ser borradas con el comando de UNDEFINE. Dentro de una escritura o en la línea de comandos
de SQL*Plus o Developer SQL, la sintaxis para no definir variables de sesión es como sigue:
Variable de UNDEFINE; Considere un ejemplo genérico simple que selecciona una columna estática y
variable de
la comando de EMPLOYEES y clases salida de basado en la columna variable. La columna estática
podría ser la columna LAST_NAME.
seleccione last_name, &&COLNAME de EMPLOYEES donde department_id=30 piden por
&COLNAME;
La primera vez que esta select ejecuta, usted es apremio para introducir un valor para
la variable llamada COLNAME. Vaya a suponer que usted escriba el SUELDO. Este valor es substituido y
la select ejecuta. Una ejecución subsecuente de esta select dentro de la misma sesión no apremio para
ningún valor de COLNAME ya que es definido ya como el SUELDO en el contexto de esta sesión y sólo
puede ser indeterminado con NO DEFINIR el comando de COLNAME, como mostrado en la Figura 3-
24. Una vez que la variable ha sido indeterminada, la siguiente ejecución de la select apremio al usuario
para un valor para la variable COLNAME.
El comando DEFINIR sirve dos objetivos. Esto puede ser usado para recuperar una lista de todas las
variables actualmente definidas en su sesión SQL; esto también puede ser usado explícitamente para
definir un valor para una variable referida como una variable de substitución por una o varias select
durante la vida de aquella sesión. La sintaxis para las dos variantes del comando DEFINIR es como sigue:
DEFINA;
DEFINA variable=value;
Como la Figura 3-25 demuestra, una variable llamada EMPNAME es definida explícitamente
tener el valor 'Rey'. Los independientes DEFINEN el comando en SQL*Plus entonces devuelve varias
variables de sesión prefijadas con un carácter subrayar así como otras variables familiares, incluso
EMPNAME y dobles variables de substitución de signo "" implícitamente definidas antes. Dos ejemplos de
pregunta diferentes pero simplistas son ejecutados, y la variable de substitución explícitamente definida
EMPNAME es referido por ambas preguntas. Finalmente, la variable es INDETERMINADA.
152
Capítulo 3:
La restricción y la Comandoación de Datos

FIGURA 3-24

El comando de UNDEFINE
La capacidad del instrumento de cliente SQL de apoyar variables persistentes por la
sesión puede ser apagada y en como requerido usando el comando de SET. El comando
de SET no es un comando de lenguaje SQL, pero mejor dicho un comando de control de
entorno SQL. Especificando el SET DEFINEN LEJOS, el instrumento de cliente (por
ejemplo, SQL*Plus) no guarda variables de sesión o adjunta el sentido especial al
símbolo de signo "". Esto permite que el símbolo de signo "" sea usado como un carácter
literal ordinario si es necesario. El SET DEFINE el comando de ON|OFF por lo tanto
determina si la substitución de signo "" está disponible en su sesión.
Substitución de signo ""
153

FIGURA 3-25

El comando DEFINIR

El ejemplo siguiente usa el símbolo de signo "" como un valor literal. Cuando
ejecutado, usted es apremio para sugerir que un valor para liga la variable SID.
seleccione 'Coda & Sid' del dual;
Apagando la funcionalidad de substitución de signo "" como sigue, esta pregunta
puede
sea ejecutado sin apremio:
SET DEFINE DE 'Coda & Sid' escogido de dual; SET DEFINE EN
Una vez que la select ejecuta, el SET DEFINEN EN el comando puede ser usado
encender la funcionalidad de substitución atrás. Si DEFINEN es HECHO RESALTAR
y el contexto que un signo "" es usado en una select no puede ser resuelto literalmente,
el Oracle devuelve un error.
154
Capítulo 3:
La restricción y la Comandoación de Datos

GUIÓN & SOLUCIÓN


La lista SENTENCIA de una pregunta contiene una columna sola. ¿Es posible clasificar los resultados
recuperados por esta pregunta por otra columna?
Sí. A menos que la comandoación posicional sea usada, el PEDIDO POR la cláusula es independiente de la cláusula
SENTENCIA en una select.
Las variables de substitución de signo "" apoyan la reutilizabilidad de select SQL reiterativamente ejecutadas. ¿Si
un valor substituido debe ser usado tiempos múltiples en partes diferentes de la misma select, es posible ser
apremio para presentar un valor de substitución sólo una vez y para aquel valor para ser automáticamente
substituido durante referencias subsecuentes a la misma variable?
Sí. Los dos métodos que pueden ser usados son la doble substitución de signo "" o el comando DEFINIR. Ambos
métodos causan el ingreso de suministro de usuario para una variable de substitución específica una vez. Este valor
permanece atado a la variable para la duración de la sesión a menos que sea explícitamente INDETERMINADO.
Usted ha sido encargado para recuperar el LAST_NAME y valores de DEPARTMENT_ID para todas las filas en
la comando de EMPLOYEES. Salida debe ser clasificada por el nullable DEPARTMENT_ID columna, y todas las
filas con valores de DEPARTMENT_ID nulos deben ser puestas en una lista últimas. ¿Es posible proporcionar los
resultados como solicitado?
Sí. El PEDIDO POR la cláusula asegura la comandoación por columnas que potencialmente contienen valores
NULOS permitiendo los modificadores NULLS PRIMERO o NULLS ÚLTIMO ser especificadas. La pregunta
siguiente localiza las filas requeridas: SELECCIONE LAST_NAME, DEPARTMENT_ID del PEDIDO DE
EMPLOYEES POR DEPARTMENT_ID NULLS ÚLTIMO;

El Comando VERIFICAR Como hablado antes, dos categorías de comandos están


disponibles tratando con el servidor de Oracle: la lenguaje de SQL manda y los
comandos de control de cliente SQL. La select SENTENCIA es un ejemplo de un
comando de lenguaje, mientras el comando de SET controla el entorno de cliente SQL.
Hay muchos lenguaje diferente y controla comandos disponibles, pero los comandos de
control pertinentes a la substitución son DEFINEN y VERIFICAN.
El comando VERIFICAR controla si la variable de substitución presentada es mostrada
onscreen entonces usted puede verificar que la substitución correcta ha ocurrido. Un
mensaje es mostrado pruebas la vieja cláusula seguida de la nueva cláusula que contiene el
valor substituido. El comando VERIFICAR es encendido y Fuera el conjunto de
comandos VERIFICAN A ON|OFF. Como la Figura 3-26 muestra, VERIFIQUE es apagado
primero, una pregunta que usa la substitución de signo "" es ejecutada, y usted es apremio
para introducir un valor. El valor es substituido entonces, las carreras de select, y sus
resultados son mostrados.
VERIFIQUE es encendido entonces, la misma pregunta es ejecutada, y usted es
apremio para introducir un valor. Una vez que el valor es introducido y antes de que la
select comience la ejecución, el Oracle muestra la cláusula que contiene la referencia a
la variable de substitución como la vieja cláusula con su número de línea y,
inmediatamente debajo de esto, la nueva cláusula muestra la select que contiene el valor
substituido.
Substitución de signo ""
155

FIGURA 3-26

El comando VERIFICAR

EJERZA 3-3 Substitución de Signo "" de Utilización


Un cálculo común realizado por el Departamento de recursos humanos está relacionado
con
el cálculo de impuestos impuesto sobre un empleado. Aunque, esto sea hecho para
todos los EMPLOYEES, siempre hay unos EMPLOYEES que disputan el impuesto
descontado de sus ingresos. El impuesto descontado por empleado es calculado
obteniendo el sueldo anual para el empleado y multiplicando esto por la tasa impositiva
corriente, que puede variar del año al año. Se requiere que usted escriba una pregunta
reutilizable usando la tasa impositiva corriente y el número EMPLOYEE_ID como
ingresos y devuelva el EMPLOYEE_ID, FIRST_NAME, SUELDO, SUELDO ANUAL
(SUELDO * 12), TAX_RATE, e IMPUESTO (TAX_RATE * SUELDO ANUAL)
información.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La lista sentencia debe


incluir las cuatro columnas especificadas así como dos ex -
pressions. La primera expresión aliased como el SUELDO ANUAL es un cálculo
simple, mientras la segunda expresión aliased como el IMPUESTO depende del
TAX_RATE. Ya que la TASA IMPOSITIVA puede variar, este valor debe ser
substituido en el tiempo de ejecución.
156
Capítulo 3:
La restricción y la Comandoación de Datos
3. La cláusula SENTENCIA es
SELECCIONE &&EMPLOYEE_ID, FIRST_NAME, SUELDO, SUELDO * 12 COMO "SUELDO
ANUAL", &&TAX_RATE, (&TAX_RATE * (SUELDO * 12)) COMO "EL IMPUESTO"
4. El doble signo "" que precede a EMPLOYEE_ID y TAX_RATE en el
La cláusula SENTENCIA estipula al Oracle que cuando la select es ejecutada el usuario debe ser
apremio para presentar un valor para cada variable de substitución que será usada dondequiera que los
se los refieran posteriormente como &EMPLOYEE_ID y &TAX_RATE, respectivamente.
5. El DE la cláusula es
DE EMPLOYEES 6. El DONDE la cláusula sólo debe permitir la fila cuyo valor de EMPLOYEE_ID es
especificado en tiempo de ejecución. 7. El DONDE la cláusula es
DONDE EMPLOYEE_ID = &EMPLOYEE_ID 8. La ejecución de esta select devuelve el SET de
resultados mostrados en el siguiente
ilustración.

RESUMEN DE CERTIFICACIÓN
Resumen de certificación
157
EL DONDE la cláusula proporciona la lenguaje que habilita la selección en el
ESCOGIDO
select. Los criterios para la inclusión o excluyendo filas toman la forma de condiciones.
Operadores de comparación que usan, dos términos son el uno comparado con el otro y
la condición es evaluada como verdadero o falso para cada fila. Estos términos pueden
ser valores de columna, literales, o expresiones. Si la suma Booleana de los resultados
de cada condición evalúa al verdadero para una fila particular, entonces aquella fila es
recuperada. Los operadores condicionales permiten que términos sean el uno
comparado con el otro en una variedad de caminos incluso igualdad, desigualdad,
variedad basada, ingreso de SET, y modelo de carácter que empareja la comparación.
Una vez que un SET de datos es aislado por su pregunta, el PEDIDO POR la
cláusula facilita clasificar las filas recuperadas basadas en numérico, fecha o columnas
de carácter o expresiones. Los resultados pueden ser clasificados usando combinaciones
de columnas o expresiones o ambos. Los datos son clasificados en comando ascendente
en ausencia.
Las select genéricas, reutilizables pueden ser construidas usando variables de
substitución de signo "" que apremio para valores de tiempo de ejecución durante la
ejecución. Las variables de substitución persistentes por la sesión pueden ser definidas
y son muy convenientes en situaciones donde muchas substituciones de la misma
variable ocurren en una select o escritura.
La select SENTENCIA simple ha sido ampliada para incluir un DONDE, y
PEDIDO POR la cláusula. Estos componentes básicos básicos ofrecen una lenguaje
práctica y útil que puede ser aplicada mientras usted construye su conocimiento de SQL.
158
Capítulo 3:
La restricción y la Comandoación de Datos


TALADRADORA DE DOS MINUTOS
Limite las Filas Recuperadas por una Pregunta
❑ el DONDE la cláusula amplía la select SENTENCIA proporcionando la lenguaje
esto habilita la selección.
❑ Una o varias condiciones constituyen un DONDE cláusula. Estas condiciones especifican
las reglas a las cuales los datos en fila deben conformarse para ser elegibles para la selección.
❑ Para cada fila probada en una condición, hay términos a la izquierda y el derecho de a
operador de comparación. Los términos en una condición pueden ser valores de columna,
literales, o expresiones.
❑ operadores de Comparación puede probar dos términos desde muchos puntos de vista. Igualdad
o desigualdad
las pruebas son mucho común, pero variedad, SET, y las comparaciones de modelo también
están disponibles.
❑ comparación de Variedad es realizado usando el ENTRE el operador, que prueba
si un término se cae entre principio dado y valores límites de final.
❑ ingreso de SET es probado usando el EN el operador. Una condición basada en un SET
la comparación evalúa al verdadero si el término de izquierda es puesto en una lista en el SET
citado del modo solo, delimitado por la coma en la derecha.
❑ El operador PARECIDO habilita modelos de carácter literales para ser emparejados con
otros literales, valores de columna, o expresiones evaluadas. El símbolo de porcentaje (%) se
comporta como un comodín que empareja el cero o más carácteres. El símbolo subrayar (_)
se comporta como un comodín de carácter solo que empareja exactamente un otro carácter.
❑ operadores Booleanos incluyen el Y, O, y NO operadores. El Y
y O los operadores habilitan cláusulas condicionales múltiples para ser especificadas. Éstos
son a veces mandados a como múltiples DONDE cláusulas.
❑ el NO el operador niega al operador de comparación implicado en una condición.

Clasifique las Filas Recuperadas por una Pregunta


❑ Resultados son clasificados usando el PEDIDO POR la cláusula. Las filas recuperadas pueden
ser
pedido según una o varias columnas especificando los nombres de columna o su posición
numérica en la cláusula SENTENCIA.
❑ El clasificado salida puede ser arreglado en utilización de comando ascendente o bajada
el DESC o los modificadores ASC después de la clase llaman en el PEDIDO POR la
cláusula.
Substitución de signo ""
Taladradora de dos minutos
159
❑ substitución de Signo "" facilita la reutilización de select SQL proporcionando un medio
substituir elementos de una select en tiempo de ejecución. La misma select SQL puede ser por lo
tanto ejecutada tiempos múltiples con parámetros de ingreso diferentes.
❑ substitución de signo "" Sola requiere la introducción de datos por el usuario para cada
acontecimiento de
la variable de substitución en la select. La doble substitución de signo "" requiere la introducción
de datos por el usuario sólo una vez por acontecimiento de una variable de substitución, ya que
esto define una variable persistente por la sesión con el valor de ingreso dado.
❑ variables persistentes por la Sesión puede ser puesto explícitamente usando el comando DEFINIR.
El comando de UNDEFINE puede ser usado para no poner a ambos implícitamente (doble
substitución de signo "") y variables de sesión explícitamente definidas.
❑ VERIFICAR el ajuste ambiental controla si SQL*Plus muestra el
las viejas y nuevas versiones de líneas de select que contienen variables de substitución.
160
Capítulo 3:
La restricción y la Comandoación de Datos

MÍ PRUEBA
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.

Limite las Filas Recuperadas por una Pregunta


1. ¿Qué dos cláusulas de la select SENTENCIA facilitan la selección y la proyección?
A. ESCOGIDO, DE B. PEDIDO POR, DONDE C. ESCOGIDO, DONDE D. ESCOGIDO, PIDA
POR
2. Elija la pregunta que extrae el LAST_NAME, JOB_ID, y valores de SUELDO del
La comando de EMPLOYEES para archivos que tienen valores de JOB_ID de SA_REP o de
MK_MAN y tienen el SUELDO valora en la variedad de 1000$ a 4000$. Los ESCOGIDOS y DE
cláusulas son LAST_NAME escogido, JOB_ID, SUELDO DE EMPLOYEES: A. DONDE JOB_ID
EN ('SA_REP', 'MK_MAN')
Y SUELDO> 1000 Y SUELDO <4000;
B. DONDE JOB_ID EN ('SA_REP', 'MK_MAN')
Y SUELDO ENTRE 1000 Y 4000;
C. DONDE JOB_ID COMO '% DE SA_REP' Y '% DE MK_MAN'
Y SUELDO> 1000 Y SUELDO <4000;
D. DONDE JOB_ID = 'SA_REP'
Y SUELDO ENTRE 1000 Y 4000 O JOB_ID ='MK_MAN';
3. ¿Cuál del siguiente DÓNDE cláusulas contiene un error? Los ESCOGIDOS y DE cláusulas son
SELECCIONE * DE EMPLOYEES: A. DONDE HIRE_DATE EN ('02-JUN-2004'); B. DONDE
SUELDO EN ('1000', '4000', '2000'); C. DONDE JOB_ID EN (SA_REP, MK_MAN); D. DONDE
COMMISSION_PCT ENTRE 0.1 Y 0.5;
Mí Prueba
161

4. Elija el DONDE la cláusula que extrae los valores de DEPARTMENT_NAME que contienen el
carácter "er" literal de la comando de DEPARTMENTS. Los ESCOGIDOS y DE cláusulas son
DEPARTMENT_NAME escogido DE DEPARTMENTS: A. DONDE DEPARTMENT_NAME EN
(' %e%r'); B. DONDE DEPARTMENT_NAME COMO '%er %'; C. DONDE
DEPARTMENT_NAME ENTRE 'e' Y 'r'; D. DONDE DEPARTMENT_NAME CONTIENE 'e
%r';
5. ¿Qué dos de las condiciones siguientes son equivalentes el uno al otro?
A. DONDE COMMISSION_PCT ES B NULO. DONDE COMMISSION_PCT = C NULO.
DONDE COMMISSION_PCT EN D (NULO). DONDE NO (COMMISSION_PCT NO ES
NULO)
6. ¿Qué tres de las condiciones siguientes son equivalentes el uno al otro?
A. DONDE SUELDO <=5000 Y SUELDO> =2000 B. DONDE SUELDO EN
(2000,3000,4000,5000) C. DONDE SUELDO ENTRE 2000 Y 5000 D. DONDE SUELDO> 1999
Y SUELDO <5001 E. DONDE SUELDO> =2000 Y <=5000

Clasifique las Filas Recuperadas por una Pregunta


7. Elija una select falsa sobre el PEDIDO POR la cláusula.
A. Usando el PEDIDO POR la cláusula, siempre aparece como la última cláusula en una select
SENTENCIA. B. El PEDIDO POR la cláusula puede aparecer en una select SENTENCIA que no
contiene a
DONDE cláusula.
C. El PEDIDO POR la cláusula especifica uno o varios términos por los cuales las filas
recuperadas son clasificadas.
Estos términos sólo pueden ser nombres de columna.
D. La comandoación posicional es llevada a cabo especificando la posición numérica de una
columna como ello ap-
peras en la lista SENTENCIA, en el PEDIDO POR cláusula.
8. La pregunta siguiente recupera el LAST_NAME, SUELDO, y valores de COMMISSION_PCT
para EMPLOYEES cuyo LAST_NAME comienza con la carta R. Basado en la pregunta siguiente,
elija el PEDIDO POR la cláusula que primeras clases los resultados por la columna
COMMISSION_PCT,
162
Capítulo 3:
La restricción y la Comandoación de Datos

el listado de los asalariados de comisión más altos primero, y luego clasifica los resultados en
comando ascendente por la columna de SUELDO. Cualquier archivo con COMMISSION_PCT
nulo debe parecer último: SELECCIONE LAST_NAME, SUELDO, COMMISSION_PCT DE
EMPLOYEES DONDE LAST_NAME COMO 'R %' A. PEDIDO POR COMMISSION_PCT
DESC, 2; B. PEDIDO POR 3 DESC, 2 ASC NULLS ÚLTIMO; C. PEDIDO POR 3 DESC
NULLS ÚLTIMO, 2 ASC; D. PEDIDO POR COMMISSION_PCT DESC, SUELDO ASC;

Substitución de signo ""


9. El comando DEFINIR explícitamente declara una variable de substitución persistente por la sesión
con a
valor específico. ¿Cómo es esto variable referido en una select SQL? Considere una expresión que
calcula el impuesto sobre el SUELDO de un empleado basado en la tasa impositiva corriente. ¿Para
la variable de substitución persistente por la sesión siguiente, qué select correctamente se refiere a
la variable TAX_RATE? DEFINA TAX_RATE=0.14 A. SUELDO ESCOGIDO *:TAX_RATE
IMPUESTO DE EMPLOYEES; B. SUELDO ESCOGIDO * &TAX_RATE IMPUESTO DE
EMPLOYEES; C. SUELDO ESCOGIDO * :&&TAX IMPUESTO DE EMPLOYEES; D. SUELDO
ESCOGIDO * IMPUESTO de TAX_RATE DE EMPLOYEES;
10. Usando variables de substitución de signo "" en la pregunta siguiente, cuantas veces le va
¿sea apremio para introducir un valor para la variable llamada HACEN TRABAJOS
TEMPORALES la primera vez que esta pregunta es ejecutada? SELECCIONE FIRST_NAME,
'&JOB' DE EMPLOYEES DONDE JOB_ID COMO 'el % '||&JOB||' %' Y '&&JOB' ENTRE UN Y
'Z'; A. 0 B. 1 C. 2 D. 3

PREGUNTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
Pregunta de laboratorio
163

Un cliente requiere una unidad de disco duro y una tarjeta de gráficos para su comandoador personal.
Ella quiere gastar entre 500$ y 800$ en la unidad de discos, pero es insegura del coste de una tarjeta de
gráficos. Su único requisito es que la resolución apoyada por la tarjeta de gráficos debería ser 1024768
o 12801024. Como el representante de ventas, usted ha sido encargado para escribir una pregunta que
busca la comando PRODUCT_INFORMATION donde el valor de PRODUCT_NAME comienza con
el HD (disco duro) o GP (procesador de gráficos) y sus precios de catálogo. Recuerde que los precios de
catálogo de disco duro deben estar entre 500$ y 800$ y los procesadores de gráficos tienen que apoyar
1024768 o 12801024. Clasifique los resultados en la bajada del pedido de LIST_PRICE.
164
Capítulo 3:
La restricción y la Comandoación de Datos

MÍ PRUEBAN
RESPUESTAS
Limite las Filas Recuperadas por una
Pregunta
1. ® C. La cláusula SENTENCIA facilita la proyección especificando la lista de columnas para
ser ✓
proyectado de una comando, mientras el DONDE la cláusula facilita la selección limitando
las filas recuperó basado en sus condiciones.
Los ® A, B, y D son incorrectos porque el DE la cláusula especifica la fuente de las filas que
son ˚
proyectado y el PEDIDO POR la cláusula es usado para clasificar las filas seleccionadas.
2. ® B. El EN el operador eficazmente prueba si el JOB_ID para una fila particular es cualquiera SA_

EL REPRESENTANTE o MK_MAN, mientras el ENTRE el operador eficazmente mide si el valor
de SUELDO de un empleado se cae dentro de la variedad requerida.
Los ® A y C excluyen a EMPLOYEES que ganan un sueldo de 1000$ o 4000$, desde éstos
SUELDO ˚
los valores son excluidos por los operadores de desigualdad. C también selecciona valores de
JOB_ID como % SA_REP y % MK_MAN, potencialmente seleccionando valores de JOB_ID
incorrectos. El D es el derecho de mitad. La primera mitad devuelve las filas con el JOB_ID igual
a SA_REP que tiene valores de SUELDO entre 1000$ y 4000$. Sin embargo, la segunda parte (el
O cláusula), correctamente prueba del JOB_ID igual al HOMBRE MK_, pero no hace instancia
de la condición de SUELDO.
3. ® C. Los literales de carácter que son comparado con la columna JOB_ID por el EN el operador
deben ✓
sea encerrado por comillas solas.
Los ® A, B, y D son sintácticamente correctos. Note que B no requiere citas alrededor del ˚
literales numéricos. Tenerlos, sin embargo, no causa un error.
4. ® B. El operador PARECIDO prueba la columna DEPARTMENT_NAME de cada fila para
valores ✓
esto contiene los carácteres "er". Los símbolos de porcentaje antes y después del carácter literal
indican que cualquier carácter que encierra el literal "er" es permisible.
Los ® A y C son sintácticamente correctos. Unos usos el EN el operador, que está
acostumbrado al equipo de prueba ˚
ingreso. El C prueba si el valor alfabético de la columna DEPARTMENT_NAME está entre la
carta "e" y la carta "r". Finalmente, el D usa la palabra "contiene", que no puede ser usado en este
contexto.
5. ® A y D. SER el operador NULO correctamente evalúa la columna COMMISSION_PCT para ✓
Valores NULOS. El D usa el NO operador para negar la versión ya negativa de SER el operador
NULO, no es NULO. Dos negativas devuelven un positivo, y por lo tanto A y D son equivalentes.
Los ® B y C son incorrectos ya que los valores NULOS no pueden ser probados por el operador
de igualdad o el ˚
EN operador.
Mí Respuestas de Prueba
165

6. ® A, C, y D. Cada una de estas condiciones prueba de valores de SUELDO en la variedad de


2000$ a ✓
5000$.
Los ® B y E son incorrectos. El B excluye valores como 2500$ de su SET, y E es ilegal ya que
es ˚
las ausencias de la columna de SUELDO llaman la referencia por el Y operador.

Clasifique las Filas Recuperadas por una Pregunta


7. ® C. Los términos especificados en un PEDIDO POR la cláusula pueden incluir nombres de
columna, ✓ posicional
la comandoación, valores numéricos, y expresiones.
Los ® A, B, y D son verdad. ˚
8. ® C. La comandoación posicional es realizada, y el tercer término en la lista SENTENCIA,
COMMISSION_ ✓
P.C., es clasificado primero en el pedido inclinado, y cualquier valor de COMMISSION_PCT nulo
es puesto en una lista último. El segundo término en la lista SENTENCIA, SUELDO, es clasificado
después en comando ascendente.
Los ® A, B, y D son incorrectos. No especifica que hacer con COMMISSION_ nulo ˚
Los valores de P.C., y el comportamiento por defecto durante una clase inclinada deben poner
NULLS en una lista PRIMERO. El B aplica el NULLS ÚLTIMO modificador a la columna de
SUELDO en vez de la columna de P.C. COMMISSION_, y D no hace instancia de NULLS
completamente.

Substitución de signo ""


9. ® B. Puede referirse una variable de substitución persistente por la sesión usando un símbolo de
signo "" ✓
desde dentro cualquier select SQL ejecutada en aquella sesión.
Los ® A, C, y D son incorrectos. A y D intentan referirse a la variable de substitución que usa
˚
un prefijo de colon a su nombre y el nombre de variable solo. Éstos son referencias inválidas a
variables de substitución en SQL. El C se refiere a una variable llamada el IMPUESTO y no
TAX_RATE variable.
10. ® D. La primera vez que esta select es ejecutada, dos variables de substitución de signo "" solas son

encontrado antes de la tercera doble variable de substitución de signo "". Si la primera referencia en
línea una de la pregunta contuviera una doble substitución de signo "", usted sólo sería apremio
para introducir un valor una vez.
Los ® A, B, y C son incorrectos ya que usted es apremio tres veces para introducir un valor
para el TRABAJO ˚
variable de substitución. En ejecuciones subsecuentes de esta select en la misma sesión usted no
será apremio para introducir un valor para esta variable.
166
Capítulo 3:
La restricción y la Comandoación de Datos

RESPUESTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
Se requiere que usted pregunte la comando PRODUCT_INFORMATION en el esquema OE para el
PRODUCT_NAME y columnas LIST_PRICE. Las filas seleccionadas deben conformarse con cualquiera
de dos condiciones. La primera condición consiste en que el PRODUCT_NAME debe comenzar con los
carácteres 'HD' y su LIST_PRICE debe caerse a la variedad entre 500$ y 800$. Alternativamente, la fila
puede engañar - forma a la segunda condición que el PRODUCT_NAME debe comenzar con los
carácteres 'GP' y contener los carácteres '1024'. Finalmente, los resultados deben ser clasificados en la
bajada del pedido de LIST_PRICE.
1. Comience al Developer SQL y conecte al esquema OE. 2. La cláusula SENTENCIA es
SELECCIONE PRODUCT_NAME, LIST_PRICE
3. El DE la cláusula es
DE PRODUCT_INFORMATION
4. La primera condición es
PRODUCT_NAME COMO '% DE HD' Y LIST_PRICE ENTRE 500 Y 800
5. La segunda condición es
PRODUCT_NAME COMO '% DE GP%1024'
6. Desde la primera o segunda condición debe ser realizada por una fila a fin de ser recuperada,
estas dos condiciones deben ser separadas con el Booleano U OPERADOR.
7. El DONDE la cláusula es
DONDE (PRODUCT_NAME COMO '% DE HD' Y LIST_PRICE ENTRE 500 Y 800) O
(PRODUCT_NAME COMO '% DE GP%1024')
8. El PEDIDO POR cláusula es
PEDIDO POR LIST_PRICE DESC
9. La ejecución de esta select devuelve el SET de resultados que emparejan este modelo como
mostrado en
la ilustración:
Respuesta de laboratorio
167
Esta página intencionadamente se dejó en blanco

4
Funciones de fila
sola

OBJETIVOS DE CERTIFICACIÓN
4.01

4.02

Describa Diversos tipos de Funciones Disponibles en SQL


Use Carácter, Número, y Fecha
Funciones en Select SENTENCIAS


Q&A

Taladradora de dos minutos


Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

170
Capítulo 4:
Funciones de fila sola

Las funcione s son una maravillosa extensión

a SQL y proporcionan una primera vislumbre de los apoyos de Oracle de capacidades procesales.
Las lenguajejes procesales permiten un nivel rico de la programación

esto cede una variedad casi ilimitada de posibilidades de manipulación de datos. Servidor
de oracle
pone en práctica una lenguaje procesal patentada llamada PL/SQL, o SQL procesal. Una variedad de
los objetos de programmatic llamados pueden ser construidos usando PL/SQL. Éstos incluyen
procedimientos, funciones, y paquetes. Aunque la escritura de PL/SQL sea relativamente franca, un
entendimiento cuidadoso de SQL es un requisito previo y el foco de este guía. Las funciones habladas
en este capítulo son encajonadas a programas de PL/SQL envasados y suministrados por el Oracle
como aspectos incorporados.

OBJETIVO DE CERTIFICACIÓN 4.01

Describa Diversos tipos de Funciones Disponibles en


SQL
Las funciones de SQL están ampliamente divididas en aquellos que calculan y
devuelven un valor para
cada fila en un conjunto de datos y aquellos que devuelven un valor agregado solo para
todas las filas. Las dos áreas siguientes son exploradas:

■ Definición de una función ■ Tipos de funciones

Definición de una Función


Una función es un programa escrito para aceptar opcionalmente parámetros de ingreso,
funcionar un
operación, o vuelta un valor solo. Una función devuelve sólo un valor por ejecución.
Tres componentes importantes forman la base de definir una función. El primer es la
lista de parámetro de ingreso. Esto especifica el cero o más argumentos que pueden ser
pasados a una función como introducido para el procesamiento. Estos argumentos o
parámetros pueden ser de tipos de datos que se diferencian, y unos son obligatorios
mientras los otros pueden ser opcionales. El segundo componente es el tipo de datos de
su valor consiguiente. Después de la ejecución, sólo un valor es devuelto por la
función. El tercer encapsula los detalles del procesamiento realizado por la función y
contiene el código de programación que opcionalmente manipula los parámetros de
ingreso, realiza cálculos y operaciones, y genera un valor de retorno.
Una función a menudo es descrita como una caja negra que toma un ingreso, realiza a
cálculo, y vueltas un valor como ilustrado por la ecuación siguiente. En vez de
Describa Diversos tipos de Funciones Disponibles en SQL
171
concentrándose en sus detalles de realización, usted es animado a concentrarse en los aspectos que las
funciones incorporadas proporcionan.
F (x, y, z, ) = resultado; las Funciones pueden ser anidadas dentro de otras funciones, como el F1 (x, y,
F2 (a, b), z),
donde F2, que toma dos parámetros de ingreso, a y b, y forma el tercer de cuatro parámetros presentados
a F1. Las funciones pueden actuar sobre cualquier tipo de datos disponible, el más popular que es
carácter, fecha, y datos numéricos. Estos operands pueden ser columnas o expresiones.
Como un ejemplo, considere una función que calcula la edad de una persona. La función de EDAD toma
un parámetro de ingreso de fecha, que es el cumpleaños de la persona. El resultado devuelto por la función
de EDAD es un número que representa la edad de una persona. El cálculo de caja negra implica obtener la
diferencia durante años entre la fecha corriente y el parámetro de ingreso de cumpleaños.

El funcionamiento en datos de Carácter de Datos de Carácter o cuerdas es versátil ya que


ellos facilitan el almacenamiento de casi cualquier tipo de datos. Las funciones que actúan sobre datos de
carácter son ampliamente clasificadas como conversión de instancia y funciones de manipulación de
carácter. La cuerda siguiente las funciones incorporadas son examinadas detalladamente más tarde en este
capítulo, pero una breve descripción es proporcionada aquí.
INFERIOR, SUPERIOR, e INITCAP son las funciones de conversión de instancia que converten una
columna de carácter dada, literal, o expresión en minúscula, mayúscula, o instancia inicial,
respectivamente:
más abajo ('SQL') = sql superior ('sql') = SQL initcap ('sql') = Sql
Las funciones de manipulación de carácter son excepcionalmente potentes e incluyen el
LA LONGITUD, CONCAT, SUBSTR, INSTR, LPAD, RPAD, NETO, y REEMPLAZAN funciones.
La LONGITUD (cuerda) función usa una cadena de caracteres como un parámetro de ingreso y
devuelve un valor numérico que representa el número de carácteres presentes en aquella cuerda:
longitud ('Una cuerda corta') = 14
El CONCAT (ensartan 1, ensartan 2) la función toma dos cuerdas y concadena o
se afilia a ellos del mismo modo que el operador de encadenamiento || hace:
concat ('los is' de SQL,' fácil a aprender. ') = SQL es fácil a aprender.
172
Capítulo 4:
Funciones de fila sola

El SUBSTR (cuerda, comience la posición, el número de carácteres) la función acepta tres


parámetros y devuelve una cuerda que consiste en el número de carácteres extraídos de
la cuerda de la fuente, que comienza en la posición de principio especificada:
substr ('http://www.domain.com', 12,6) = dominio
El INSTR (cuerda de la fuente, busque el artículo, [posición de principio], [el
acontecimiento enésimo de la búsqueda
artículo]) la función devuelve un número que representa la posición en la cuerda de la
fuente, que comienza de la posición de principio dada, donde el acontecimiento
enésimo del artículo de búsqueda comienza:
instr ('http://www.domain.com','. ', 1,2) = 18
El LPAD (cuerda, longitud después de acolchado, rellenando cuerda) y RPAD (cuerda,
longitud después
rellenando, rellenando la cuerda) las funciones añaden una serie de acolchado de
carácteres a la izquierda o derecho de una cuerda hasta que esto alcance la longitud
especificada después del acolchado.
La función NETA literalmente recorta de conducción o rastreo (o ambos) cadenas
de caracteres de una cuerda de la fuente dada:
rpad ('#PASSWORD#', 11, '#') = #PASSWORD## lpad ('#PASSWORD#', 11,
'#') = ##PASSWORD# neto ('#' de '#PASSWORD#') = CONTRASEÑA
REEMPLAZAR (cuerda, busque el artículo, el artículo de reemplazo) la función
localiza la búsqueda
el artículo en una cuerda dada y lo reemplaza con el artículo de reemplazo,
devolviendo una cuerda con valores reemplazados:
reemplace ('#PASSWORD#', 'PALABRA', 'PUERTO') = #PASSPORT#

Actuando sobre Datos Numéricos Muchas funciones incorporadas


numéricas están disponibles. Unos calculan raíces cuadradas, realizan exponentiation, y
converten números en el formato hexadecimal. Hay demasiado para mencionar, y
muchos los cálculos matemáticos, científicos, y financieros populares han sido
expuestos como funciones incorporadas por el Oracle.
Tres funciones numéricas comunes, examinadas más tarde en este capítulo, son
REDONDAS, TRUNC, y MOD. POR AHÍ (número, precisión decimal) facilita acabar
un número al valor más bajo o más alto dado un formato de precisión decimal:
la vuelta (42.39,1) = 42.4
El TRUNC (número, precisión decimal) la función deja o trunca el
número dado un valor de precisión decimal:
trunc (42.39,1) = 42.3
Describa Diversos tipos de Funciones Disponibles en SQL

El MOD (dividendo, divisor) devuelve el resto de una operación de división:


mod (42,10) = 2

El funcionamiento en información de Fecha


173
El funcionamiento con valores de fecha puede ser provocativo. La realización de la aritmética de fecha
que acomoda años bisiestos y longitudes de mes variables puede ser frustrante y susceptible de errores.
El oracle se dirige a este desafío proporcionando el apoyo natal a la aritmética de fecha y varias funciones
de fecha incorporadas, como el MONTHS_BETWEEN, ADD_MONTHS, LAST_DAY, NEXT_DAY,
SYSDATE, POR AHÍ, y TRUNC.
El MONTHS_BETWEEN (fecha 1, fecha 2) la función devuelve el número de meses entre dos
fechas, mientras el ADD_MONTHS (fecha 1, número de meses) devuelve la fecha que resulta de añadir
un número especificado de meses a una fecha:
months_between ('01-FEB-2008', '01-JAN-2008') = 1 add_months ('01-JAN-2008', 1) =
01-FEB-2008
Los LAST_DAY (fecha 1) funcionan vueltas el día anterior del mes que el
la fecha especificada se cae en, mientras el NEXT_DAY (fecha 1, día de la semana) devuelve la fecha en
cual el día especificado siguiente de las caídas de semana después de la fecha dada:
last_day ('01-FEB-2008') = 29-FEB-2008 next_day ('01-FEB-2008', 'el viernes') =
08-FEB-2008
La función de SYSDATE no toma ningunos parámetros y devuelve un valor de fecha esto
representa la fecha de servidor corriente y tiempo. POR AHÍ (fecha, formato de precisión de fecha) y
TRUNC (fecha, formato de precisión de fecha) por ahí y truncado un valor de fecha dado a la precisión de
fecha más cercana formatean como día, mes, o año:
sysdate = 17-DEC-2007 por ahí (sysdate, 'mes') = 01-JAN-2008 trunc (sysdate,
'mes') = 01-DEC-2007

Las funciones de fila sola son usadas en casi cada pregunta publicada por analistas, developeres,
y administradores. Buscando datos de carácter, la función NETA con frecuencia es usada para
eliminar espacios suplementarios que ocurren en espacios de carácter. Las funciones de
conversión de instancia son usadas para estandarizar los datos de columna. Esto facilita la
busca más exacta y eficiente desde el instancia en el cual los datos de carácter son capturados a
menudo es inconsecuente.
174
Capítulo 4:
Funciones de fila sola

Tipos de Funciones
Hablan de dos amplios tipos de funciones que actúan sobre filas solas y múltiples,
respectivamente, después. Esta distinción es esencial para el entendimiento del contexto
más grande en el cual las funciones son usadas. El oracle continuamente se esfuerza por
asegurar que su interpretación comercial de SQL se conforma con normas internacionales.
Esto facilita la facilidad de la migración de habilidades y sistemas a través de vendedores y
proveedores del software RDBMS. La realización del oracle de SQL es dócil con el
ANSI:1999 (Instituto de Estándares Nacional americano) el estándar para SQL. Más
recientemente, esto reclamó la conformidad parcial al estándar SQL:2003 endosado por
amba organización internacional para la normalización (Organización internacional para
la Estandarización) y ANSI. Las funciones de SQL han sido estandarizadas, y el Oracle ha
documentado a aquellos que son totalmente o parcialmente dóciles al estándar SQL:2003.

Las Funciones de fila sola Allí son varias categorías de funciones de fila sola
incluso el carácter, numérico, fecha, conversión, y general. El foco de este capítulo está
en el carácter, numérico, y funciones de fila sola de fecha. Éstos son funciones que
actúan sobre una fila de un dataset a la vez. Si una pregunta selecciona 10 filas, la
función es ejecutada 10 veces, una vez por fila con los valores de aquella fila como
introducido a la función.
Como la Figura 4-1 muestra, dos columnas de la comando de REGIONS han sido
seleccionadas junto con una expresión usando la función de LONGITUD con la columna
REGION_NAME.
La longitud de la columna REGION_NAME es calculada para cada fila, depruebas
que la función ha ejecutado cuatro veces separadas, devolviendo un resultado por fila.
Las funciones de fila sola manipulan los artículos de datos en fila para extraerlos y
formatearlos con objetivos de visualización. Los valores de ingreso a una función de fila
sola pueden ser el usuario - constantes especificadas o literales, datos de columna,
variables, o las expresiones opcionalmente suministradas por otro anidaron funciones de
fila sola. Anidar de funciones de fila sola es una técnica comúnmente usada. Las
funciones pueden devolver un valor con un tipo de datos diferente de sus parámetros de
ingreso. Como la Figura 4-1 demuestra, la función de LONGITUD acepta un parámetro
de ingreso de carácter y vuelve un numérico salida.
Hablan de funciones de conversión como TO_CHAR, TO_NUMBER, y TO_DATE
en el Capítulo 5. Ellos cambian el tipo de datos de datos de columna o expresiones que
permiten otras funciones actuar sobre ellos. También hablan de las funciones generales
en el Capítulo 5. Ellos simplifican el funcionamiento con valores NULOS y facilitan la
lógica condicional dentro de una select SENTENCIA. Éstos incluyen el NVL, NVL2,
NULLIF, SE FUNDEN, INSTANCIA, y DECODIFICAN funciones.
Aparte de su inclusión en la lista SENTENCIA de una pregunta de SQL, las funciones
de fila sola pueden ser usadas en el DONDE y PEDIDO POR cláusulas. Suliste que haya
un requisito para poner filas en una lista de la comando de REGIONS donde la longitud
de los datos de columna REGION_NAME es al menos cinco carácteres mucho tiempo.
Hay un adicional
Describa Diversos tipos de Funciones Disponibles en SQL
175

LA FIGURA 4-1 Una función de fila sola


necesidad de esta lista para ser clasificada en pedido alfabético basado en el valor del
último carácter en la columna REGION_NAME. EL DONDE La cláusula es mostrada
aquí:
donde longitud (region_name)> 4
Para obtener el último carácter en una cuerda, la función de SUBSTR es usada con el
Columna de REGION_NAME como la cuerda de la fuente. La longitud del
REGION_NAME es usada como la posición de principio, produciendo el PEDIDO
siguiente POR la cláusula:
pedido por substr (region_name, longitud (region_name), 1)
Como la Figura 4-2 muestra, sólo tres de las cuatro REGIONS son devueltas, y la lista
es clasificado en el pedido alfabético basado en el último carácter en la columna
REGION_NAME para cada fila.

Las Funciones de fila múltiple Como el nombre sugieren, esta categoría de


funciones actúa sobre más de una fila a la vez. Los usos típicos de funciones de fila
múltiple incluyen el cálculo de la suma o el promedio de los valores de columna numéricos
o contar el número total de archivos en SETs. Éstos son a veces conocidos como
agregación o funciones de grupo y son explorados en el Capítulo 7.
176
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-2 Funciones en ESCOGIDO, DONDE, y PEDIDO POR cláusulas


Las funciones de fila sola son ejecutadas para cada fila en el conjunto de datos
seleccionado. Este concepto es implícitamente probado vía ejemplos prácticos en el examen.
Las funciones siempre devuelven sólo un valor de un tipo de datos predeterminado. Ellos
pueden aceptar el cero o más parámetros de tipos de datos que se diferencian. Las funciones
de carácter de fila sola

como la LONGITUD, SUBSTR, e INSTR son con frecuencia usados juntos, y se requiere un
entendimiento cuidadoso de éstos. Recuerde que los parámetros de ingreso que pueden ser
implícitamente convertidos a los tipos de datos requeridos por funciones son aceptables para el
Oracle.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

OBJETIVO DE CERTIFICACIÓN 4.02


Use Carácter, Número, y Funciones de Fecha en
Select SENTENCIAS
177
Esta sección conduce una investigación detallada de las funciones de fila sola
introducidas
antes. Un enfoque estructurado será tomado que incluye descripciones de función,
reglas de sintaxis, descripciones de parámetro, y ejemplos de uso. Las funciones de
conversión de instancia de carácter son examinadas, seguidas de las funciones de
manipulación de carácter. Después, las funciones numéricas son examinadas, y la
sección concluye con una discusión de las funciones de fecha.

La utilización de Funciones de Conversión de Instancia de Carácter


Los datos de carácter pueden ser guardados en tablas de numerosas fuentes, incluso la
aplicación
interfaces y programas de lote. No está seguro suponer que los datos de carácter hayan
sido destinados en una manera consecuente. Las funciones de conversión de instancia de
carácter sirven dos objetivos importantes. Ellos pueden ser usados primero, para
modificar el aspecto de un artículo de datos de carácter con objetivos de visualización y
en segundo lugar, ejecutarlos consecuente para operaciones de comparación. Es más
simple buscar una cuerda usando un formato de instancia consecuente en vez de probar
cada permutación de carácteres mayúsculos y minúsculos que podrían emparejar la
cuerda. Es importante recordar que estas funciones no cambian los datos almacenados
en tablas. Ellos todavía forman la parte de la pregunta de SQL sólo para leer.
Las funciones de carácter hablaron después esperan parámetros de cuerda. Éstos
pueden ser cualquier cuerda literal, valor de columna de carácter, o expresión que causa
un valor de carácter. Si es un numérico o un valor de fecha, es implícitamente
convertido en una cuerda.

La Función INFERIOR La función INFERIOR converte una serie de carácteres en


sus equivalentes minúsculos. Esto no añade carácteres suplementarios o acorta la
longitud de la cuerda inicial. Los carácteres mayúsculos son convertidos en sus
equivalentes minúsculos. Numérico, la puntuación, o carácteres especiales no es
ignorada.
La función INFERIOR puede tomar sólo un parámetro. Su sintaxis es más BAJA (s).
El
las preguntas siguientes ilustran el uso de esta función:
La consulta 1: seleccione más abajo (100) de la Consulta 2 dual:
seleccione más abajo (100+100) de la Consulta 3 dual: seleccione más
abajo ('La SUMA '|| '100+100' ||' = 200') de dual
178
Capítulo 4:
Funciones de fila sola
Las consultas 1 y 2 devuelven las cuerdas 100 y 200, respectivamente. El parámetro al
BAJE la función en la consulta 3 es una expresión de carácter y la cuerda devuelta por
la función es "La suma 100 + 100 = 200."
La consulta 4: seleccione más abajo (SYSDATE) de la Consulta 5 dual:
seleccione más abajo (SYSDATE+2) del dual
Suliste que la fecha de sistema actual sea: 17-DEC-2007. Vuelta de consultas 4 y 5
las cuerdas 17-dec-2007 y 19-dec-2007, respectivamente. Las expresiones de fecha son
evaluadas e implícitamente convertidas en datos de carácter antes de que la función
INFERIOR sea ejecutada.
Como la Figura 4-3 muestra, la función INFERIOR es usada en el DONDE la
cláusula para localizar los archivos con las minúsculas "u" y "r" adyacente el uno al
otro en el LAST_NAME para y devuelve la pelota.
Piense que la escritura de una pregunta alternativa devuelve los mismos resultados
sin usar la función INFERIOR. Podría ser hecho como sigue:
seleccione first_name, last_name de EMPLOYEES donde last_name como
'%ur %'

LA FIGURA 4-3 La función INFERIOR


Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

o last_name como '%UR %' o last_name como '%uR %' o last_name como '%Ur %'
179
Esta pregunta trabajos pero es incómoda, y el número de O cláusulas requeridas
aumentos exponencialmente como la duración de los aumentos de cadena de búsqueda.

La Función SUPERIOR La función SUPERIOR es la parte de enfrente lógica de la función


INFERIOR y converte una serie de carácteres en sus equivalentes mayúsculos. Esto no añade carácteres
suplementarios o acorta la longitud de la cuerda inicial. Todos los carácteres minúsculos son convertidos
en sus equivalentes mayúsculos. Numérico, la puntuación, o carácteres especiales no es ignorada.
La función SUPERIOR toma sólo un parámetro. Su sintaxis es SUPERIOR (s). Las preguntas
siguientes ilustran el uso de esta función:
La consulta 1: seleccione superior (1+2.14) de la Consulta 2 dual: seleccione
superior (SYSDATE) del dual
La consulta 1 devuelve la cuerda 3.14. El parámetro a la función SUPERIOR en la consulta 2
es SYSDATE, que devuelve la fecha de sistema actual. Ya que este valor es devuelto en la mayúscula en
ausencia, ninguna conversión de instancia es realizada.
La función SUPERIOR es usada en la Figura 4-4 para extraer las filas de la comando de COUNTRIES
donde los valores de COUNTRY_NAME contienen las cartas "U", "S", y "A" en aquel pedido. Las cartas
"U", "S", y "A" no tienen que ser adyacentes el uno al otro.
La escritura de una pregunta alternativa para devolver los mismos resultados sin usar las funciones
SUPERIORES o INFERIORES podría ser hecha usando una pregunta con ocho condiciones:
SELECCIONE * DE COUNTRIES
DONDE country_name como '%u%s%a %'
o
country_name
como
'% de %u%s%A'
o country_name como '%u%S%a %'
o
country_name
como
'% de %u%S%A'
o country_name como '%U%s%a %'
o
country_name
como
'% de %U%s%A'
o country_name como '%U%S%a %'
o
country_name
como
'% DE %U%S%A'
Esta pregunta trabajos pero es incómoda. El número de O las cláusulas se requieren
aumentos exponencialmente como la duración de los aumentos de cadena de búsqueda.

La Función de INITCAP La función de INITCAP converte una serie de carácteres en el instancia


capitalizado. A menudo es usado con objetivos de presentación de datos. Las primeras cartas de cada
palabra en la cuerda son convertidas a sus equivalentes mayúsculos, mientras las cartas restantes de cada
palabra son convertidas a sus equivalentes minúsculos. Una palabra es por lo general una serie de
carácteres adyacentes separados por un espacio o subraye, pero otros carácteres tal como
180
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-4 La función SUPERIOR


el símbolo de porcentaje, el signo de admiración, o el signo de dólar son separadores de
palabra válidos. La puntuación o los carácteres especiales son considerados como
separadores de palabra válidos.
La función de INITCAP puede tomar sólo un parámetro. Su sintaxis es INITCAP
(s). Las preguntas siguientes ilustran el uso de esta función:
La consulta 1: seleccione initcap (21/7) de la Consulta 2 dual: seleccione
initcap (SYSDATE) de la Consulta 3 dual: seleccione initcap ('init letras
mayúsculas o init_cap o init%cap') del dual

La consulta 1 devuelve el cociente 3 como una cuerda. La consulta 2 devuelve la


cadena de caracteres
valor de la fecha de sistema actual, con la parte de mes cambiada de mayúscula a
instancia inicial. Suponiendo que la fecha de sistema actual sea 17-DEC-2007, la
consulta 2 por lo tanto devuelve 17-Dec-2007. La consulta 3 devuelve Letras
mayúsculas Init O Init_Cap O Init%Cap.
Las preguntas en la Figura 4-5 seleccionan el LAST_NAME y valores de JOB_ID de
la comando de EMPLOYEES para aquellos EMPLOYEES con valores de LAST_NAME
que comienzan con la carta "H". La primera pregunta aplica la función de INITCAP a la
cláusula SENTENCIA entera. La segunda pregunta muestra como la función de
INITCAP es aplicada por separado a cada componente de carácter. Ambas preguntas
ceden resultados idénticos.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
181

LA FIGURA 4-5 La función de INITCAP


EJERZA 4-1 Utilización de las Funciones de Conversión de Instancia
Recupere una lista de todo FIRST_NAME y valores de LAST_NAME del
La comando de EMPLOYEES donde FIRST_NAME contiene la cadena de
caracteres "li".

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La


cláusula SENTENCIA es
SELECCIONE FIRST_NAME, LAST_NAME
3. El DE la cláusula es
DE EMPLOYEES
182
Capítulo 4:
Funciones de fila sola

4. El DONDE la cláusula debe comparar los valores de columna FIRST_NAME con a


modelo de carácteres que contienen todas las combinaciones de instancia posibles de la cuerda "li".
Por lo tanto, si el FIRST_NAME contiene las cadenas de caracteres "LI", "Li", "lI", o "li", aquella fila
debe ser recuperada.
5. El operador PARECIDO es usado para el carácter correspondiente, y cuatro combinaciones
puede ser extraído con cuatro DONDE cláusulas separadas por el O palabra clave. Sin embargo, las
funciones de conversión de instancia pueden simplificar la condición. Si la función INFERIOR es
usada en la columna FIRST_NAME, la comparación puede ser hecha con uno DONDE condición de
cláusula. El SUPERIOR o INITCAP func-tions también podrían ser usados.
6. El DONDE la cláusula es
DONDE MÁS ABAJO (FIRST_NAME) COMO '%li %' 7. La ejecución de esta select devuelve los
nombres de los EMPLOYEES que contienen los carácteres
"li" como mostrado en esta ilustración:
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

Utilización de Funciones de Manipulaciones de Carácter


Algunos aspectos más potentes para surgir del Oracle son el carácter
183
funciones de manipulación. Su utilidad en la manipulación de datos es casi sin el par, y
muchos profesionales técnicos sazonados azotan juntos una escritura rápida para
masajear artículos de datos con funciones de manipulación de carácter SQL. Anidar estas
funciones es común. El operador de encadenamiento (||) es generalmente usado en vez
de la función de CONCAT. La LONGITUD, INSTR, SUBSTR, y REEMPLAZAN
funciones a menudo se encuentran en la compañía de cada uno como hacen RPAD,
LPAD, y NETO.

La Función de CONCAT La función de CONCAT se afilia a dos literales de


carácter, columnas, o expresiones para ceder una expresión de carácter más grande.
Numérico y literales de fecha son implícitamente dados el papel de carácteres cuando ellos
ocurren como parámetros a la función de CONCAT. Numérico o expresiones de fecha
son evaluados antes de ser convertido a cuerdas listas para ser concadenadas.
La función de CONCAT toma dos parámetros. Su sintaxis es CONCAT (s1, s2),
donde s1 y s2 representan literales de cuerda, valores de columna de carácter, o
expresiones que causan valores de carácter. Las preguntas siguientes ilustran el uso de esta
función:
La consulta 1: seleccione concat (1+2.14,' se acerca la pi') de la
Consulta 2 dual: seleccione concat ('Hoy es:', SYSDATE) de dual
La consulta 1 vuelve la cuerda "3.14 se acerca la pi." La expresión numérica es
evaluado para devolver el número 3.14. Este número es automáticamente cambiado en
la cadena de caracteres "3.14", que es concadenado al carácter literal en el segundo
parámetro. El segundo parámetro a la función de CONCAT en la consulta 2 es
SYSDATE, que devuelve la fecha de sistema actual. Este valor es implícitamente
convertido a una cuerda a la cual el literal en el primer parámetro es concadenado. Si la
fecha de sistema es 17-DEC-2007, la consulta 2 vuelve la cuerda "Hoy es 17-DEC-2007."
Piense que la utilización de la función de CONCAT se afilia a tres términos para
devolver una cadena de caracteres. Ya que CONCAT toma sólo dos parámetros, sólo es
posible afiliarse a dos términos con un instancia de esta función. La solución es anidar
la función de CONCAT dentro de otra función de CONCAT, como mostrado aquí:
seleccione concat ('Outer1', concat ('Inner1',' Inner2')) del dual;
La primera función de CONCAT tiene dos parámetros: el primer es el literal
"Outer1",
mientras el segundo es una función de CONCAT anidada. La segunda función de
CONCAT toma dos parámetros: el primer es el literal "Inner1", mientras el segundo es el
literal "Inner2". Esta pregunta causa la cuerda siguiente: Outer1 Inner1 Inner2. Las
funciones anidadas son descritas detalladamente en el Capítulo 5.
184
Capítulo 4:
Funciones de fila sola

La función de CONCAT fue usada en la Figura 4-6 para extraer las filas del
Comando de EMPLOYEES donde el DEPARTMENT_ID=100. El objetivo era producir
una cuerda sola literal salida de la función CONCAT del formato FIRST_NAME
LAST_NAME gana el SUELDO.
Esta tarea simple fue transformada en un cuatro nivel complejo profundamente anidó
el SET de llamadas a la función. Como el segundo ejemplo en la Figura 4-6 demuestra,
el operador de encadenamiento realiza la tarea equivalente en una manera más simple.
La Función de LONGITUD La función de LONGITUD devuelve el número de
carácteres que constituyen una cadena de caracteres. Esto incluye literales de carácter,
columnas, o expresiones. Numérico y literales de fecha son automáticamente dados el
papel de carácteres cuando ellos ocurren como parámetros a

LA FIGURA 4-6 La función de CONCAT


Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
185

la función de LONGITUD. Numérico o expresiones de fecha son evaluados antes de ser


convertido a cuerdas listas para ser medidas. Los espacios en blanco, las paletas, y los
carácteres especiales son todos contados por la función de LONGITUD.
La función de LONGITUD toma sólo un parámetro. Su sintaxis es la LONGITUD
(ES), donde s representa cualquier cuerda literal, valor de columna de carácter, o
expresión que causa un valor de carácter. Las preguntas siguientes ilustran el uso de esta
función:
La consulta 1: la longitud sentencia (1+2.14 ||' se acerca la pi') de
la Consulta 2 dual: longitud sentencia (SYSDATE) de dual
La consulta 1 devuelve el número 20. La expresión numérica es evaluada para volver
el número 3.14. Este número es dado el papel de la cadena de caracteres "3.14", que es
concadenado entonces al carácter literal "se acerca la pi." La cadena de caracteres
consiguiente contiene 20 carácteres. La consulta 2 primero evalúa la función de
SYSDATE, que devuelve la fecha de sistema actual. Este valor es automáticamente
convertido a una cadena de caracteres cuya longitud es determinada entonces. Suponer
que la fecha de sistema volvió es 17-DEC-07, las vueltas de consulta 2 valoran 9.
La función de LONGITUD es usada en la Figura 4-7 para extraer el valor de
COUNTRY_NAME con la longitud mayor que diez carácteres de la comando de
COUNTRIES.

LA FIGURA 4-7 La función de LONGITUD


186
Capítulo 4:
Funciones de fila sola

El LPAD y las Funciones de RPAD El LPAD y funciones de RPAD, también


conocidas como dejado almohadilla y funciones de almohadilla correctas, devuelven una
cuerda rellenada de un número especificado de carácteres a la izquierda o el derecho de
la cuerda de la fuente respectivamente. Las cadenas de caracteres usadas para el
acolchado incluyen literales de carácter, valores de columna, o expresiones. Numérico y
literales de fecha son implícitamente dados el papel de carácteres cuando ellos ocurren
como parámetros a funciones de RPAD o el LPAD. Numérico o expresiones de fecha
son evaluados antes de ser convertido a cuerdas destinadas al acolchado. Los espacios en
blanco, las paletas, y los carácteres especiales pueden ser usados como el acolchado de
carácteres.
El LPAD y las funciones de RPAD toman tres parámetros. Su sintaxis es LPAD (s,
n, p) y RPAD (s, n, p), donde s representa la cuerda de la fuente, el n representa la
longitud final de la cuerda devuelta, y p especifica la cadena de caracteres para ser
usada como el acolchado. Si LPAD es usado, los carácteres de acolchado p son añadidos
a la izquierda de s de cuerda de la fuente hasta que esto alcance la longitud n. Si RPAD
es usado, los carácteres de acolchado p son añadidos a la derecha de s de cuerda de la
fuente hasta que esto alcance la longitud n. Note que si el parámetro n es más pequeño
que o igual a la longitud de la fuente ensartan s, entonces ningún acolchado ocurre y
sólo los primeros carácteres n de s son devueltos.
Las preguntas siguientes ilustran el uso de esta función:
Pregunta
1:
escogido
lpad (1000+200.55,14,' * ') de dual
Pregunta
2:
escogido
rpad (1000+200.55,14,' * ') de dual
Pregunta
3:
escogido
lpad (SYSDATE, 14, '$#') de dual
Pregunta
4:
escogido
rpad (SYSDATE, 4, '$#') de dual
La consulta 1 devuelve una 14 cadena de caracteres: ******* 1200.55. La expresión
numérica
es evaluado para devolver el número 1200.55. Este número es dado el papel de la
cuerda "1200.55" de la longitud siete (incluso la coma decimal). Para conseguir la
longitud final de 14 carácteres, 7 asteriscos son dejados rellenados a la cuerda. La
consulta 2 devuelve la cuerda "1200.55 *******."
La función de LPAD en la consulta 3 tiene una longitud de cuerda objetivo de 14
carácteres. Suliste que SYSDATE devuelva un valor de fecha de 9 carácteres: 17-DEC-
07. Esta fecha es convertida en una cuerda, y la cuerda de acolchado es
sistemáticamente aplicada para alcanzar la longitud objetivo. Esto vuelve: $#$#$17-
DEC-07. Note que aunque la cuerda de acolchado consista en dos carácteres ($#), la
cuerda no fue aplicada regularmente ya que hay símbolos de tres dólares y dos símbolos
de picadillo. Esto es porque LPAD y RPAD rellenarán la cuerda de la fuente tanto como
posible con la cuerda de acolchado hasta que la longitud objetivo sea alcanzada. La
función de RPAD en la consulta 4 tiene una longitud objetivo de 4 carácteres, pero la
función SYSDATE sola devuelve un valor de 9 carácteres. Por lo tanto ningún
acolchado ocurre y, suponiendo que la fecha de sistema actual sea 17-DEC-07, los
cuatro primeros carácteres de la fecha convertida son devueltos: 17-D.
El LPAD y las funciones de RPAD son usados en la Figura 4-8 para formatear los
resultados en una manera más comandoada y más presentable. Los resultados devueltos
por esta pregunta son idénticos
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
187
LA FIGURA 4-8 El LPAD y funciones de RPAD

a aquellos en la Figura 4-6 pero han sido ejecutados más usuario utilización amistosa del
LPAD y funciones de RPAD.

La Función NETA La función NETA borra carácteres desde el principio o el final de


literales de carácter, columnas o expresiones para ceder el que artículo de carácter
potencialmente más corto. Numérico y literales de fecha son automáticamente dados el
papel de carácteres cuando ellos ocurren como parámetros a la función NETA. Numérico
o expresiones de fecha son evaluados primero antes de ser convertido a cuerdas listas
para ser recortadas.
La función NETA toma un parámetro arreglado de un opcional y un componente
obligatorio. Su sintaxis es NETA ([trailing|leading|both] trimstring de s). La cuerda para
ser recortada (s) es obligatoria. Los puntos siguientes ponen en una lista las reglas que
gobiernan el uso de esta función:

■ NETO (s) borra espacios de ambos lados de la cuerda de ingreso. ■ NETO


(rastreo trimstring de s) borra todos los acontecimientos de trimstring del
el final de la cuerda s si esto está presente.
188
Capítulo 4:
Funciones de fila sola

■ NETO (conduciendo trimstring de s) borra todos los acontecimientos de trimstring del


el principio de la cuerda s si esto está presente. ■ NETO (ambos trimstring de s) borra todos los
acontecimientos de trimstring del
el principio y el final de la cuerda s si esto está presente.

Las preguntas siguientes ilustran el uso de esta función:


La consulta 1: seleccione neto (el rastreo 'e' de 1+2.14 ||' es la
tarta') de la Consulta 2 dual: seleccione neto (ambos '*' de '*******
******* escondido') de la Consulta 3 dual: seleccione neto (1 de
sysdate) del dual
La consulta 1 evalúa la expresión numérica para devolver el número 3.14. Esto
el número es dado el papel entonces de la cadena de caracteres "3.14", que es
concadenado entonces al carácter literal para construir la cuerda "3.14 es la tarta." La
función NETA entonces borra cualquier acontecimiento del carácter "e" a partir del final
de la cuerda para volver "3.14 se acerca la pi." La consulta 2 pela lejos todos los
acontecimientos del asterisco carácter neto desde el principio y el final del carácter
literal y vueltas la cuerda "Escondida." Note que aunque un carácter neto sea
especificado, acontecimientos múltiples serán recortados si ellos consecutivamente están
presentes. La consulta 3 tiene dos aspectos interesantes. El carácter neto no es encerrado
en citas y es implícitamente convertido a un carácter. La función de SYSDATE
devuelve la fecha de sistema actual, que es supuesta ser 17-DEC-07. Ya que ninguna
palabra clave es especificada para rastreo, conducción, o ambas direcciones netas, la falta
de ambos se aplica. Por lo tanto todos los acontecimientos del carácter 1 al principio o
final de la cuerda de fecha son recortados causando 7-DEC-07 ser devueltos.
La función NETA usada en la Figura 4-9 no parece hacer algo excepto el examen
más cercano revela un uso práctico común para ella. Como hablado antes, los datos son
con frecuencia entrados en tablas de base de datos de aplicación por una variedad de
fuentes. Puede resultar que los espacios son por casualidad entrados y guardados en los
espacios de carácter involuntariamente. La cuerda neta artificial en el DONDE la
cláusula simula el espacio de LAST_NAME rellenado de espacios. Esto podría dificultar
la busca de EMPLOYEES con valores LAST_NAME de Smith. El adorno del espacio
rellenó el espacio de LAST_NAME habilita la busca exacta y elimina el riesgo de
espacios involuntarios que pueden estar presentes en datos de carácter. Recuerde que
cuando ningunos parámetros además de la cuerda s son especificados a la función
NETA entonces su comportamiento por defecto es recortar (ambos '' de s).
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
189

LA FIGURA 4-9 La función NETA


La Función de INSTR (en la Cuerda) La función de INSTR localiza la
posición de una cadena de búsqueda dentro de una cuerda dada. Esto devuelve la
posición numérica en la cual el acontecimiento enésimo de la cadena de búsqueda
comienza, con relación a una posición de principio especificada. Si la cadena de
búsqueda no está presente el cero de vueltas de función de INSTR.
Numérico y literales de fecha son implícitamente dados el papel de carácteres cuando
ellos ocurren como parámetros a la función de INSTR. Numérico o expresiones de fecha
son evaluados primero antes de ser convertido a cuerdas listas para ser buscadas.
La función de INSTR toma cuatro parámetros arreglados de dos opcional y dos
argumentos obligatorios. La sintaxis es INSTR (cuerda de la fuente, cadena de búsqueda,
[posición de principio de búsqueda], [acontecimiento enésimo]). El valor por defecto para la
posición de principio de búsqueda es 1 o el principio de la cuerda de la fuente. El valor por
defecto para el acontecimiento enésimo es 1 o el primer acontecimiento. Las preguntas
siguientes ilustran la función de INSTR con expresiones de fecha y numérico:
La consulta 1: seleccione instr (3+0.14,'. ') de la Consulta 2 dual:
seleccione instr (sysdate, 'DICIEMBRE') del dual
190
Capítulo 4:
Funciones de fila sola

La consulta 1 evalúa la expresión numérica para devolver el número 3.14. Esto


el número es implícitamente dado el papel de la cuerda 3.14. El carácter de período es
buscado y el primer acontecimiento de él ocurre en la posición 2. La consulta 2 evalúa
la función de SYSDATE y converte la fecha devuelta en una cuerda. Suliste que la
fecha de sistema actual sea 17-DEC-07. El primer acontecimiento del DICIEMBRE de
carácteres ocurre en la posición 4. Considere las preguntas siguientes con datos de
carácter que ilustran los valores por defecto y los terceros y cuartos parámetros de la
función de INSTR:
La consulta 3: seleccione instr ('1#3#5#7#9#', '#') de la Consulta 4
dual: seleccione instr ('1#3#5#7#9#', '#', 5) de la Consulta 5 dual:
seleccione instr ('1#3#5#7#9#', '#', 3,4) del dual
La consulta 3 busca el primer acontecimiento del símbolo de picadillo en la cuerda de
la fuente
el principio en posición 1 y posición de vueltas 2. La consulta 4 tiene el número 5
como su tercer parámetro que indica que la búsqueda del símbolo de picadillo debe
comenzar en la posición 5 en la cuerda de la fuente. El acontecimiento subsecuente del
símbolo de picadillo está en la posición 6, que es devuelto por la pregunta. La consulta 5
tiene los números 3 y 4 como sus terceros y cuartos parámetros. Esto indica que la
búsqueda del símbolo de picadillo debe comenzar en la posición 3 en la cuerda de la
fuente. La consulta 5 entonces devuelve el número 10, que es la posición del cuarto
acontecimiento del símbolo de picadillo cuando la búsqueda comienza en la posición 3.
La función de INSTR usó en archivos de vueltas de Figura 4-10 de la comando de
DEPARTMENTS donde los valores de DEPARTMENT_NAME tienen el carácter n
como su tercer carácter.

La función de INSTR a menudo es usada en la combinación con la función de


SUBSTR en programas de herramienta diseñados para extraer datos codificados
de corrientes de datos electrónicas.

La Función de SUBSTR (Subcuerda) La función de SUBSTR extrae y


devuelve un segmento de una cuerda de la fuente dada. Esto extrae una subserie de una
longitud especificada de la cuerda de la fuente que comienza en una posición dada. Si la
posición de principio es más grande que la longitud de la cuerda de la fuente, nula es
devuelta. Si el número de carácteres para extraer de una posición de principio dada es
mayor que la longitud de la cuerda de la fuente, el segmento volvió es la subcuerda de
la posición de principio al final de la cuerda.
Numérico y literales de fecha son automáticamente dados el papel de carácteres
cuando ellos ocurren como parámetros a la función de SUBSTR. Numérico y
expresiones de fecha son evaluados antes de ser convertido a cuerdas listas para ser
buscadas.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
191

LA FIGURA 4-10 La función de INSTR


La función de SUBSTR toma tres parámetros, con los primeros dos siendo
obligatorios. Su sintaxis es SUBSTR (cuerda de la fuente, comience la posición, [el número
de carácteres para extraer]). El número por defecto de carácteres para extraer es igual al
número de carácteres de la posición de principio al final de la cuerda de la fuente. Las
preguntas siguientes ilustran la función de SUBSTR con expresiones de fecha y
numérico:
La consulta 1: seleccione substr (10000-3,3,2) de la Consulta 2 dual:
seleccione substr (sysdate, 4,3) del dual
La consulta 1 evalúa la expresión numérica para devolver el número 9997. Esto
el número es automáticamente cambiado en la cadena de caracteres 9997. La búsqueda
de la subcuerda comienza en la posición 3 y los dos carácteres de aquella posición
adelante son extraídos, cediendo la subcuerda 97. La consulta 2 evalúa la función de
SYSDATE y converte la fecha volvió en una cadena de caracteres. Suliste que la fecha
de sistema actual sea 17-DEC-07. La búsqueda de la subcuerda comienza en la posición
4 y los tres carácteres de aquella posición adelante son extraídos, cediendo el diciembre
de subcuerda.
192
Capítulo 4:
Funciones de fila sola

Considere las preguntas siguientes con datos de carácter que ilustran el comportamiento
por defecto del parámetro opcional de la función de SUBSTR:
La consulta 3: seleccione substr ('1#3#5#7#9#', 5) de la Consulta 4
dual: seleccione substr ('1#3#5#7#9#', 5,6) de la Consulta 5 dual:
seleccione substr ('1#3#5#7#9#',-3,2) del dual
La consulta 3 extrae la subcuerda que comienza en la posición 5. Ya que el tercer
parámetro es
no especificado, la longitud de extracción por defecto es igual al número de carácteres de
e incluso la posición de principio al final de la cuerda de la fuente, que es 6. Por lo tanto la
consulta 3 es equivalente a la consulta 4 y la subcuerda devuelta por ambas preguntas es
5#7#9#. La pregunta cinco tiene el número-3 como su posición de principio. El parámetro
de posición de principio negativo instruye el Oracle de comenzar la busca de 3 carácteres
a partir del final de la cuerda. Por lo tanto comience la posición es tres carácteres a partir
del final de la cuerda, que es la posición 8. El tercer parámetro es 2, que causa la
subcuerda #9 ser devuelto.
La función de SUBSTR usó en archivos de vueltas de Figura 4-11 de la comando de
EMPLOYEES, donde los dos primeros carácteres en los valores de JOB_ID son d. C.
Esta función ha sido usada adelante en la lista SENTENCIA para extraer el carácter
inicial del espacio FIRST_NAME de cada empleado en el SET de resultado.

LA FIGURA 4-11 La función de SUBSTR


Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

GUIÓN & SOLUCIÓN


193
Le gustaría buscar una cadena de caracteres almacenada en la base de datos. El instancia en el cual es almacenado
es desconocido y allí conduce potencialmente y arrastra espacios que rodean la cuerda. ¿Puede tal búsqueda ser
realizada?
Sí. La solución más simple es RECORTAR primero la conducción y rastreo de espacios de la columna y luego
convertir los datos de columna usando una función de conversión de instancia como INFERIOR, SUPERIOR, o
INITCAP para simplificar el número de comparaciones requeridas en el DONDE condición de cláusula.
Le han pedido extraer los tres últimos carácteres de la columna LAST_NAME en la comando de EMPLOYEES.
¿Puede tal pregunta ser realizada sin usar la función de LONGITUD?
Sí. El SUBSTR (cuerda de la fuente, comience la posición, el número de carácteres) la función toma tres parámetros. Si
la posición de principio es puesta a-3, y el número del parámetro de carácteres es establecido a tres o es omitido, los
tres últimos carácteres de los datos de columna LAST_NAME es recuperado. La pregunta siguiente puede ser usada:
SELECCIONE SUBSTR (LAST_NAME,-3) DE EMPLOYEES;
Le gustaría extraer una 10 cadena de caracteres consecuente basada en la columna de SUELDO en la comando de
EMPLOYEES. Si el valor de SUELDO es menos de 10 carácteres mucho tiempo, los ceros deben ser añadidos a la
izquierda del valor para ceder una 10 cadena de caracteres. ¿Es posible esto?
Sí. La función de LPAD puede ser usada como sigue: SELECCIONE LPAD (SUELDO, 10,0)
DE EMPLOYEES;

La Función REEMPLAZAR La función REEMPLAZAR reemplaza todos los


acontecimientos de un artículo de búsqueda en una cuerda de la fuente con un término de
reemplazo y devuelve la cuerda de la fuente modificada. Si la longitud del término de
reemplazo es diferente de aquel del artículo de búsqueda, entonces las longitudes del
devuelto y cuerdas de la fuente serán diferentes. Si la cadena de búsqueda no es
encontrada, la cuerda de la fuente es devuelta sin alterar. Numérico y literales de fecha y
expresiones son evaluados antes de ser implícitamente dado el papel de carácteres cuando
ellos ocurren como parámetros a la función REEMPLAZAR.
La función REEMPLAZAR toma tres parámetros, con los primeros dos siendo
obligatorios. Su sintaxis es REEMPLAZAN (cuerda de la fuente, busque el artículo,
[término de reemplazo]). Si el parámetro de término de reemplazo es omitido, cada
acontecimiento del artículo de búsqueda es borrado de la cuerda de la fuente. En otras
palabras, el artículo de búsqueda es reemplazado por una cuerda vacía. Las preguntas
siguientes ilustran la función REEMPLAZAR con expresiones de fecha y numérico:
La consulta 1: escogido reemplazan (10000-3, '9', '85') de la
Consulta 2 dual: escogido reemplazan (sysdate, 'DICIEMBRE',
'NOVIEMBRE') del dual
194
Capítulo 4:
Funciones de fila sola
La consulta 1 evalúa la expresión numérica para devolver el número 9997, que es
molde como la cadena de caracteres "9997". La cadena de búsqueda es el carácter "9",
que ocurre tres veces en la fuente. Cada carácter de búsqueda es substituido con la
cuerda de reemplazo "85", cediendo la cuerda "8585857". La consulta 2 evalúa la función
de SYSDATE y converte la fecha volvió en una cadena de caracteres. Suliste que la
fecha de sistema actual sea 17-DEC-07. La cadena de búsqueda "DICIEMBRE" ocurre
una vez que en la fuente ensartan y es reemplazado con los carácteres "NOVIEMBRE",
cediendo el resultado 17-NOV-07. Note que esto es una cadena de caracteres y no un
valor de fecha. Considere las preguntas siguientes con datos de carácter, que ilustran el
comportamiento por defecto del parámetro opcional de la función REEMPLAZAR:
La consulta 3: escogido reemplazan ('1#3#5#7#9#', '#', '->') de la
Consulta 4 dual: escogido reemplazan ('1#3#5#7#9#', '#') del dual
El símbolo de picadillo en la consulta 3 es especificado como el carácter de
búsqueda y el
la cuerda de reemplazo es especificada como->. El símbolo de picadillo ocurre cinco
veces en la fuente, y la cuerda consiguiente es: 1-> 3-> 5-> 7-> 9->. La consulta 4 no
especifica una cuerda de reemplazo. El comportamiento por defecto es reemplazar por
lo tanto la cadena de búsqueda con una cuerda vacía que, en efecto, borra el carácter de
búsqueda completamente de la fuente, causando la cuerda "13579" devuelto.
La función REEMPLAZAR usó en archivos de vueltas de Figura 4-12 de la comando de
EMPLOYEES donde los valores de JOB_ID son SA_MAN, pero esto modifica la
columna de SUELDO reemplazando cada 0 con 000 y aliasing la nueva expresión como el
Sueldo de Sueño.

EJERZA 4-2 Utilización de las Funciones de Manipulación de Instancia


El sobre imprimir restringe el espacio de destinatario a 16 carácteres. Idealmente, el
destinatario
el espacio contiene FIRST_NAME de los EMPLOYEES y valores de LAST_NAME
separados por un espacio solo. Cuando la longitud combinada de FIRST_NAME de un
empleado y LAST_NAME excede 15 carácteres, el espacio de destinatario debería
contener su nombre oficial. El nombre oficial de un empleado es arreglado de la primera
carta de su NOMBRE de FIRST_ y los 14 primeros carácteres de su LAST_NAME.
Se requiere que usted recupere una lista de FIRST_NAME y valores de
LAST_NAME y nombres oficiales para EMPLOYEES donde la longitud combinada de
FIRST_NAME y LAST_NAME excede 15 carácteres.

1. Comience SQL*Plus y conecte al esquema de HORA.


Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
195

LA FIGURA 4-12 La función REEMPLAZAR


2. El nombre oficial es construido concadenando el primer carácter en el
FIRST_NAME paran y devuelven la pelota con un espacio y los 14 primeros
carácteres del espacio de NOMBRE de LAST_ para devolver una cuerda que es
16 carácteres mucho tiempo. La función de SUBSTR es usada para extraer
partes de apellido y la inicial.
3. La cláusula SENTENCIA es
SELECCIONE FIRST_NAME, LAST_NAME, SUBSTR (FIRST_NAME, 1,1)
||' '|| SUBSTR (LAST_NAME, 1,14) FORMAL_NAME
4. El DE la cláusula es
DE EMPLOYEES 5. El DONDE la cláusula debe limitar los archivos volvió a
sólo aquellos donde
las longitudes combinadas de su FIRST_NAME y LAST_NAME exceden 15
carácteres.
6. El DONDE la cláusula es
DONDE LONGITUD (FIRST_NAME) + LONGITUD (LAST_NAME)> 15
196
Capítulo 4:
Funciones de fila sola

7. La ejecución de esta select devuelve el SET siguiente de resultados:


Utilización de Funciones Numéricas
Hay una variedad de funciones numéricas incorporadas proporcionadas por el Oracle con
el cual esto rivaliza el
cajas de herramientas matemáticas de paquetes de software de hoja de cálculo populares.
Differentiator significativo entre funciones numéricas y otras es que ellos aceptan y
devuelven datos sólo numéricos. El oracle proporciona funciones numéricas a
solucionar trigonométrico, exponentiation, y problemas logarítmicos, entre otros. Este
guía se concentra en tres funciones de fila sola numéricas: POR AHÍ, TRUNC, y MOD,
hablado después.

La Función REDONDA Numérica La función REDONDA realiza una


operación de doblamiento en un valor numérico basado en la precisión decimal
especificada. El valor volvió es o acorralado o abajo basado en el valor numérico del
dígito significativo en la posición de precisión decimal especificada. Si la precisión
decimal especificada es n, el dígito significativo al doblamiento
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
197

es encontrado (n + 1) sitios a la derecha de la coma decimal. Si es negativo, el dígito


significativo al doblamiento es encontrado sitios de n a la izquierda de la coma decimal.
Si el valor numérico del dígito significativo es mayor que o igual a 5, un "rodeo" ocurre,
más "redondear" ocurre.
La función REDONDA toma dos parámetros. Su sintaxis es REDONDA (número de la
fuente, precisión decimal). El parámetro de número de la fuente representa cualquier literal
numérico, columna, o expresión. El parámetro de precisión decimal especifica el nivel del
doblamiento y es opcional. Si el parámetro de precisión decimal es ausente, el nivel por
defecto del doblamiento es el cero, el que significa que doblan sobre la fuente al número
entero más cercano.
Considere los grados decimales puestos en una lista en la Tabla 4-1 para el número
1234.5678. Los valores de precisión decimales negativos están localizados a la
izquierda de la coma decimal mientras los valores positivos son encontrados a la
derecha.
Si el parámetro de precisión decimal es un, entonces doblan sobre el número de la
fuente al décimo más cercano. Si es dos, entonces doblan sobre la fuente al centésimo
más cercano, etcétera. Las preguntas siguientes ilustran el uso de esta función:
Pregunta
1:
escogido
la vuelta (1601.916718,1) de dual
Pregunta
2:
escogido
la vuelta (1601.916718,2) de dual
Pregunta
3:
escogido
por ahí (1601.916718,-3) de dual
Pregunta
4:
escogido
la vuelta (1601.916718) de dual
La consulta 1 tiene un parámetro de precisión decimal (n) de 1, que implica que la
fuente
doblan sobre el número al décimo más cercano. Desde los centésimo (n + 1) el dígito
es 1 (menos de 5), ningún doblamiento ocurre y el número volvió es 1601.9. El
parámetro de precisión decimal en la consulta 2 es 2, entonces doblan sobre el número
de la fuente al centésimo más cercano. Ya que la unidad de milésimos es 6 (mayor que
5), el rodeo ocurre y el número volvió es 1601.92. El parámetro de precisión decimal de la
consulta 3 es-3. Ya que es negativo, el dígito significativo para el doblamiento es
encontrado 3 sitios a la izquierda de

TABLA 4-1

Descripciones de Precisión decimales

Precisión decimal
-4 - 3 - 2 - 1123

Doblamiento significativo sobre Dígito


1234567

Posición decimal
Miles (n ×1000) Cientos (n ×100) Decenas (n ×10) Unidades (n ×1) Décimo (n ÷10) Centésimo (n ÷100)
Milésimos (n ÷1000)
198
Capítulo 4:
Funciones de fila sola
la coma decimal, en el dígito de cientos, que es 6. Ya que la unidad de cientos es 6, el
rodeo ocurre y el número volvió es 2000. La consulta 4 ha prescindido del parámetro de
precisión decimal. Esto implica que el doblamiento es hecho al número entero más
cercano. Ya que la décima unidad es 9, el número es acorralado y 1602 es devuelto.
El ejemplo mostrado en la Figura 4-13 selecciona a EMPLOYEES que trabajan como
encargados de ventas y computa un sobresueldo de lealtad basado en el número de días
empleó doblado al número entero más cercano. La función REDONDA está
acostumbrada alrededor de la parte fraccionaria de la diferencia entre la fecha de
sistema actual y el HIRE_DATE para cada encargado de ventas.

La Función de TRUNC numérica (Truncada) La función de TRUNC


realiza una operación de truncamiento en un valor numérico basado en la precisión
decimal especificada. Un truncamiento numérico es diferente de redondear porque el
valor que resulta deja caer los números en la precisión decimal especificada y no intenta
acorralar o abajo si la precisión decimal es positiva. Sin embargo, si (n) especificado de
la precisión decimal es negativo, el valor de ingreso está zeroed abajo de la posición
decimal enésima.

LA FIGURA 4-13 La función REDONDA numérica


Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

La función de TRUNC toma dos parámetros. Su sintaxis es TRUNC (fuente


199
número, precisión decimal). El número de la fuente representa cualquier literal numérico, columna, o
expresión. La precisión decimal especifica el nivel del truncamiento y es opcional. Si el parámetro de
precisión decimal es ausente, el nivel por defecto del doblamiento es el cero, el que significa que el número
de la fuente es truncado al número entero más cercano.
Si el parámetro de precisión decimal es 1, entonces el número de la fuente es truncado en su unidad de
décimo. Si es 2, es truncado en su unidad de centésimo, etcétera. Las preguntas siguientes ilustran el uso
de esta función:
Pregunta
1:
escogido
trunc (1601.916718,1) de dual
Pregunta
2:
escogido
trunc (1601.916718,2) de dual
Pregunta
3:
escogido
trunc (1601.916718,-3) de dual
Pregunta
4:
escogido
trunc (1601.916718) de dual
La consulta 1 tiene un parámetro de precisión decimal de 1, que implica que la fuente
el número es truncado en su unidad de décimo y el número volvió es 1601.9. El parámetro de precisión
decimal (n) en la consulta 2 es 2, entonces el número de la fuente es truncado en su unidad de centésimo y
el número volvió es 1601.91. Note que este resultado sería diferente si una operación de doblamiento
fuera realizada ya que el dígito en la posición (n + 1) es 6 (mayor que 5). La consulta 3 especifica un
número negativo (3) como su precisión decimal. Tres sitios a la izquierda de la coma decimal implican que
el truncamiento pasa en el dígito de cientos como mostrado antes en la Tabla 4-1. Por lo tanto, el número
de la fuente está zeroed abajo de su dígito (6) de cientos y el número volvió es 1000. Finalmente, la
consulta 4 no tiene un parámetro de precisión decimal que implica que el truncamiento es hecho en el nivel
de número entero de la precisión. El número volvió es 1601.
El departamento de finanzas ha tenido derecho a un premio departamental superior por el cual la
compañía decidió recompensar a su personal de finanzas ajustando sus sueldos. Ya que el ajuste de sueldo
fraccionario causa números con tres sitios decimales, la función de TRUNC es usada para truncar el
aumento de sueldo propuesto a un número entero, como mostrado en la Figura 4-14.

La Función de MOD (Módulo) La función de MOD devuelve el resto numérico de una operación
de división. Dos números, el dividendo (número dividido) y el divisor (número para dividirse en) son
proporcionados, y una operación de división es realizada. Si el divisor es un factor del dividendo, MOD
devuelve el cero ya que no hay ningún resto. Si el divisor es el cero, ninguna división por el error cero es
devuelta y la función de MOD devuelve un cero en cambio. Si el divisor es más grande que el dividendo,
entonces la función de MOD devuelve el dividendo como su resultado. Esto es porque esto divide
tiempos cero en el divisor, dejando el resto igual al dividendo.
200
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-14 La función de TRUNC numérica


La función de MOD toma dos parámetros. Su sintaxis es MOD (dividendo, divisor).
El dividendo y los parámetros de divisor representan un literal numérico, columna, o
expresión, que puede ser negativa o positiva. Las preguntas siguientes ilustran el uso de
esta función:
Pregunta
1:
escogido
mod (6,2) de dual
Pregunta
2:
escogido
mod (5,3) de dual
Pregunta
3:
escogido
mod (7,35) de dual
Pregunta
4:
escogido
mod (5.2,3) de dual
La consulta 1 se divide 6 en 2 perfectamente, cediendo 0 como el resto. La consulta 2 se
divide 5 en 3,
ceder 1 con resto 2. La consulta 3 intenta dividirse 7 en 35. Ya que el divisor es más
grande que el dividendo, el número 7 es devuelto como el valor de módulo. La consulta 4
tiene una fracción impropia como el dividendo. La división 5.2 por 3 producciones 1 con
resto 2.2.

Cualquier número par dividido en 2 naturalmente no tiene ningún resto, pero los
números impares divididos en 2 siempre tienen un resto de 1. Por lo tanto, la
función de MOD a menudo es usada se distinguen entre hasta números impares
y.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

La columna EMPLOYEE_ID en la comando de EMPLOYEES almacena un número


secuencial único para cada principio de registro con el empleado número 100. El
201
primero 12 EMPLOYEES deben ser asignados a uno de cuatro equipos en una manera de
retorno al punto de origen para una tarea particular. La figura 4-15 muestra como esto es
llevado a cabo usando la función de MOD.
Los archivos de los 12 EMPLOYEES son aislados con un ENTRE el operador en el
DONDE cláusula. La función de MOD es aplicada a la división de los valores de columna
EMPLOYEE_ID por el literal 4 numérico. Como la Figura 4-15 muestra, la función de
MOD asigna los números 0 a 3 a cada fila en una manera de retorno al punto de origen.

LA FIGURA 4-15 La función de MOD


202
Capítulo 4:
Funciones de fila sola

Los valores por defecto asumidos por los parámetros opcionales de funciones
no siempre son intuitivos, pero a menudo son probados. Por ejemplo, la vocación de la
función de SUBSTR con sólo los dos primeros parámetros causa la función que extrae una
subcuerda de una posición de principio al final de la cuerda de la fuente dada. El parámetro
opcional tanto para el numérico como para fecha TRUNC

Funcionamiento con Fechas

y las funciones REDONDAS son el nivel de la precisión. Por ejemplo, la vocación de la función
de TRUNC numérica sin especificar el nivel del truncamiento causa el número siendo truncado
al número entero más cercano. Es útil ser familiar con los valores por defecto asumidos por
parámetros opcionales para estas funciones.
La fecha funciones incorporadas proporciona una manera conveniente de solucionar
problemas relacionados con la fecha sin tener que guardar la pista de años bisiestos o el
número de días en meses particulares. Hablaremos del almacenamiento de fechas por el
Oracle y las máscaras de formato de fecha por defecto antes de que conduzcamos un
examen detallado de la función de SYSDATE. Seguiremos hablando de la aritmética de
fecha y las funciones de manipulación de fecha: ADD_MONTHS,
MONTHS_BETWEEN, LAST_DAY, NEXT_DAY, POR AHÍ, y TRUNC.

El Almacenamiento de fecha en las Fechas de Base de datos es


almacenado internamente en un formato numérico que apoya el almacenamiento de
siglo, año, mes, y detalles de día, así como información de tiempo, como horas, minutos,
y segundos. Estos atributos de fecha están disponibles para cada, valor de columna
literal, o expresión que es del tipo de datos de fecha.
Cuando tienen acceso a la información de fecha de una comando, el formato por defecto
de los resultados comprende dos dígitos que representan el día, una abreviatura de tres
cartas del mes, y dos dígitos que representan el componente de año. En ausencia, estos
componentes son separados con guiones en SQL*Plus y pasan cuchilladas en el Developer
SQL. La figura 4-16 muestra los contenido de la columna START_DATE de la comando
JOB_HISTORY. Note que la pregunta es realizada en el Developer SQL, entonces los
elementos de fecha son separados por cuchilladas avanzadas.
Aunque el componente de siglo no sea mostrado en ausencia, es almacenado en la
base de datos cuando el valor de fecha es insertado o actualizado y está disponible para
la recuperación.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
203

LA FIGURA 4-16 Almacenamiento de fecha por defecto en la


base de datos

El formato en el cual una fecha es mostrada se menciona como su máscara de formato.


Hay varios códigos de formateo o las máscaras de formato de fecha disponibles, como
mostrado en la Tabla 4-2.
Hablan de la lenguaje para formatear artículos de fecha usando la variedad llena de
máscaras de formato de fecha en el Capítulo 5. La máscara de formato de DD-MON-RR
es la falta para visualización e ingreso. Insertando o actualizando la información de
fecha, el componente de siglo es obtenido de la función de SYSDATE si no es
suministrado. La máscara de formato de fecha RR se diferencia de la máscara de formato
de YY ya que es puede ser usado para especificar siglos diferentes basados durante los
años corrientes y especificados. El componente de siglo adjudicado
204
Capítulo 4:
Funciones de fila sola
TABLA 4-2

Máscaras de Formato de fecha

Máscara de formato
DD MON YY YYYY RR CENTÍMETROS CÚBICOS HH HH24 MI SS

Descripción de formato
Día del Mes de mes del año año De dos dígitos año De cuatro dígitos incluso siglo año De dos dígitos
(Año 2000-dócil) Horas de siglo De dos dígitos con Segundos de Minutos de tiempo de la mañana y de
veinticuatro horas de la tarde

a una fecha con su año especificado con la fecha RR el formato puede ser mejor
entendido considerando los principios siguientes:

■ Si los dos dígitos del año corriente y año especificado están entre 0 y 49,
el siglo corriente es devuelto. Suliste que la fecha presente es 02-JUN-2007. El
siglo devuelto para la fecha 24-JUL-04 en el formato de DD-MON-RR es 20.
■ Si los dos dígitos del año corriente están entre 0 y 49 y el especificado
el año se cae entre 50 y 99, el siglo anterior es devuelto. Suliste que la fecha
corriente es 02-JUN-2007. El siglo devuelto para 24-JUL-94 es 19.
■ Si los dos dígitos de los años corrientes y especificados están entre 50 y 99, el
el siglo corriente es devuelto en ausencia. Suliste que la fecha corriente es 1975
02-JUN-. El siglo devuelto para 24-JUL-94 es 19.
■ Si los dos dígitos del año corriente están entre 50 y 99 y el especificado
el año se cae entre 0 y 49, el próximo siglo es devuelto. Suliste que la fecha
corriente es 02-JUN-1975. El siglo devuelto para 24-JUL-07 es 20.

La Función de SYSDATE La función de SYSDATE no toma ningunos


parámetros y devuelve la fecha de sistema actual y tiempo según el servidor de base de
datos. En ausencia la función de SYSDATE devuelve los componentes DD-MON-RR
de la fecha de sistema actual. Es importante recordar que SYSDATE no devuelve la
fecha y tiempo como especificado por su
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
205

reloj de sistema local. Si el servidor de base de datos está localizado en un huso horario diferente de un
cliente que pregunta la base de datos, la fecha y tiempo volvió se diferenciará del reloj de sistema
operativo local en la máquina de cliente. La pregunta para recuperar la fecha de servidor de base de datos
es como sigue:
seleccione sysdate del dual

Hablaron brevemente de la Aritmética de Aritmética de fecha con columnas de fecha y


expresiones en el Capítulo 2. Las ecuaciones siguientes ilustran un principio importante en cuanto a la
aritmética de fecha:
Date1 - Date2 = Num1 Date1 - Num1 = Date2 Date1 = Date2 + Num1
Una fecha puede ser restada de otra fecha. La diferencia entre dos
los artículos de fecha representan el número de días entre ellos. Cualquier número, incluso fracciones,
puede ser añadido a o restado de un artículo de fecha. En este contexto el número representa varios días.
La suma o la diferencia entre un número y un artículo de fecha siempre devuelven un artículo de fecha.
Este principio implica que la adición, multiplicándose, o dividiendo dos artículos de fecha no es
permitida.
Para ilustrar el componente de tiempo del SYSDATE funcionan ya que esto pertenece a la aritmética
de fecha, el entorno de Developer SQL ha sido temporalmente modificado para mostrar la información
de tiempo así como la información de fecha.

Para modificar el entorno de Developer SQL para mostrar la información de tiempo para
columnas de fecha, en ausencia, navegan a Herramientas | Preferencias | Base de datos |
Parámetros de NLS | Formato de Fecha. Cambie la máscara de visualización por defecto
(DD/MON/RR) a (DD/MON/RR HH24:MI:SS).

Una función de conversión, de que hablarán detalladamente en el Capítulo 5, es introducida aquí para
ayudar a este ejemplo. La figura 4-17 demuestra como la función de conversión TO_DATE es usada
para convertir el literal 02-JUN-2008 de fecha con 12:10 de componente de tiempo en un tipo de datos
de fecha.
La primera pregunta en la cifra es disecada como sigue: dos días antes del segundo de junio, 12:10 son
el treinta y un de mayo, 12:10, que es la fecha y tiempo devuelto por la expresión 1. La adición de 0.5 días
o 12 horas hasta 12:10 02/JUN/08, como la expresión 2 demuestra, causa la fecha 03/JUN/08 y el tiempo
00.10 devuelto. La expresión 3 añade 6/24 o seis horas, causando la fecha 02/JUN/08, 18.10 devuelto.
206
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-17 La función de SYSDATE y aritmética de fecha


La columna HIREDATE para EMPLOYEES con valores DEPARTMENT_ID de 30 es
restada del artículo de fecha 02/JUN/96 12:10 en la segunda pregunta de la cifra. El número
de días entre estas dos fechas es devuelto para cada fila. Note que cuando el valor de
columna HIREDATE ocurre más tarde que 02/JUN/96, un número negativo es devuelto.

Utilización de Funciones de Fecha


Las funciones de manipulación de fecha proporcionan un medio confiable y exacto del
funcionamiento con
artículos de fecha. Estas funciones proporcionan tal facilidad y flexibilidad para la
manipulación de fecha que muchos especialistas de integración, los administradores de
base de datos, y otros developeres hacen el uso frecuente de ellos.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

La Función de MONTHS_BETWEEN
207
La función de MONTHS_BETWEEN devuelve un valor numérico que representa el número de meses
entre dos valores de fecha. Los literales de fecha en el formato DD-MON-RR o DD-MON-YYYY son
automáticamente dados el papel de artículos de fecha cuando ellos ocurren como parámetros a la función
de MONTHS_BETWEEN.
La función de MONTHS_BETWEEN toma dos parámetros obligatorios. Su sintaxis es
MONTHS_BETWEEN (fecha de inicio, fecha de finalización). La función computa la diferencia en meses
entre la fecha de inicio y fecha de finalización. Si la fecha de finalización ocurre antes de la fecha de inicio,
un número negativo es devuelto. La diferencia entre los dos parámetros de fecha puede consistir en un
número entero y un componente fraccionario. El número entero representa el número de meses entre las
dos fechas. El componente fraccionario representa los días y tiempo restante después de que la diferencia
de número entero entre años y meses es calculada y está basada durante un mes de 31 días. Un número
entero sin la parte fraccionaria es devuelto si los componentes de día de las fechas comparadas son el
mismo o el día anterior de sus meses respectivos.
Las preguntas siguientes ilustran la función de MONTHS_BETWEEN:

La consulta 1: seleccione sysdate, sysdate+31, sysdate+62, sysdate+91, months_between (sysdate+91,


sysdate) de la Consulta 2 dual: seleccione months_between ('29-mar-2008', '28-feb-2008') de la
Consulta 3 dual: seleccione months_between ('29-mar-2008', '28-feb-2008') * 31 de la Consulta 4
dual: seleccione months_between (to_date ('29-feb-2008'), to_date ('28-feb-2008 12:00:00', 'dd-
mon-yyyy hh24:mi:ss'))* 31 del dual;

Suliste que la fecha corriente sea 29-DEC-2007. La primera expresión en la consulta 1 devuelve el
número 1, como el mes entre
El 29-DEC-2007 es 29-JAN-2008 (31 días más tarde). La segunda expresión de manera similar devuelve 2
meses entre 29-DEC-2007 y 29-FEB-2008 (62 días más tarde). Desde el febrero de 2008 tiene 29 días, 91
días deben ser añadidos a 29-DEC-2007 para conseguir 29-MAR-2008, y el MONTHS_BETWEEN (29-
MAR-2008, 29-DEC-2007) la función devuelve exactamente tres meses en la tercera expresión en la
consulta 1.
La consulta 2 implícitamente converte los literales de fecha en artículos de fecha del formato DD-
MON-YYYY. Ya que ninguna información de tiempo es proporcionada, el Oracle supone que el tiempo sea la
medianoche durante ambos días, o 0:00:00. La función de MONTHS_BETWEEN devuelve
aproximadamente 1.03225806. El componente de número entero indica que hay un mes entre estas dos
fechas. El examen más cercano del componente fraccionario de manera interesante revela que hay
exactamente un mes entre 28-MAR-2008 y 28-FEB-2008. El componente fraccionario debe representar
por lo tanto el
208
Capítulo 4:
Funciones de fila sola

diferencia antigua. Esto incluiría diferencias en horas, minutos, y segundos también, pero
para este ejemplo, los componentes de tiempo son idénticos. Multiplicándose
0.03225806 por 31 vueltas 1, ya que el componente fraccionario devuelto por
MONTHS_ ENTRE está basado durante un mes de 31 días.
Del mismo modo, la consulta 3 devuelve el número entero 32. La consulta 4
demuestra como el componente de tiempo es factored en el cálculo por la función de
MONTHS_BETWEEN, que devuelve aproximadamente 0.016129. Hay una diferencia
de 12 horas entre el principio y parámetros de fecha de finalización, entonces los meses
cero entre ellos son correctos. La multiplicación de la parte fraccionaria por 31
producciones 0.5 días, que equivale a la diferencia de 12 horas.
La función de MONTHS_BETWEEN usada en la Figura 4-18 devuelve archivos de
la comando JOB_HISTORY. Los meses entre las fechas un empleado comenzó en un
trabajo particular y se terminó aquel trabajo son computados, y los resultados son
clasificados en el pedido inclinado.

Un error común es a funcione y los MONTHS_BETWEEN suponen que


el tipo de datos de vuelta del solo- la función de fecha ambos vuelve unas funciones
de fila numéricas son el mismo como la categoría valor. Es importante ser familiar
con la función pertenece a. Esto sólo es verdad de los principios de la aritmética de
fecha, ya que son las funciones numéricas. Carácter y fecha común para suponer
erróneamente que las funciones puedan valores de retorno de cualesquiera datos la
diferencia entre dos fechas es una fecha, tipo. Por ejemplo el carácter INSTR cuando de
hecho es un número.
La Función de ADD_MONTHS La función de ADD_MONTHS devuelve un
artículo de fecha calculado añadiendo un número especificado de meses a un valor de
fecha dado. Los literales de fecha en el formato DD-MON-RR o DD-MON-YYYY son
automáticamente dados el papel de artículos de fecha cuando ellos ocurren como
parámetros a la función de ADD_MONTHS.
La función de ADD_MONTHS toma dos parámetros obligatorios. Su sintaxis es
ADD_MONTHS (fecha de inicio, número de meses). La función computa el plazo
establecido después de añadir el número especificado de meses a la fecha de inicio. El
número de meses puede ser negativo, causando un plazo establecido antes que la fecha
de inicio devuelta. El número de meses puede ser fraccionario, pero el componente
fraccionario no es ignorado y el componente de número entero es usado.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
209

LA FIGURA 4-18 La función de MONTHS_BETWEEN

Las tres preguntas en la Figura 4-19 ilustran el comportamiento de la función de


ADD_MONTHS.
La primera pregunta en la cifra devuelve 07-MAY-2009 ya que el componente de día
permanece el mismo si posible y el mes es incrementado por uno. La segunda pregunta
tiene dos dimensiones interesantes. El parámetro que especifica el número de meses para
añadir contiene un componente fraccionario, que no es ignorado. Por lo tanto, es
equivalente a ADD_MONTHS ('31-dec-2008', 2). Añadiendo dos meses a la fecha el
31-DEC-2008 debería devolver la fecha 31-FEB-2009, pero no hay ninguna tal fecha,
tan el día anterior del mes, 28-FEB-2009, es devuelto. Ya que el número de meses
añadidos en la tercera pregunta es-12, la fecha 07-APR-2008 es devuelta, que es 12
meses antes de la fecha de inicio.
210
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-19 La función de ADD_MONTHS

EJERZA 4-3 Utilización de las Funciones de Fecha


Se requiere que usted obtenga una lista de EMPLOYEE_ID, LAST_NAME, e HIRE_
LA FECHA valora por los EMPLOYEES que han trabajado más de 100 meses entre la
fecha ellos fueron contratados y 01-JAN-2000.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula


SENTENCIA es
SELECCIONE EMPLOYEE_ID, LAST_NAME, HIRE_DATE
3. El DE la cláusula es
DE EMPLOYEES
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS
211

4. El DONDE la cláusula debe comparar los meses entre la fecha dada literal
y los HIRE_DATE valoran con el literal 100. 5 numérico. La función de MONTHS_BETWEEN
puede ser usada en el DONDE cláusula. 6. El DONDE la cláusula es
DONDE MONTHS_BETWEEN ('01-JAN-2000', HIRE_DATE)> 100 7. La ejecución de esta
select devuelve el SET de resultados mostrados en el siguiente
ilustración:

La Función de NEXT_DAY La función de NEXT_DAY devuelve la fecha cuando el siguiente


acontecimiento de un día especificado de la semana ocurre. Los literales que pueden ser implícitamente
dados el papel de artículos de fecha son aceptables cuando ellos ocurren como parámetros a la función
de NEXT_DAY.
La función de NEXT_DAY toma dos parámetros obligatorios. Su sintaxis es NEXT_DAY (fecha de
inicio, el día de la semana). La función computa la fecha en la cual el día del parámetro de semana
después ocurre después de la fecha de inicio. El día de la semana
212
Capítulo 4:
Funciones de fila sola

el parámetro puede ser un valor de carácter o un valor entero. Los valores aceptables
son determinados por el parámetro de base de datos NLS_DATE_LANGUAGE pero
los valores por defecto son al menos los tres primeros carácteres del nombre de día o
valores enteros, donde 1 representa el domingo, 2 representa el lunes, etcétera. Los
valores de carácter que representan los días de la semana pueden ser especificados en
cualquier instancia. El nombre corto puede ser más largo que tres carácteres, por
ejemplo, el domingo puede ser referido como el sol, sund, sunda o el domingo.
Las tres preguntas en la Figura 4-20 ilustran el comportamiento de la función de
NEXT_DAY.
El 01-JAN-2009 es un jueves. Por lo tanto, la próxima vez que un martes ocurre será
cinco días más tarde 06-JAN-2009, que es lo que la primera pregunta en la cifra recupera.
La segunda pregunta especifica el carácter WEDNE literal, que es interpretado como el
miércoles.

LA FIGURA 4-20 La función de NEXT_DAY


Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

GUIÓN & SOLUCIÓN


213
Usted desea recuperar la duración de empleo en días para cada empleado. ¿Es posible realizar tal cálculo?
Sí. La función de SYSDATE puede ser usada para obtener la fecha de sistema actual. La pregunta siguiente
computa la duración restando la columna HIRE_DATE del valor devuelto por la función de SYSDATE:
SELECCIONE SYSDATE-HIRE_DATE DE EMPLOYEES;
Usted es encargado con la identificación de la fecha que el sobresueldo de personal de final del año será pagado.
Los sobresueldos son por lo general pagados el viernes pasado en diciembre. ¿Puede la fecha de sobresueldo ser
computada usando la función de NEXT_DAY?
Sí. Si la función de NEXT_DAY es llamada con el SET de parámetro de fecha de inicio hasta el día anterior en
diciembre y el SET de día de búsqueda al viernes, entonces el primer viernes en enero es devuelto. Restar siete
días desde esta fecha cede la fecha del viernes pasado en diciembre. Considere la pregunta siguiente para el año
2009: SELECCIONE NEXT_DAY ('31-DEC-2009', 'el viernes')-7 del DUAL;
Los EMPLOYEES que trabajan en ESTO que el departamento ha movido a nuevas oficinas y, aunque los cuatro
últimos dígitos de sus números de teléfonos sean el mismo, el SET de los tres dígitos 423 son cambiados a 623.
Un número de teléfono típico de ESTO empleado es 590-423 - 4567. Se requiere que usted provea una lista de los
nombres de los EMPLOYEES con sus viejos y nuevos números de teléfonos. ¿Puede esto poner en una lista ser
proporcionado?
Sí. La función REEMPLAZAR es usada. Reemplazar cada 4 con unos 6 cambiará dígitos que no deberían ser
cambiados también, entonces la cuerda para ser reemplazada debe ser únicamente especificada. La pregunta siguiente
proporciona la lista: SELECCIONE FIRST_NAME, LAST_NAME, REEMPLACE (PHONE_NUMBER, '.423. ',
'.623.') DE EMPLOYEES DONDE DEPARTMENT_ ID=60

El próximo miércoles después de que el 01-JAN-2009 es 07-JAN-2009. La tercera


pregunta usa la forma de número entero para especificar el quinto día de la semana.
Asumiendo los valores por defecto donde el domingo es representado por el número 1, el
quinto día es el jueves. La próxima vez otro jueves ocurre después de que el 01-JAN-2009 es
08-JAN-2009.

La Función de LAST_DAY La función de LAST_DAY devuelve la fecha del día


anterior en el mes un día especificado pertenece a. Los literales que pueden ser
implícitamente dados el papel de artículos de fecha son aceptables cuando ellos ocurren
como parámetros a la función de LAST_DAY.
La función de LAST_DAY toma un parámetro obligatorio. Su sintaxis es el DÍA
LAST_ (fecha de inicio). La función extrae el mes que el parámetro de fecha de inicio
pertenece a y calcula la fecha del día anterior de aquel mes. Las dos preguntas en la
Figura 4-21 ilustran el comportamiento de la función de LAST_DAY.
214
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-21 La función de LAST_DAY

El día anterior en el mes de enero de 2009 es 31-JAN-2009, que es devuelto por el


LAST_DAY ('01-JAN-2009') llamada a la función en la primera pregunta en la cifra.
La segunda pregunta extrae a los EMPLOYEES con valores JOB_ID de IT_PROG. El
número de días trabajados por estos EMPLOYEES en su primer mes del empleo es
calculado restando los valores de HIRE_DATE del LAST_DAY de aquel mes.

La Fecha Función REDONDA La fecha función REDONDA realiza una


operación de doblamiento en un valor basado en un formato de precisión de fecha
especificado. El valor volvió es o acorralado o abajo al formato de precisión de fecha
más cercano.
Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS

DENTRO DEL EXAMEN


215

Hay dos objetivos de certificación en este capítulo. Los diversos tipos de funciones de SQL son descritos y
el concepto de una función es definido. Una distinción es hecha entre el solo - funciones de fila, que
ejecutan una vez para cada fila en un dataset, y funciones de fila múltiple, que ejecutan una vez para todas
las filas en un conjunto de datos-. Las funciones de fila sola pueden ser usadas en el ESCOGIDO,
DONDE, y PEDIDO POR cláusulas de la select SENTENCIA.
El segundo objetivo está relacionado con el uso de carácter, numérico, y funciones de fecha en
preguntas. El examen prueba su entender - ing de estas funciones proporcionando ejemplos prácticos de su
uso. Pueden pedirle predecir que los resultados volvieron o identificar er-rors inherente en la sintaxis de
estos ejemplos.
Las funciones pueden tomar cero o más parámetros de ingreso, algunos de los cuales pueden ser
obligatorios

mientras los otros son opcionales. Param-obligatorios eters son puestos en una lista primero, y los
parámetros opcionales siempre son últimos. Los errores comunes están relacionados con la confusión
sobre el sentido de LOCATIONS de parámetros en funciones. Un carácter func-tion como INSTR
toma cuatro parámetros, con los primeros dos siendo obligatorios. El primer es la cuerda de la fuente; el
segundo es la cadena de búsqueda, mientras el tercer y el cuarto no siempre son intuitivos y pueden ser
fácilmente olvidados o mezclados bien. Esté seguro de recordar el sentido de parámetros en
LOCATIONS diferentes. Otro error relacionado con parámetros está relacionado con confu-sion sobre
los valores por defecto usados por el Oracle cuando los parámetros opcionales no son especificados.
Puede esperarse que usted prediga que los resultados volvieron de llamadas a la función que no tienen
todos sus parámetros opcionales especificados.

La fecha función REDONDA toma un obligatorio y un parámetro opcional. Su sintaxis


es REDONDA (fecha de la fuente, [formato de precisión de fecha]). El parámetro de fecha de
la fuente representa cualquier valor que pueda ser implícitamente convertido en un artículo
de fecha. El parámetro de formato de precisión de fecha especifica el nivel del doblamiento
y es opcional. Si es ausente, el nivel por defecto del doblamiento es el día. Esto significa que
doblan sobre la fecha de la fuente hasta el día más cercano. Los formatos de precisión de
fecha incluyen el siglo (CENTÍMETROS CÚBICOS), año (YYYY), cuarto (Q), mes (MM),
semana (W), día (DD), hora (HH), y minuto (MI). Hablan de muchos de estos formatos en
el Capítulo 5.
El rodeo al siglo es equivalente a la adición de un al siglo corriente. El rodeo al próximo
mes ocurre si el componente de día es mayor que 16, más redondeando al principio del mes
corriente ocurre. Si el mes se cae entre un y seis, entonces el doblamiento al año devuelve la
fecha a principios del año corriente, más esto devuelve la fecha a principios del año siguiente.
La figura 4-22 muestra cuatro artículos en la lista SENTENCIA, cada uno que da la vuelta
sobre una fecha literal a un nivel diferente de la precisión.
216
Capítulo 4:
Funciones de fila sola

LA FIGURA 4-22 La fecha función REDONDA

El primer artículo dobla sobre la fecha hasta el día más cercano. Ya que el tiempo es
13:00, que es después 12:00, doblan sobre la fecha a la medianoche al día siguiente, o
03-JUN-2009 00:00. El segundo artículo dobla sobre la fecha hasta el mismo día de la
semana que el primer día del mes y devuelve 01-JUN-2009. El tercer artículo dobla
sobre la fecha al principio del mes siguiente, ya que el componente de día es 16 y
devuelve 01-JUL-2009. El cuarto artículo es acorralado a la fecha a principios del año
siguiente ya que el componente de mes es 7, y 01-JAN-2010 es devuelto.

La Fecha Función de TRUNC La fecha función de TRUNC realiza una


operación de truncamiento en un valor de fecha basado en un formato de precisión de
fecha especificado.
La fecha función de TRUNC toma un obligatorio y un parámetro opcional. Su sintaxis
es TRUNC (fecha de la fuente, [formato de precisión de fecha]). El parámetro de fecha de la
fuente representa cualquier valor que pueda ser implícitamente convertido en un artículo
de fecha. El parámetro de formato de precisión de fecha especifica el nivel del truncamiento
y es opcional. Si es ausente, el nivel por defecto del truncamiento es el día. Esto significa
que cualquier componente de tiempo
Resumen de certificación
217
LA FIGURA 4-23 La fecha función de TRUNC

de la fuente la fecha es establecida a la medianoche o 0:00:00 (00 horas, 00 minutos y 00


segundos). El truncamiento al nivel de mes establece la fecha de la fecha de la fuente
hasta el primer día del mes. El truncamiento al nivel de año devuelve la fecha a
principios del año corriente. La figura 4-23 muestra cuatro artículos en la lista
SENTENCIA, cada uno que trunca una fecha literal a un nivel diferente de la precisión.
El primer artículo pone el componente de tiempo de 13:00 a 00:00 y devuelve el día
corriente. El segundo artículo trunca la fecha hasta el mismo día de la semana que el
primer día del mes y devuelve 01-JUN-2009. El tercer artículo trunca la fecha al
principio del mes corriente y devuelve 01-JUN-2009. El cuarto artículo es truncado a
la fecha a principios del año corriente y devuelve 01-JAN-2009.

RESUMEN DE CERTIFICACIÓN
Las funciones de fila sola exponencialmente realzan las posibilidades de manipulación
de datos
ofrecido por select SQL. Estas funciones ejecutan una vez para cada fila de datos
seleccionados. Ellos pueden ser usados en el ESCOGIDO, DONDE, y PEDIDO POR
cláusulas en una select SENTENCIA.
218
Capítulo 4:
Funciones de fila sola

Hablaron de la naturaleza de caja negra de las funciones de PL/SQL incorporadas y


una distinción entre múltiple y funciones de fila sola fue hecha. Un alto nivel - la
descripción que describe como el carácter, numérico, e información de fecha puede ser
manipulado por funciones de fila sola fue proporcionada antes de explorar
sistemáticamente varias funciones de llave detalladamente.
Las funciones de conversión de instancia del carácter fueron descritas antes de
introducir las funciones de manipulación de carácter. Hablaron de las funciones
numéricas POR AHÍ, TRUNC, y MOD, pero éstos representan la punta del iceberg ya
que el Oracle proporciona una caja de herramientas enorme de funciones matemáticas y
numéricas. La aritmética de fecha y el almacenamiento fueron brevemente explorados
antes de tomar una mirada detallada a las funciones de fecha.
Hay numerosas funciones de fila sola disponibles, y no se requiere que usted
memorice su cada detalle. El entendimiento de las amplias categorías de funciones de
fila sola y ser introducido en el carácter común, numérico, y funciones de fecha
proporcionan un punto de partida a su descubrimiento de su utilidad.
Taladradora de dos minutos
219


TALADRADORA DE DOS MINUTOS
Describa Diversos tipos de Funciones Disponibles en SQL
❑ Funciones aceptan cero o más parámetros de ingreso, pero siempre devuelven un resultado
de un tipo de datos predeterminado.
❑ funciones de Fila sola ejecutan una vez para cada fila seleccionada, mientras la fila múltiple
las funciones ejecutan una vez para el SET entero de filas preguntadas.
❑ funciones de Carácter son la conversión del instancia o la manipulación del carácter
funciones.

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS


❑ La función de INITCAP acepta una serie de carácteres y devuelve cada palabra
en instancia de título.
❑ La función que computa el número de carácteres en una cuerda incluso
los espacios y los carácteres especiales son la función de LONGITUD.
❑ La función de INSTR devuelve la posición posicional del acontecimiento enésimo de
una serie especificada de carácteres en una cuerda de la fuente.
❑ La función de SUBSTR extrae y devuelve un segmento de una fuente dada
cuerda.
❑ La función REEMPLAZAR substituye cada acontecimiento de un artículo de búsqueda en
el
cuerda de la fuente con un término de reemplazo y vueltas la cuerda de la fuente modificada.
❑ Una operación de módulo devuelve el resto de una operación de división y es
disponible vía la función de MOD.
❑ La función REDONDA numérica dobla sobre números o abajo al
nivel especificado de precisión.
❑ La función de SYSDATE es tradicionalmente ejecutado contra la comando DUAL
y vueltas fecha corriente y tiempo del servidor de base de datos.
❑ Fecha teclea siglo de tienda, año, mes, día, hora, minutos, y segundos
información.
❑ La diferencia entre dos artículos de fecha siempre es un número que representa el
número de días entre estos dos artículos.
220
Capítulo 4:
Funciones de fila sola

❑ Cualquier número, incluso fracciones, puede ser añadido a o restado de una fecha
el artículo y en este contexto el número representa un número especificado de días. ❑ La función de
MONTHS_BETWEEN computa el número de meses
entre dos parámetros de fecha dados y está basado durante un mes de 31 días. ❑ La función de
LAST_DAY es usado para obtener el día anterior en un mes dado a cualquiera
artículo de fecha válido.

MÍ PRUEBA
Mí Prueba
221
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en este capítulo.
Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija todo el
correcto responde de cada pregunta.

Describa Diversos tipos de Funciones Disponibles en SQL


1. ¿Qué select en cuanto a funciones de fila sola son verdad? (Elija todo que se aplican.)
A. Ellos pueden devolver más de un resultado. B. Ellos ejecutan una vez para cada registro
tratado. C. Ellos pueden tener cero o más parámetros de ingreso. D. Ellos deben tener al menos un
parámetro obligatorio.
2. ¿Cuáles de éstos es funciones de conversión de instancia del carácter de fila sola? (Elija todo que se
aplican.)
A. MÁS ABAJO B. C MÁS PEQUEÑO. INITCASE D. INITCAP

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS


3. Que valor es devuelto después de ejecutar la select siguiente:
LONGITUD SENTENCIA ('¿How_long_is_a_piece_of_string?') DE DUAL; (Elija la mejor
respuesta.) A. 29 B. 30 C. 24 D. Ninguno de los susodichos
4. Que valor es devuelto después de ejecutar la select siguiente:
SELECCIONE SUBSTR ('¿How_long_is_a_piece_of_string?', 5,4) DE DUAL; (Elija la mejor
respuesta. ¿) A. mucho tiempo B. _long C. cuerda? D. Ninguno de los susodichos
222
Capítulo 4:
Funciones de fila sola

5. ¿Qué valor es devuelto después de ejecutar la select siguiente?


SELECCIONE INSTR (¿'How_long_is_a_piece_of_string?',' _ ', 5,3) DE DUAL; (Elija la mejor
respuesta.) A. 4 B. 14 C. 12 D. Ninguno de los susodichos
6. ¿Qué valor es devuelto después de ejecutar la select siguiente?
ESCOGIDO REEMPLAZAN (¿'How_long_is_a_piece_of_string?',' _ ','') DE DUAL; (Elija la
mejor respuesta.) A. ¿Cuánto de largo es una pieza de cuerda? B.
¿How_long_is_a_piece_of_string? ¿C. Howlongisapieceofstring? D. Ninguno de los susodichos
7. ¿Qué valor es devuelto después de ejecutar la select siguiente?
SELECCIONE MOD (14,3) DE DUAL; (Elija la mejor respuesta.) A. 3 B. 42 C. 2 D. Ninguno de
los susodichos
8. La asunción SYSDATE=07-JUN-1996 12:05, que valor es devuelto después de ejecutar el
¿select siguiente? SELECCIONE ADD_MONTHS (SYSDATE,-1) del DUAL; (Elija la mejor
respuesta.) A. 12:05 de 07-MAY-1996 B. 12:05 de 06-JUN-1996 C. 12:05 de 07-JUL-1996 D.
Ninguno de los susodichos
9. ¿Qué valor es devuelto después de ejecutar la select siguiente? Tome la nota esto 01-JAN-2009
ocurre un jueves. (Elija la mejor respuesta.) SELECCIONAN NEXT_DAY ('01-JAN-2009', 'wed')
DE DUAL; A. 07-JAN-2009 B. 31-JAN-2009 C. Wednesday D. Ninguno de los susodichos
Pregunta de laboratorio
223

10. La asunción SYSDATE=30-DEC-2007, que valor es devuelto después de ejecutar el siguiente


¿select? SELECCIONE TRUNC (SYSDATE, 'AÑO') DEL DUAL; (Elija la mejor respuesta.) A.
31-DEC-2007 B. 01-JAN-2008 C. 01-JAN-2007 D. Ninguno de los susodichos

PREGUNTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
Varias citas fueron solicitadas por precios en impresoras a color. La información de proveedor no es el
provecho - capaz de la fuente habitual, pero usted sabe que el número de identificación de proveedor es
empotrado en la columna CATALOG_URL de la comando PRODUCT_INFORMATION. Se requiere
que usted recupere el PRODUCT_NAME y valores de CATALOG_URL y extraiga el número de
proveedor de la columna CATALOG_URL para todos los productos que tienen tanto las palabras el
COLOR como IMPRESORA en la columna PRODUCT_DESCRIPTION almacenada en cualquier
instancia.
224
Capítulo 4:
Funciones de fila sola
MÍ PRUEBAN RESPUESTAS
Describa Diversos tipos de Funciones Disponibles en SQL
1. los ® B y funciones de C. Single-row ejecutan una vez para cada registro seleccionado en un
dataset y puede ✓
no tome ningunos parámetros de ingreso, como SYSDATE, o muchos parámetros de ingreso.
Los ® A y D son incorrectos porque una función por definición devuelve sólo un resultado y hay ˚
muchas funciones sin parámetros.
2. ® A y D. La función INFERIOR converte el instancia del parámetro de cuerda de ingreso a su

el equivalente minúsculo, mientras INITCAP converte el parámetro de ingreso dado al
instancia de título.
Los ® B y C no son nombres de función válidos. ˚

Use Carácter, Número, y Funciones de Fecha en Select SENTENCIAS


3. ® B. La función de LONGITUD computa el número de carácteres en una cuerda de ingreso
dada ✓
incluso espacios, paletas, signo de puntuación, y otros carácteres especiales no imprimibles.
Los ® A, C, y D son incorrectos. ˚
4. ® A. La función de SUBSTR extrae una subcuerda de cuatro carácteres de ✓ de cuerda de ingreso
dado
el comienzo con e incluso el quinto carácter. Los carácteres en LOCATIONS 1 a 4 son How_.
Comenzando con el carácter en la posición 5, los cuatro siguientes carácteres forman la palabra
"mucho tiempo".
Los ® B, C, y D son incorrectos porque B es una subcuerda de cinco carácteres que comienza
en la posición 4, ˚
¿mientras anillo?, que también es cinco carácteres mucho tiempo, comienza cinco carácteres a
partir del final de la cuerda dada.
5. ® B. La función de INSTR devuelve la posición que el acontecimiento enésimo de la cadena de
búsqueda ✓
puede ser encontrado después de comenzar la búsqueda de una posición de principio dada. La
cadena de búsqueda es el carácter subrayar, y el tercer acontecimiento de este carácter que
comienza de la posición 5 en la cuerda de la fuente ocurre en la posición 14.
Los ® A, C, y D son incorrectos ya que la posición 4 es el primer acontecimiento de la cadena
de búsqueda y ˚
la posición 12 es el tercer acontecimiento si la búsqueda comenzara en la posición 1.
6. ® C. Todos los acontecimientos del carácter subrayar son reemplazados por una cuerda vacía,
que ✓
los borra de la cuerda.
Los ® A, B, y D son incorrectos. A es incorrecto porque los carácteres subrayar no son ˚
reemplazado por espacios, y B no cambia la cuerda de la fuente.
7. ® C. Cuando 14 está dividido en 3, la respuesta es 4 con el resto 2. ✓
Los ® A, B, y D son incorrectos. ˚
Respuesta de laboratorio
225

8. ® A. El menos un parámetro indica a la función de ADD_MONTHS que la fecha para ser ✓


devuelto debe ser un mes antes de la fecha dada.
Los ® B, C, y D son incorrectos. El B es un día y no un mes antes de la fecha dada. El C es un ˚
mes después de la fecha dada.
9. ® A. Desde el primero de enero de 2009 caídas un jueves, la fecha del miércoles siguiente ✓
es seis días más tarde.
Los ® B, C, y D son incorrectos. El B vuelve el día anterior del mes al cual la fecha dada se cae, ˚
y C devuelve una cadena de caracteres en vez de una fecha.
10. ® C. La fecha función de TRUNC no realiza el doblamiento y desde el nivel de ✓
el truncamiento es el AÑO, los componentes de mes y día de la fecha dada no son ignorados y el
primer día del año al cual esto pertenece es devuelto.
Los ® A, B, y D son incorrectos. Unas vueltas el día anterior en el mes en cual la fecha dada ˚
ocurre, y B devuelve un resultado conseguido redondeando en vez del truncamiento.

RESPUESTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE, complete las tareas siguientes.
1. Comience al Developer SQL y conecte al esquema OE. 2. Una entrada CATALOG_URL típica mira
como sigue: www.supp-102094.com/cat/hw/p1797.html.
El número de identificación de proveedor es consecuentemente seis carácteres mucho tiempo y
comienza del diecisiete carácter del valor de CATALOG_URL. La función de SUBSTR es usada
para extraer este valor.
3. La cláusula SENTENCIA es por lo tanto
SELECCIONE PRODUCT_NAME, CATALOG_URL, SUBSTR (CATALOG_URL, 17, 6)
PROVEEDOR
4. El DE la cláusula es
DE PRODUCT_INFORMATION
5. Los archivos recuperados deben ser limitados con los que contienen tanto las palabras el COLOR
como
IMPRESORA. Estas palabras pueden ocurrir en cualquier pedido y pueden estar presentes en
mayúscula o minúscula o instancia mezclado. Cualquiera de las funciones de conversión de
instancia puede estar acostumbrada al acuerdo con cuestiones de instancia, pero porque las dos
palabras pueden ocurrir en cualquier pedido, dos condiciones son necesarias. La función
SUPERIOR será usada para la conversión de instancia para la comparación.
6. La primera condición es
SUPERIOR (PRODUCT_DESCRIPTION) COMO '%COLOR %'
226
Capítulo 4:
Funciones de fila sola

7. La segunda condición es
SUPERIOR (PRODUCT_DESCRIPTION) COMO '%PRINTER %' 8. El DONDE cláusula es
DONDE SUPERIOR (PRODUCT_DESCRIPTION) COMO '%COLOR %' Y SUPERIOR
(PRODUCT_DESCRIPTION) COMO '%PRINTER %'
9. La ejecución de la select devuelve el SET de resultados que emparejan este modelo como mostrado
en el
ilustración siguiente:

5
Utilización de
Funciones de
Conversión y
Expresiones
Condicionales

OBJETIVOS DE CERTIFICACIÓN

5.01

5.02

Describa Diversos tipos de Funciones de Conversión Disponibles en SQL


Use el TO_CHAR, TO_NUMBER, y
Funciones de Conversión de TO_DATE

5.03


Q&A

Aplique Expresiones Condicionales en una Select SENTENCIA


Taladradora de dos minutos Mí Prueba
Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

228
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

Hablaron de funcione s que actúan

sobre numérico, fecha, e información de carácter en el Capítulo 4, y la familiaridad con aquel

contenido es asumida en este capítulo. A veces los datos no están disponibles en el formato exacto

que una función es definida para aceptar, causando un tipo de datos

falta de armonía. Para evitar errores de falta de armonía, el Oracle implícitamente converte tipos de
datos compatibles. Implícito
hablan de la conversión antes de introducir funciones de conversión explícitas, que son usadas para
conversiones de tipo de datos confiables.

El concepto de funciones que anidan es definido y una categoría de funciones


generales apuntadas a la simplificación de interacciones con valores NULOS es
introducida. Éstos incluyen el NVL, NVL2, NULLIF, y SE FUNDEN funciones.
La lógica condicional, o la capacidad de mostrar resultados diferentes según valores
de datos, es expuesta por el INSTANCIA de funciones condicional y DECODIFICAR.
Estas funciones proporcionan la lógica "si entonces más" en el contexto de un SQL
preguntan.

OBJETIVO DE CERTIFICACIÓN 5.01

Describa Diversos tipos de Funciones de Conversión


Disponibles en SQL
Las funciones de conversión de SQL son funciones de fila solas diseñadas para cambiar la
naturaleza del
tipo de datos de un valor de columna, expresión o literal. TO_CHAR, TO_NUMBER y
TO_DATE son las tres funciones de conversión el más extensamente usadas y son
hablados detalladamente. La función de TO_CHAR converte numérico e información
de fecha en carácteres, mientras TO_NUMBER y TO_DATE converten datos de
carácter en números y fechas, respectivamente. Hablan de los conceptos de la conversión
de tipo de datos implícita y explícita en la siguiente sección.

Funciones de conversión
El oracle permite que columnas sean definidas con ANSI, DB2, y tipos de datos
SQL/DS. Éstos
son convertidos internamente a tipos de datos de Oracle. Este enfoque permite que
aplicaciones escritas para otros sistemas de base de datos sean emicapas al Oracle con la
facilidad.
Las definiciones de comando son obtenidas usando el comando DESCRIBIR hablado
en
El capítulo 2. Cada columna tiene un tipo de datos asociado que reprime la naturaleza
de
Describa Diversos tipos de Funciones de Conversión Disponibles en SQL
229

los datos esto puede almacenar. Una columna de NÚMERO no puede almacenar la información de
carácter. Una columna de FECHA no puede almacenar carácteres arbitrarios o números. Sin embargo, los
equivalentes de carácter tanto de número como de información de fecha pueden ser almacenados en un
espacio de VARCHAR2.
Si una función que acepta un parámetro de ingreso de carácter encuentra un número en cambio, el
Oracle automáticamente la converte en su carácter equivalente. Si una función que acepta un número o
un parámetro de fecha encuentra un valor de carácter, hay condiciones específicas en las cuales la
conversión de tipo de datos automática ocurre. La FECHA y los tipos de datos de NÚMERO son muy
estrictos comparado con VARCHAR2 y TRABAJO POR HORAS.
Aunque las conversiones de tipo de datos implícitas estén disponibles, es más confiable para convertir
explícitamente valores de un tipo de datos a otra conversión de fila sola de utilización funciones.
Convertir la información de carácter a NÚMERO y FECHA confía en máscaras de formato, de que
hablan más tarde en esta sección.

Cuando los valores numéricos son suministrados como introducido a funciones que esperan
parámetros de carácter, la conversión de tipo de datos implícita asegura que ellos son tratados
como valores de carácter. Del mismo modo, las cadenas de caracteres que consisten en dígitos
numéricos son implícitamente convertidas en valores numéricos si posible cuando una falta de
armonía de tipo de datos ocurre. Pero tener cuidado con conversiones implícitas. Hay algunos
instancias cuando esto no trabaja tan esperado, como en el siguiente DONDE cláusula. Considere
datos restrictivos de una tabla T basados en una columna C de carácter, que contiene la cuerda
'100 cláusula de condición '.El DONDE C = '100' trabajos como usted podría esperar, pero la
condición DONDE C=100 devuelve un error de número inválido.

Los Valores de Conversión de Tipo de datos implícitos que no comparten tipos de datos
idénticos con parámetros de función son implícitamente convertidos al formato requerido de ser posible.
VARCHAR2 y los tipos de datos de TRABAJO POR HORAS son colectivamente referidos como tipos de
carácter. Los espacios de carácter son flexibles y permiten el almacenamiento de casi cualquier tipo de la
información. Por lo tanto, la FECHA y los valores de NÚMERO pueden ser fácilmente convertidos a sus
equivalentes de carácter. Estas conversiones son conocidas como número al carácter y fecha a
conversiones de carácter. Considere las preguntas siguientes:
La consulta 1: longitud sentencia (1234567890) de dual
La consulta 2: longitud sentencia (SYSDATE) de dual
Ambas preguntas usan la función de LONGITUD, que toma una cadena de caracteres
parámetro. El número 1234567890 en la consulta 1 es implícitamente convertido en una cadena de
caracteres, '1234567890', antes de ser evaluado por la función de LONGITUD,
230
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

que devuelve el número 10. La consulta 2 primero evalúa la función de SYSDATE, que
es supuesta ser 07-APR-38. Esta fecha es implícitamente convertida en la cadena de
caracteres '07-APR-38', y la función de LONGITUD devuelve el número 9.
Es poco común para datos de carácter para ser implícitamente convertidos en tipos
de datos numéricos desde la única condición en la cual esto ocurre es si los datos de
carácter representan un número válido. La cadena de caracteres '11' será implícitamente
convertida a un número, pero '11.123.456' no será, como las preguntas siguientes
demuestran:
Pregunta
3:
escogido
mod ('11', 2) de dual
Pregunta
4:
escogido
mod ('11.123', 2) de dual
Pregunta
5:
escogido
mod ('11.123.456', 2) de dual
Pregunta
6:
escogido
mod ('11$', 2) de dual
Las consultas 3 y 4 implícitamente converten las cadenas de caracteres '11' y '11.123'
en el
los números 11 y 11.123, respectivamente, antes de la función de MOD los evalúan y
devuelven los resultados 1 y 1.123. La consulta 5 devuelve el error "ORA-1722: el número
inválido," cuando el Oracle trata de realizar un carácter implícito para numerar la
conversión. Esto falla porque la cuerda '11.123.456' no es un número válido. La consulta 6
también falla con el error de número inválido, ya que el símbolo de dólar no puede ser
implícitamente convertido en un número.
El carácter implícito para fechar conversiones es posible cuando la cadena de caracteres
se conforma con los modelos de fecha siguientes: [D|DD] separator1 [MON|MONTH]
separator2 [R|RR|YY|YYYY]. Los D y DD representan un día solo y de 2 dígitos del
mes. MON es una abreviatura de 3 carácteres, mientras el MES es el nombre completo
durante un mes. Los R y RR representan un año solo y de 2 dígitos. YY y YYYY
representan un 2-y año de 4 dígitos, respectivamente. El separator1 y los elementos
separator2 pueden ser la mayor parte de signos de puntuación, espacios, y paletas. La tabla
5-1 demuestra el carácter implícito para fechar la conversión, poniendo en una lista
varias llamadas a la función y los resultados vueltas de Developer de SQL.

TABLA 5-1

Ejemplos de Carácter Implícito para fechar Conversión

Llamada a la función add_months ('24-JAN-09', 1) add_months ('1\january/8', 1) months_between ('13*jan*8',


'13/feb/2008') add_months ('01$jan/08', 1) add_months (¡'13! jana08', 1)

add_months ('24-JAN-09 18:45', 1)

Formatee DD-MON-RR D\MONTH/R DD*MON*R, DD/MON/YYYY DD$MON/RR JANA es un mes inválido

DD-MON-RR HH24:MI

Resultados 24/FEB/09 01/FEB/08 - 1

01/FEB/08 ORA-1841: el año (apretado) debe estar entre-4713 y +9999 y no ser 0 Real Academia de Bellas Artes O
1830: el formato de fecha imagina finales antes de convertir la cuerda de ingreso entera
Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

Conversión de Tipo de datos explícita


231
El oracle ofrece muchas funciones para convertir artículos de un tipo de datos al otro,
conocido como funciones de conversión de tipo de datos explícitas. Éstos devuelven un
valor garantizado para ser el tipo requerido y ofrecer un método seguro y confiable de
convertir artículos de datos.
EL NÚMERO y los artículos de FECHA pueden ser convertidos explícitamente en
artículos de carácter usando la función de TO_CHAR. Una cadena de caracteres puede
ser explícitamente cambiada en un NÚMERO usando la función de TO_NUMBER. La
función de TO_DATE es usada para convertir cadenas de caracteres en artículos de
FECHA. Las máscaras de formato del oracle habilitan una amplia gama del control de
carácter al número y carácter para fechar conversiones.

Las funciones de conversión explícitas son críticas a la manipulación de fecha,


carácter, e información numérica. Las preguntas en este tema prueban su entendimiento de
modelos de formato comúnmente usados o máscaras. Las preguntas de uso prácticas
típicamente toman la forma, "Lo que es devuelto cuando el TO_DATE, TO_CHAR, y

OBJETIVO DE CERTIFICACIÓN 5.02

¿Las funciones de TO_NUMBER son aplicadas a los valores de datos siguientes y formatean
máscaras?" Éstos a menudo son anidados dentro de funciones más amplias, y es común ser
pedido predecir el resultado de una llamada a la función, como el TO_CHAR (TO_DATE ('01-
JAN-00', 'DD-MON-RR), 'Día').

Use el TO_CHAR, TO_NUMBER, y Funciones de


Conversión TO_DATE
Este objetivo de certificación contiene una descripción sistemática del TO_NUMBER,
TO_DATE, y funciones de TO_CHAR, con ejemplos. La discusión de TO_CHAR está
dividida en la conversión de dos tipos de artículos a carácteres: FECHA y NÚMERO.
Esta separación es garantizada por la disponibilidad de máscaras de formato diferentes
para controlar la conversión a valores de carácter. Estas funciones de conversión
existen junto a muchos otros, pero tienden a estar el más extensamente usadas. Esta
sección se concentra en las factibilidades de usar las funciones de conversión.
232
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales
Utilización de las Funciones de Conversión
Muchas situaciones exigen el uso de funciones de conversión. Ellos pueden extenderse
de
el formateo de la FECHA para y devuelve la pelota en un informe al contrato de un
seguro que los dígitos numéricos extraídos de espacios de carácter son correctamente
convertidos en números antes de aplicarlos en una expresión aritmética.
La tabla 5-2 ilustra la sintaxis de la fila sola conversión de tipo de datos explícita
funciones.
Los parámetros de apoyo de lenguaje nacionales opcionales (nls_parameters) son
útiles para especificar la lenguaje y formato en el cual los nombres de fecha y elementos
numéricos son devueltos. Estos parámetros son por lo general ausentes, y los valores por
defecto para elementos, como día o nombres de mes y las abreviaturas son usadas. Como
la Figura 5-1 muestra, hay una vista en público disponible llamada
NLS_SESSION_PARAMETERS que contiene los parámetros NLS para su sesión
corriente. El valor de NLS_CURRENCY por defecto es el símbolo de dólar, pero esto
puede ser cambiado al nivel de sesión de usuario. Por ejemplo, para cambiar el dinero al
3 carácter mucho tiempo ensartan GBP, el comando siguiente puede ser publicado:
CAMBIE LA SESIÓN puso NLS_CURRENCY ='GBP';

Convertiendo Números a Carácteres Usando la Función de


TO_CHAR La función de TO_CHAR devuelve un artículo de tipo de datos
VARCHAR2. Cuando aplicado a artículos del NÚMERO de tipo, varias opciones de
formateo están disponibles. La sintaxis es como sigue:
TO_CHAR (number1, [formato], [nls_parameter]), El parámetro number1 es
obligatorio y debe ser un valor que es o puede ser
implícitamente convertido en un número. El parámetro de formato opcional puede ser
usado para especificar la información de formateo numérica como anchura, símbolo
monetario, la posición de una coma decimal, y grupo (o miles) separadores y debe ser
encerrado en el solo

TABLA 5-2

Sintaxis de Funciones de Conversión de Tipo de datos Explícitas

TO_NUMBER (char1, [formatean la máscara], [nls_parameters]) = num1 TO_DATE (char1, [máscara de formato],
[nls_parameters]) = date1

TO_CHAR (num1, [formatean la máscara], [nls_parameters]) = char1 TO_CHAR (date1, [máscara de


formato], [nls_parameters]) = char1
Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE
233
LA FIGURA 5-1 Apoyo de Lenguaje nacional (NLS) parámetros de sesión

comillas. Hay otras opciones de formateo para números convertidos en carácteres, algunos
de los cuales son puestos en una lista en la Tabla 5-3. Considere las dos preguntas siguientes:
La consulta 1: seleccione to_char (00001) ||' es un número especial'
del dual;
La consulta 2: seleccione to_char (00001, '0999999') ||' es un número
especial' del dual;
La consulta 1 evalúa el número 00001, borra los ceros principales, converte el
el número 1 en el carácter '1' y vueltas la cadena de caracteres '1 es un número especial'.
La consulta 2 aplica la máscara de formato numérica '0999999' al número 00001,
convertiéndolo en la cadena de caracteres '0000001'. Después del encadenamiento a los
literales de carácter, la cuerda volvió es '0000001 es un número especial'. El cero y 6 nines en
la máscara de formato indican a la función de TO_CHAR que los ceros principales deben
ser mostrados y que la anchura de visualización debe ser puesta a siete carácteres. Por lo
tanto, la cuerda devuelta por la función de TO_CHAR contiene siete carácteres.
234
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

LA TABLA 5-3 Descripción de formato


Elemento de Elemento Formato Resultado de Carácter de
número
Numérico

9
Anchura numérica
9999
12
12
Máscaras de formato
0
Visualizaciones ceros principales
09999
0012
00012

.
Posición de decimal
09999.999
030.40
00030.400

punto

D
Separador decimal
09999D999
030.40
00030.400

la posición (el período es

falta)

,
Posición de coma
09999 999
03040
00003 040

símbolo

G Posición de separador de grupo 09999G999 03040 00003 040


(la coma es por defecto)
$
Signo de dólar
099999$
03040
003040$
L
Moneda local
L099999
03040
GBP003040 si

el nls_currency es puesto a GBP


MI
Posición de signo menos
99999MI
3040
3040

para negativas

PR
Negativas de abrigo en
99999PR
3040
<3040>

paréntesis

EEEE
Nota científica
99.99999EEEE
121.976
1.21976E+02
U
nls_dual_currency
U099999
03040
CAD003040 si nls_dual_

el dinero es puesto al diseño asistido por comandoador


V
Se multiplica por 10n tiempos
9999V99
3040
304000

(n es el número de

nines después V)
S
+ o - el signo es prefijado
S999999
3040
+3040

La pregunta en la Figura 5-2 recupera el JOB_TITLE y columnas MAX_SALARY


de la comando de JOBS para las filas con la palabra "presidente" en la columna
JOB_TITLE. MAX_SALARY ha sido formateado adelante para tener un símbolo
monetario de dólar, una coma miles de separador, y una coma decimal. Cuando una
máscara de formato es más pequeña que el número convertido, como ilustrado en el
cuarto artículo en la lista SENTENCIA, una serie de símbolos de picadillo es devuelta
en cambio. Cuando una máscara de formato contiene menos componentes fraccionarios
que el número, doblan primero sobre ello al número de sitios decimales en la máscara
de formato antes de ser convertidos.
Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE
235

LA FIGURA 5-2 TO_CHAR funcionan con números

Convertir números en carácteres es una manera confiable de asegurar que las


funciones y la sintaxis SQL general, que espera el ingreso de carácter, no
devuelven errores cuando los números son encontrados. Convertir números en
cadenas de caracteres es común cuando los datos numéricos deben ser
formateados para relatar objetivos. Las máscaras de formato que apoyan el
dinero, miles de separadores, y separadores de coma decimal son con frecuencia
usadas presentando datos financieros.

Convertiendo Fechas a Carácteres Usando la Función de


TO_CHAR Usted puede aprovechar una variedad de modelos de formato para convertir
artículos de FECHA en casi cualquier representación de carácter de una fecha usando
TO_CHAR. Su sintaxis es como sigue:
TO_CHAR (date1, [formato], [nls_parameter]), Sólo el parámetro date1 es obligatorio
y debe tomar la forma de un valor
esto puede ser implícitamente convertido a una fecha. El parámetro de formato opcional
es el instancia sensible y debe ser encerrado en citas solas. La máscara de formato
especifica qué elementos de fecha son extraídos y si el elemento debería ser descrito por
un largo o un nombre abreviado. Los nombres de días y meses son automáticamente
rellenados
236
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

con espacios. Éstos pueden ser borrados usando un modificador para la máscara de
formato llamada el modo llenar (de) el operador. Prefijando el modelo de formato con
las cartas de, el Oracle es instruido de recortar todos los espacios de los nombres de días
y meses. Hay muchas opciones de formateo para fechas convertidas en carácteres,
algunos de los cuales son puestos en una lista en la Tabla 5-4.
Considere las tres preguntas siguientes:
La consulta 1: seleccione to_char (sysdate) ||' es hoy ''s la fecha'
del dual;
La consulta 2: seleccione to_char (sysdate, 'Mes') || 'es un tiempo
especial' del dual; la Consulta 3: seleccione to_char (sysdate,
'fmMonth') || 'es un tiempo especial' del dual;
Si la fecha de sistema actual es 03/JAN/09 y el formato de visualización por defecto
es
DD/MON/RR, entonces la consulta 1 vuelve la cadena de caracteres '03/JAN/09 es la
fecha de hoy'. Hay dos componentes notables en la consulta 2. En primer lugar, sólo el
componente de mes de la fecha de sistema actual es extraído para la conversión a un
tipo de carácter. En segundo lugar,

TABLA 5-4

Máscaras de Formato de fecha durante Días, Meses, y Años

Elemento de formato YYY YYY YYYY RR AÑO

MM MES DE MON DDD DDD DY DÍA


El último dígito de la descripción del año dos Últimos dígitos del año tres Últimos dígitos del año año De cuatro
dígitos año De dos dígitos (ver el Capítulo 3 para detalles) la ortografía inglesa sensible al Instancia del año

Mes de dos dígitos abreviatura De tres cartas de mes ortografía inglesa sensible al Instancia de Día de mes de la
semana día De dos dígitos de Día de mes del año abreviatura De tres cartas de día ortografía inglesa sensible al Instancia
de día

Resultado 575975 1975 75 DIECINUEVE SETENTA Y CINCO el 06 de junio JUNIO 202153 LUNES MON
Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE
237

ya que la máscara de formato es el instancia sensible y 'el Mes' aparece en el instancia


de título, la cuerda volvió es 'enero es un tiempo especial'. No hay ninguna necesidad de
añadir que un espacio delante del literal 'es un tiempo especial' ya que la función de
TO_CHAR automáticamente rellena el nombre del mes con un espacio. Si la máscara
de formato en la consulta 2 fuera 'el MES', la cuerda volvió sería 'ENERO es un tiempo
especial'. El del modificador es aplicado a la consulta 3, y la cuerda consiguiente es 'enero
es un tiempo especial'. La nota allí no es ningún espacio entre enero y el literal 'es un
tiempo especial'. En la Tabla 5-4, suliste que los elementos funcionen en la fecha 02-
JUN-1975 y el año corriente es 2009.
Los elementos de formato de fecha que pertenecen a semanas, cuartos, siglos, y otras
máscaras de formato menos comúnmente usadas son puestos en una lista en la Tabla 5-5.
La columna de resultado es obtenida evaluando la función de TO_CHAR usando la
fecha 24-SEP-1000 A.C., con la máscara de formato de la columna de elemento de
formato en la comando.
El componente de tiempo de un tipo de datos de tiempo de fecha es extraído usando
los modelos de formato en la Tabla 5-6. El resultado es obtenido evaluando la función
de TO_CHAR usando la fecha incluso su componente de tiempo 27-JUN-2010
21:35:13, con la máscara de formato en la columna de elemento de formato en la Tabla
5-6.

TABLA 5-5

Máscaras de Formato de Fecha Menos comúnmente Usadas

WWW de Elemento de formato QCC S CENTÍMETROS CÚBICOS precedentes, YYYY, o AÑO IYYY, IYY, IY, yo

A.C., d. C., a. de J.C. y d.J.C. J


IW

RM

La Semana de descripción de la Semana de mes del año Cuarto del Siglo de año Si la fecha es A.C., un menos es
prefijada para resultar fechas de organización internacional para la normalización de cuatro, tres, dos, y un dígito,
respectivamente A.C. o d. C. y período espaciado a. de J.C. o d.J.C días del día de Julian desde el 31 de diciembre 4713
A.C. semana de estándar de organización internacional para la normalización (1 a 53) mes de número romano

Resultado 439310 - 10,-1000 o - MIL

1000, 000, 00, 0

A.C.

1356075

39

IX
238
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

TABLA 5-6

Máscara de Formato de fecha para Componentes de Tiempo

Elemento de formato de la mañana, de la tarde, de la mañana y de la TARDE. HH, HH12 y HH24 MI SS SSSSS

Hora de indicadores Meridian de descripción de día, 1-12 horas, y Minuto de 0-23 horas (0-59) Segundo (0-59)
Segundos la medianoche pasada (0-86399)

Resultado de la tarde 09, 09, 21 35 13 77713

Varios otros elementos que pueden ser usados en modelos de formato de tiempo de
fecha son resumidos en la Tabla 5-7. Los signos de puntuación son usados para separar
elementos de formato. Tres tipos de sufijos existen para formatear componentes de
elementos tiempo de fecha. Además, los literales de carácter pueden ser incluidos en mo
de formato de fecha del si ellos son encerrados en dobles comillas. Los resultados en la
Tabla 5-7 son obtenidos aplicando la función de TO_CHAR usando la fecha 12/SEP/08
14:31 con las máscaras de formato puestas en una lista en la descripción y formatean la
columna de máscara.
La comando JOB_HISTORY guarda la pista de JOBS ocupados por EMPLOYEES
en la compañía. La pregunta en la Figura 5-3 recupera una oración descriptiva sobre la
fecha que sale de cada empleado basado en su END_DATE, EMPLOYEE_ID, y espacios
de JOB_ID. Una expresión de carácter es concadenada a una llamada a la función
TO_CHAR con un modelo de formato de: 'fmDay "el "ddth "de" Mes YYYY'. El del
modificador es usado para recortar espacios en blanco que arrastran los nombres de los
días más cortos y meses más cortos. Los dos literales de carácter encerrados en dobles
comillas son las palabras: el y "de". El modelo de formato 'de th' es aplicado al
elemento de fecha 'dd' para crear un ordinal

TABLA 5-7

Máscaras de Formato de Fecha diversas

¡Elemento de formato -/.,?#! "cualquier carácter literal"

TH

SP

THSP o SPTH

Descripción y Signos de puntuación de Máscara de Formato: literales de Carácter 'de MM.YY': '"semana" W
"de" Mes' texto Posicional u ordinal: 'DDth "de" Mes' número Explicado detalladamente: 'Mes de MmSP Yyyysp'
Explicado detalladamente posicional o número ordinal: 'hh24SpTh'

Resultado 09.08 Semana el 2 de septiembre

El 12 de septiembre

El nueve de septiembre Dos mil ocho Catorce


Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE
239

LA FIGURA 5-3 TO_CHAR funcionan con fechas


día tal como el 17mo o 31er. El modelo de formato 'de Mes' muestra el nombre
completo del elemento de mes de la columna END_DATE en el instancia de título.
Finalmente, la máscara de formato de YYYY recupera el componente de año de 4
dígitos.

EJERCICIO 5-1 Fechas que Converten en Carácteres Usando la Función de


TO_CHAR
Se requiere que usted recupere una lista de FIRST_NAME y valores de LAST_NAME y un
la expresión basada en la columna HIRE_DATE para EMPLOYEES alquilada un sábado.
La expresión debe ser aliased como START_DATE y un valor HIRE_DATE de 17-FEB-
1996 debe devolver la cuerda siguiente:
El sábado, 17 de febrero, Mil novecientos noventa y seis.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. El DONDE la


cláusula es
DONDE TO_CHAR (HIRE_DATE, 'fmDay') = 'el sábado'
240
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

El del modificador es necesario para borrar el rastreo de impresos ya que una comparación con un
carácter literal es realizada y se requiere un partido exacto.
3. La expresión START_DATE es
TO_CHAR (HIRE_DATE, 'fmDay, "el "ddth "de" Mes, Yyyysp.') La máscara de formato de año lo
causa ser explicada detalladamente en el instancia de título.
4. La cláusula SENTENCIA es por lo tanto
SELECCIONE FIRST_NAME, LAST_NAME, TO_CHAR (HIRE_DATE, 'fmDay, "el "ddth "de"
Mes, Yyyysp.') START_DATE
5. El DE la cláusula es
DE EMPLOYEES 6. La ejecución de esta select devuelve los nombres de los EMPLOYEES y el
START_DATE
expresión como mostrado en la ilustración siguiente abajo:
Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE
241

Convertiendo Carácteres a Fechas Usando la Función de TO_DATE La función de


TO_DATE devuelve un artículo de la FECHA de tipo. Las cadenas de caracteres convertidas a fechas
pueden contener todos o sólo un subconjunto de los elementos tiempo de fecha que comprenden una
FECHA. Cuando las cuerdas con sólo un subconjunto de los elementos tiempo de fecha son convertidas,
el Oracle proporciona valores por defecto para construir una fecha completa. Los componentes de cadenas
de caracteres tienen que ver con elementos tiempo de fecha diferentes usando un modelo de formato o
máscara. La sintaxis es como sigue:
TO_DATE (string1, [formato], [nls_parameter]), Sólo el parámetro string1 es obligatorio y si ninguna
máscara de formato es suministrada, string1
debe tomar la forma de un valor que puede ser implícitamente convertido en una fecha. El parámetro de
formato opcional siempre es casi usado y es especificado en comillas solas. Las máscaras de formato son
idénticas a los puestos en una lista en las Tablas 5-4, 5-5, y 5-6. La función de TO_DATE tiene un
modificador fx que es similar a del usado con la función de TO_CHAR. el fx especifica un partido exacto
para string1 y la máscara de formato. Cuando el modificador fx es especificado, los artículos de carácter
que no emparejan exactamente la máscara de formato ceden un error. Considere las cinco preguntas
siguientes:
La consulta 1: seleccione to_date ('25-DEC-2010') del dual;
La consulta 2: seleccione to_date ('el 25 de diciembre') del dual; la Consulta 3:
seleccione to_date ('el 25 de diciembre', 'DD-MON') del dual; la Consulta 4:
seleccione to_date ('25-DEC-2010 18:03:45', 'DD-MON-YYYY HH24:MI:SS') del dual; la
Consulta 5: seleccione to_date ('25-DEC-10', 'fxDD-MON-YYYY') del dual;
La consulta 1 evalúa la cuerda 25-DEC-2010 y tiene la información suficiente a
implícitamente convértalo en un artículo de FECHA con una máscara por defecto de DD-MON-YYYY.
El separador de guión podría ser substituido con otro carácter de puntuación. Ya que ningunos
componentes de tiempo son proporcionados, el tiempo para esta fecha convertida es puesto a la
medianoche o 0:00:00. La consulta 2 no puede convertir implícitamente la cuerda en una fecha porque
hay información insuficiente y "ORA-01840: el valor de ingreso no es el bastante mucho tiempo para el
error" de formato de fecha es devuelto. Suministrando una máscara de formato DD-MON a la cuerda el 25
de diciembre en la consulta 3, el Oracle puede emparejar el número 25 a DD y el mes abreviado llaman
DICIEMBRE al componente MON. El año y los componentes de tiempo son ausentes, entonces el año
corriente devuelto por la función de SYSDATE es usado y el tiempo es puesto a la medianoche. Si el año
corriente es 2009, la consulta 3 devuelve la fecha 25/DEC/09 0:00:00. La consulta 4 realiza una
conversión completa de una cuerda con todos los elementos tiempo de fecha presentes, y ningunos
valores por defecto son suministrados por el Oracle. La consulta 5 usa el modificador fx en su máscara de
formato. Ya que el componente de año de la cuerda es 10 y la máscara de formato correspondiente es
YYYY, los resultados de modificador fx en "ORA-01862: el valor numérico no empareja la longitud del
error" de artículo de formato devuelto.
242
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-4 La función de TO_DATE

La función de TO_DATE es usada en el DONDE la cláusula en la Figura 5-4 para


limitar las filas volvió para aquellos EMPLOYEES contratados después del 12 de enero
de 2000. La máscara de formato empareja 01 al MM, 12 a DD y 2000 a YYYY.

Convertiendo Carácteres a Números Usando la Función de


TO_NUMBER La función de TO_NUMBER devuelve un artículo del NÚMERO de
tipo. Las cadenas de caracteres convertidas en números deben ser apropiadamente
formateadas de modo que cualquier componente no numérico sea traducido o quitado
con una máscara de formato apropiada. La sintaxis es como sigue:
TO_NUMBER (string1, [formato], [nls_parameter]),
Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE

GUIÓN & SOLUCIÓN


243
Su tarea es extraer la parte de mes y día de una columna de fecha y compararla con los componentes
correspondientes de la fecha de sistema actual. ¿Puede tal comparación ser realizada?
Sí. La función de TO_CHAR usada en un artículo de fecha con una máscara de formato como 'DD-MON' hace
que el componente de mes y día sea aislado. Este valor puede ser comparado con la fecha de sistema actual
usando la expresión siguiente: TO_CHAR (SYSDATE, 'DD-MON')
Se requiere un informe de ganancias y pérdidas con los resultados mostrados como sigue: si la cantidad es
negativa, debe ser encerrada en corchetes angulares. La cantidad debe ser mostrada con un signo de dólar
principal. ¿Pueden los resultados ser recuperados en el formato especificado?
Sí. La cantidad numérica debe ser convertida en una cadena de caracteres usando la función de TO_CHAR con
una máscara de formato que lo encierra en corchetes angulares si es negativo y precede a ello con un signo de
dólar. La llamada a la función siguiente recupera los resultados en el formato requerido: TO_CHAR
(CANTIDAD, 'PR de 999999$')
Le piden introducir datos de empleado pasados en la comando JOB_HISTORY de una fuente basada en el papel,
pero la información de fecha de inicio sólo está disponible como el año que el empleado comenzó. ¿Puede esto
valorar ser convertido en el primero de enero del año?
Sí. Considere la llamada a la función de conversión FECHA de TO_ ('2000', 'YYYY') para un empleado que
comenzó en el año 2000. Si esta fecha es extraída como sigue, la cadena de caracteres el 01/01/2000 es devuelta
TO_CHAR (TO_DATE ('2000', 'YYYY'), 'MM/DD/YYYY')

Sólo el parámetro string1 es obligatorio y si ninguna máscara de formato es


suministrada, debe ser un valor que puede ser implícitamente convertido en un número.
El parámetro de formato opcional es especificado en comillas solas. Las máscaras de
formato son idénticas a los puestos en una lista en la Tabla 5-3. Considere las dos
preguntas siguientes:
La consulta 1: seleccione el to_number ('1.000,55$') del dual;
La consulta 2: seleccione to_number ('1.000,55$', '999.999,99$') del
dual;
La consulta 1 no puede realizar una conversión implícita a un número debido al dólar
signo, coma, y período y vueltas el error, "ORA-1722: número inválido." La consulta 2
empareja el símbolo de dólar, coma, y período de la cuerda a la máscara de formato y,
aunque la anchura numérica sea más grande que la anchura de cuerda, el número
1000.55 es devuelto.
La figura 5-5 muestra como la función de SUBSTR era usada primero para extraer los
ocho últimos carácteres de la columna de carácter PHONE_NUMBER. El
TO_NUMBER
244
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-5 La función de TO_NUMBER


la función era usada entonces para convertir estos ocho carácteres, incluso una coma
decimal, en un número que fue multiplicado por 10000, para EMPLOYEES que
pertenecen a DEPARTMENT_ID 30.

Lea las preguntas de examen muy con cuidado. La función de TO_NUMBER


converte artículos de carácter en números. Si usted converte un número usando una máscara
de formato más corta, un error es devuelto. Si usted converte un número basado en un formato
más largo

máscara, el número original es devuelto. Procure no confundir conversiones TO_NUMBER con


TO_CHAR. Por ejemplo, TO_NUMBER (123.56, '999.9') devuelve un error, mientras TO_CHAR
(123.56, '999.9') vuelve 123.6.
Aplique Expresiones Condicionales en una Select SENTENCIA
245

OBJETIVO DE CERTIFICACIÓN 5.03

Aplique Expresiones Condicionales en una Select


SENTENCIA
Las funciones anidadas fueron introducidas en el Capítulo 4, pero una discusión formal de
este concepto
es proporcionado en esta sección. Dos nuevas categorías de funciones también son
introducidas. Éstos incluyen las funciones generales, que proporcionan la lenguaje a tratar
con eficacia con valores NULOS, y las funciones condicionales, que apoyan la lógica
condicional en expresiones. Este objetivo de certificación cubre las áreas siguientes:
■ Anidó funciones ■ funciones Generales ■ funciones Condicionales

Funciones anidadas
Las funciones anidadas usan salida de una función como el ingreso al otro. Funciones
siempre devuelva exactamente un resultado. Por lo tanto, usted puede considerar de
fuentes fidedignas una llamada a la función del mismo modo ya que usted iba un valor
literal, cuando parámetros de ingreso de suministro a una función. Las funciones de fila
solas pueden ser anidadas a cualquier nivel de la profundidad. La forma general de una
función es como sigue:
Function1 (parámetro 1, parameter2, ) = result1 Substitución de llamadas a la
función como parámetros a otras funciones puede llevar un
expresión, como lo siguiente:
F1 (param1.1, F2 (param2.1, param2.2, F3 (param3.1)), param1.3) Anidó las
funciones son evaluadas primero antes de que sus valores de retorno sean usados como
paramétricos
ingreso a otras funciones. Ellos son evaluados del íntimo a los niveles más extremos.
La expresión precedente es evaluada como sigue:

1. El F3 (param3.1) es evaluado y su valor de retorno proporciona el tercer


parámetro
funcionar F2 y puede ser llamado: param2.3.
2. F2 (param2.1, param2.2, param2.3) es evaluado y su valor de retorno provee
el segundo parámetro para funcionar F1 y es param1.2.
246
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

3. F1 (param1.1, param1.2, param1.3) es evaluado y el resultado es devuelto a


el programa de vocación.

Se dice que la función F3 es anidada tres niveles profundamente en este ejemplo. Considere el
pregunta siguiente:
longitud sentencia (to_char (to_date ('28/10/09', 'DD/MM/RR'), 'fmMonth')) de
dual;

Hay tres funciones en la lista SENTENCIA que, del interior a niveles externos,
son TO_DATE, TO_CHAR y LONGITUD. La pregunta es evaluada como sigue:

1. La función íntima es evaluada primero. TO_DATE ('28/10/09', 'DD/MM/RR')


converte la cadena de caracteres el 28/10/09 en la FECHA valoran 28-OCT-2009.
La máscara de formato de RR es usada para la parte de año. Por lo tanto, el
componente de siglo volvió es el siglo corriente (el veintiuno), ya que el
componente de año está entre 0 y 49.
2. La segunda función íntima es evaluada después. TO_CHAR ('28-OCT-2009',
'el fmMonth') converte la fecha dada basada en la máscara de formato de Mes y
devuelve el octubre de cadena de caracteres. El del modificador recorta el
rastreo de espacios en blanco del nombre del mes.
3. Finalmente, la LONGITUD ('octubre') función es evaluada y las vueltas de
pregunta
el número 7.

GUIÓN & SOLUCIÓN


¿Son anidados funciones evaluadas del nivel más extremo al nivel íntimo?
No. Las funciones anidadas son resueltas del nivel anidado íntimo que se mueve externo.
¿Deben todas las funciones en una expresión anidada devolver el mismo tipo de datos?
No. Los tipos de datos de los parámetros de funciones anidadas pueden ser diferentes el uno del otro. Es
importante asegurar que los tipos de datos correctos siempre son suministrados a funciones para evitar errores.
¿Hay una manera más simple de mostrar la información de SUELDO de la comando de EMPLOYEES en la
forma 13.000$ sin usar la select siguiente? SELECCIONE 'el $' || SUBSTR (SUELDO, 1, MOD (LONGITUD
(SUELDO), 3)) || ',' || SUBSTR (SUELDO, MOD (LONGITUD (SUELDO), 3) +1)
Sí. Una solución simple y elegante es usar la función de TO_CHAR con 'G999 de 99$' TO_CHAR escogido de
la máscara de formato (SUELDO, 'G999 de 99$') DE EMPLOYEES;

Funciones generales
Aplique Expresiones Condicionales en una Select SENTENCIA
247
Las funciones generales simplifican el funcionamiento con columnas que
potencialmente contienen valores nulos. Estas funciones aceptan parámetros de ingreso
de todos los tipos de datos. Los servicios que ellos ofrecen son relevantes principalmente
para valores nulos.
Las funciones examinadas en las siguientes secciones incluyen la función de NVL,
que proporciona un valor alternativo para usar si se encuentra un nulo. La función de
NVL2 realiza una evaluación condicional de su primer parámetro y devuelve un valor si
un nulo es encontrado y una alternativa si el parámetro no es nulo. La función de
NULLIF compara dos términos y devuelve un resultado nulo si ellos son iguales, por
otra parte devuelve el primer término. La función FUNDIR acepta un número ilimitado
de parámetros y devuelve el primer parámetro no nulo más esto vuelve nulo.

La Función de NVL que La función de NVL evalúa si una columna o la


expresión de cualquier tipo de datos son nulas o no. Si el término es nulo, una
alternativa no el valor nulo es devuelto; por otra parte, el término inicial es devuelto.
La función de NVL toma dos parámetros obligatorios. Su sintaxis es NVL (original,
ifnull), donde original representa el término probado e ifnull es el resultado devuelto si el
término original evalúa al nulo. Los tipos de datos de los parámetros originales e ifnull
siempre deben ser compatibles. Ellos deben ser o del mismo tipo, o debe ser posible
convertir implícitamente ifnull al tipo del parámetro original. La función de NVL
devuelve un valor con el mismo tipo de datos que el parámetro original. Considere las
tres preguntas siguientes:
La consulta 1: seleccione nvl (1234) del dual;
La consulta 2: seleccione nvl (nulo, 1234) del dual; la Consulta 3:
no seleccione nvl (substr ('abecé', 4), 'Ningunos exists' de
subcuerda) del dual;
Ya que la función de NVL toma dos parámetros obligatorios, la consulta 1 vuelve el
error, "ORA-00909: número inválido de argumentos." Las vueltas de consulta 2 1234
después de la palabra clave nula son probadas y encontradas ser nulas. La consulta 3
implica una función de SUBSTR anidada que intenta extraer el cuarto carácter de una 3
cadena de caracteres. Las vueltas de función interiores nulas, dejando el NVL (nulo,
'Ningunos exists' de subcuerda) funcionan para ejecutar, que entonces no devuelve la
cuerda 'Ningunos exists' de subcuerda.
La figura 5-6 muestra dos preguntas casi idénticas. Ambas preguntas seleccionan filas
donde el LAST_NAME comienza con la carta E. El LAST_NAME, el SUELDO, y las
columnas COMMISSION_PCT también son seleccionados. La diferencia entre las
preguntas está en la expresión deliberada aliased como MONTHLY_COMMISSION.
Debido al NVL
248
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-6 La función de NVL

función en la primera pregunta, los resultados numéricos son devueltos. La segunda


pregunta devuelve algunos valores nulos y un artículo numérico aunque 1000 sea añadido
a cada fila.

Es atractivo zambullirse en y construir una expresión compleja que comprende a


muchos anidó llamadas a la función, pero este enfoque evoluciona con práctica y
experiencia. Conceptúe una solución de una pregunta y divídalo abajo en las
llamadas a la función componentes. La comando DUAL es útil para pruebas
lógicas ad hoc y depuración de llamadas a la función separadas. No tenga miedo
de ejecutar preguntas tan muchas veces como usted desea perfeccionar los
componentes antes de ensamblarlos en componentes cada vez más más grandes.
Pruebe y depure de éstos hasta que la expresión final sea formada.

La Función de NVL2 La función de NVL2 proporciona un realce a NVL, pero


sirve un objetivo muy similar. Esto evalúa si una columna o la expresión de cualquier tipo
de datos son nulas o no.
Aplique Expresiones Condicionales en una Select SENTENCIA
249

Si el primer término no es nulo, el segundo parámetro es devuelto, más el tercer parámetro es devuelto.
Recuerde que la función de NVL es diferente ya que devuelve el término original si no es nulo.
La función de NVL2 toma tres parámetros obligatorios. Su sintaxis es NVL2 (original, ifnotnull, ifnull),
donde original representa el término probado. Ifnotnull es devuelto de ser original no es nulo, e ifnull es
devuelto de ser original es nulo. Los tipos de datos del ifnotnull y parámetros ifnull deben ser compatibles,
y ellos no pueden ser del tipo MUCHO TIEMPO. Ellos deben ser o del mismo tipo, o debe ser posible
convertir ifnull al tipo del parámetro ifnotnull. El tipo de datos devuelto por la función de NVL2 es el
mismo como aquel del parámetro ifnotnull. Considere las tres preguntas siguientes:
La consulta 1: seleccione nvl2 (1234,1, 'una cuerda') del dual; la Consulta 2: seleccione
nvl2 (nulo, 1234,5678) del dual; la Consulta 3: no seleccione nvl2 (substr ('abecé', 2), 'No
bc', 'Ninguna subcuerda') del dual;

El término de ifnotnull en la consulta 1 es un número y el parámetro ifnull es 'una cuerda'.


Ya que hay una incompatibilidad de tipo de datos entre ellos, "ORA-01722: el número inválido" error es
devuelto. La consulta 2 devuelve el parámetro ifnull, que es 5678. La consulta 3 extrae los carácteres "bc"
utilización de la función de SUBSTR y el NVL2 ('bc', No bc', 'Ninguna Subcuerda') la función es
evaluada. El parámetro ifnotnull, la cuerda 'No bc', es devuelto.
Los espectáculos de figura 5-7 como la función de NVL2 es usada para proveer el texto descriptivo
que clasifica a EMPLOYEES con valores de LAST_NAME que comienzan con "F" en la comisión y no
encargar a asalariados basados en el nullable COMMISSION_PCT columna.

La Función de NULLIF La función de NULLIF prueba dos términos de la igualdad. Si ellos son
iguales la función devuelve un nulo, más devuelve el primer de los dos términos probados.
La función de NULLIF toma dos parámetros obligatorios de cualquier tipo de datos. La sintaxis es
NULLIF (ifunequal, comparison_term), donde los parámetros ifunequal y comparison_term son
comparados. Si ellos son idénticos, entonces NULO es devuelto. Si ellos se diferencian, el parámetro
ifunequal es devuelto. Considere las tres preguntas siguientes:
La consulta 1: seleccione nullif (1234,1234) del dual;
La consulta 2: seleccione nullif (1234,123+1) del dual; la Consulta 3: seleccione
nullif ('24-JUL-2009', '24-JUL-09') del dual;
La consulta 1 devuelve un valor nulo ya que los parámetros son idénticos. La aritmética
la ecuación en la consulta 2 no es implícitamente evaluada, y la función de NULLIF encuentra
250
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-7 La función de NVL2

1234 diferente de 123+1, entonces esto devuelve el parámetro ifunequal, que es 1234.
Los literales de carácter en la consulta 3 no son implícitamente convertidos PARA
fechar artículos y son comparados como dos cadenas de caracteres por la función de
NULLIF. Ya que las cuerdas son de longitudes diferentes, el parámetro ifunequal 24-
JUL-2009 es devuelto.
La figura 5-8 muestra como NULLIF es anidado como un parámetro a la función de
NVL2. La función de NULLIF sí mismo tiene el SUBSTR y funciones de carácter
SUPERIORES empotradas en la expresión usada como su parámetro ifunequal. La
columna de E-MAIL es comparado con una expresión, formada concadenando el primer
carácter del FIRST_NAME al equivalente mayúsculo de la columna LAST_NAME,
para EMPLOYEES con 4 carácter nombres largos. Cuando estos términos son iguales,
NULLIF devuelve un nulo, más devuelve el parámetro ifunequal evaluado. Esto es usado
como un parámetro a NVL2. La función de NVL2 proporciona el texto descriptivo que
clasifica filas como emparejando el modelo o no.
Aplique Expresiones Condicionales en una Select SENTENCIA
251
LA FIGURA 5-8 La función de NULLIF

EJERZA 5-2 Utilización NULLIF y NVL2 para Lógica Condicional Simple


Se requiere que usted devuelva un SET de filas de la comando de EMPLOYEES con
Valores de DEPARTMENT_ID de 100. El SET también debe contener FIRST_NAME
y valores de LAST_NAME y una expresión aliased como NAME_LENGTHS. Esta
expresión debe devolver la cuerda 'Longitud Diferente' si la longitud del FIRST_NAME
se diferencia de aquel de los LAST_NAME, más la cuerda 'Misma Longitud' debe ser
devuelta.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La expresión


NAME_LENGTHS puede ser calculada de varios modos. El
la solución proporcionó usos la función de NULLIF para probar si los valores
de LONGITUD volvieron para el FIRST_NAME y las columnas LAST_NAME
son
252
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

el mismo. Si ellos son, NULO es devuelto, más la LONGITUD del LAST_NAME es devuelta. Si la
función externa (NVL2) consigue un parámetro NULO, la cuerda 'Misma Longitud' es devuelta, más
la cuerda 'Longitud Diferente' es devuelta.
3. La cláusula SENTENCIA es por lo tanto
SELECCIONE FIRST_NAME, LAST_NAME, NVL2 (NULLIF (LONGITUD (NOMBRE de
LAST_), LONGITUD (FIRST_NAME)), 'Longitud Diferente', 'Misma Longitud')
NAME_LENGTHS
4. El DE la cláusula es
DE EMPLOYEES 5. El DONDE cláusula es
DONDE DEPARTMENT_ID=100 6. La ejecución de esta select devuelve los nombres de los
EMPLOYEES y el NAME_LENGTHS
expresión como mostrado en la ilustración siguiente:
Aplique Expresiones Condicionales en una Select SENTENCIA
253

La Función FUNDIR La función FUNDIR devuelve el primer valor no nulo de su


lista de parámetro. Si todos sus parámetros son nulos, entonces nulo es devuelto.
La función FUNDIR toma dos parámetros obligatorios y cualquier número de
parámetros opcionales. La sintaxis es SE FUNDEN (expr1, expr2, , exprn), donde expr1 es
devuelto si no es nulo, más expr2 si no es nulo, etcétera. FÚNDASE es una forma general
de la función de NVL, ya que las dos ecuaciones siguientes ilustran:
FÚNDASE (expr1, expr2) = NVL (expr1, expr2) SE FUNDEN (expr1, expr2, expr3) =
NVL (expr1, NVL (expr2, expr3)) El tipo de datos SE FUNDE vueltas si un no el
valor nulo es encontrado es el mismo como esto
del primer no parámetro nulo. Evitar "ORA-00932: tipos de datos inconsecuentes" error,
todos no los parámetros nulos deben tener tipos de datos compatibles con el primer no
parámetro nulo. Considere las tres preguntas siguientes:
La consulta 1: escogido se funden (nulo, nulo, nulo, 'una cuerda') del dual; la
Consulta 2: escogido se funden (nulo, nulo, nulo) del dual; la Consulta 3: escogido no
se funden (substr ('abecé', 4), 'No bc', 'Ninguna subcuerda') del dual;

La consulta 1 devuelve el cuarto parámetro: una cuerda, ya que esto es el primero no


nulo
el parámetro encontrado. La consulta 2 vuelve nulo porque todos sus parámetros son
nulos. La consulta 3 evalúa su primer parámetro, que es una función de SUBSTR anidada,
y lo encuentra siendo nulo. El segundo parámetro no es nulo entonces la cuerda 'No bc' es
devuelta.
El STATE_PROVINCE, POSTAL_CODE, y la información de CIUDAD fueron
recuperados de la comando de LOCATIONS para las filas con valores COUNTRY_ID del
Reino Unido, ESTO, o JP. Como la Figura 5-9 muestra, la función FUNDIR devuelve el
valor de STATE_PROVINCE para una fila si no es nulo. Si es nulo el valor de
POSTAL_CODE es devuelto. Si es nulo, el espacio de CIUDAD es devuelto, más el
resultado es nulo.

Los parámetros de la función general NVL2 puede ser confuso si usted es


familiar ya con NVL. NVL (original, ifnull) vueltas originales si no es nulo, más ifnull es
devuelto. El NVL2 (original, ifnotnull, ifnull) la función vuelve ifnotnull de ser original no es
nulo,

más el ifnull es devuelto. La confusión puede levantarse porque el segundo parámetro en la


función de NVL es ifnull, mientras el segundo parámetro en la función de NVL2 es ifnotnull.
Esté consciente al sentido de las LOCATIONS de parámetro en funciones.
254
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

LA FIGURA 5-9 La función FUNDIR

Funciones condicionales
La lógica condicional, también lógica conocida "como si entonces más", se refiere a la
elección de un paso de
ejecución basada en valores de datos que encuentran ciertas condiciones. Las funciones
condicionales, como DECODIFICAN y la expresión de INSTANCIA, devuelven
valores diferentes basados en la evaluación de condiciones de comparación. Estas
condiciones son especificadas como parámetros a la función DECODIFICAR y la
expresión de INSTANCIA. La función DECODIFICAR es específica para el Oracle,
mientras la expresión de INSTANCIA es ANSI SQL dócil. Un ejemplo de lógica "si
entonces más" es: si el valor de país es Brasil o Australia, entonces devuelva el
Hemisferio del sur, más devuelva el Hemisferio norte.
La Función DECODIFICAR Aunque su nombre parezca misterioso, esta función
es franca. La función DECODIFICAR pone en práctica "si entonces más" lógica
condicional probando sus dos primeros términos de igualdad y vueltas el tercer si ellos
son iguales y opcionalmente devuelven otro término si ellos no son.
Aplique Expresiones Condicionales en una Select SENTENCIA
255

La función DECODIFICAR toma al menos tres parámetros obligatorios, pero puede tomar muchos
más. La sintaxis de la función es DECODIFICAN (expr1, comp1, iftrue1, [comp2, iftrue2... [compN,
iftrueN]], [iffalse]). Estos parámetros son evaluados como mostrado en el ejemplo de pseudocódigo
siguiente:
Si expr1 = comp1 entonces devuelven iftrue1
más si expr1 = comp2 entonces devuelven iftrue2
...... más si expr1 = compN entonces devuelven iftrueN
más vuelva nulo | iffalse;

Expr1 es comparado con comp1. Si ellos son iguales, entonces iftrue1 es devuelto. Si expr1 no es igual a
comp1, entonces lo que pasa después depende de si los parámetros opcionales comp2 e iftrue2 están
presentes. Si ellos son, entonces expr1 es comparado con comp2. Si ellos son iguales, entonces iftrue2 es
devuelto. Si no, lo que pasa después depende de si adelante compn, iftruen pares existen, y el ciclo sigue
hasta que ningunos términos de comparación permanezcan. Si ningunos partidos han sido encontrados y si
el parámetro iffalse es definido, entonces iffalse es devuelto. Si el parámetro iffalse no existe y ningunos
partidos son encontrados, un valor nulo es devuelto.
Todos los parámetros a la función DECODIFICAR pueden ser expresiones. El tipo de datos de vuelta
es el mismo como aquel del primer artículo de comparación correspondiente. La expresión expr1 es
implícitamente convertida al tipo de datos del primer parámetro de comparación comp1. Como los otros
parámetros de comparación los comp2compn son evaluados, ellos también son implícitamente convertidos al
mismo tipo de datos que comp1. Decodifique piensa que dos nulls son equivalentes, tan si expr1 es nulo y
comp3 es el primer parámetro de comparación nulo encontrado, entonces el parámetro de resultado
correspondiente iftrue3 es devuelto. Considere las tres preguntas siguientes:
La consulta 1: escogido decodifican (1234 123, '123 es un partido') del dual; la Consulta 2:
escogido decodifican (1234 123, '123 no es un partido', 'Ningún partido') del dual; la
Consulta 3: escogido decodifican ('búsqueda', 'comp1', 'true1', 'comp2', 'true2', 'busque',
'true3', substr ('2search', 2,6)), 'true4', 'falso') del dual;

La consulta 1 compara el número 1234 con el primer término de comparación 123. Ya que ellos
no son iguales, el primer término de resultado no puede ser devuelto. Adelante, como no hay ninguna
falta iffalse el parámetro definido, un nulo es devuelto. La consulta 2 es idéntica al primer salvo que un
parámetro iffalse es definido. Por lo tanto, desde 1234 no es igual a 123, la cuerda 'Ningún partido' es
devuelta. La consulta 3 averigua los parámetros de comparación para un partido. El carácter llama 'comp1' y
'comp2' no son iguales a la búsqueda, entonces el
256
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales
los resultados true1 y true2 no son devueltos. Un partido es encontrado en tercer 'comp3'
de término de comparación (parámetro 6), que contiene la búsqueda de cuerda. Por lo
tanto, el tercer término de resultado iftrue3 (parámetro 7) conteniendo la cuerda 'true3' es
devuelto. Note que ya que un partido ha sido encontrado, ninguna busca adicional ocurre.
De este modo, aunque el cuarto término de comparación (parámetro 8) también sea un
partido a expr1, esta expresión nunca es evaluada, porque un partido fue encontrado en
un término de comparación más temprano.
Los acontecimientos distintos de los valores de columna COUNTRY_ID en la
comando de LOCATIONS han sido clasificados en COUNTRIES de Hemisferio del
Norte o en del sur usando una función DECODIFICAR. La figura 5-10 muestra como la
columna COUNTRY_ID es la expresión que un partido es buscado. Si el valor de
COUNTRY_ID es Ferrocariles Británicos (Brasil) o AU (Australia), entonces la
función devuelve la cuerda Hemisferio del sur, más el Hemisferio norte es devuelto.

LA FIGURA 5-10 La función DECODIFICAR


Aplique Expresiones Condicionales en una Select SENTENCIA

DENTRO DEL EXAMEN


257

Los objetivos de certificación en este capítulo son medidos principalmente con ejemplos prácticos que
requieren que usted prediga los resultados devueltos por una expresión. Las funciones de conversión
explícitas con sus muchas máscaras de formato son probadas. La función de TO_CHAR; de modificador;
y el sp, th, y los modelos de formato de spth son comúnmente examinados. El uso de la función de
TO_CHAR para convertir números en carácteres es probado, y el hincapié a menudo es hecho en las
máscaras de formato que determinan anchura numérica, símbolo de dólar, separador de grupo, y formatos de
separador decimales.
Muchas preguntas consisten en expresiones con funciones anidadas, y es esencial para usted saber como
interpretar y remontarlos. El íntimo a la secuencia más extrema de la evaluación de funciones anidadas es
importante y debe ser recordado.
Las funciones generales NVL, NVL2, NULLIF, y SE FUNDEN todos pertenecen a

La Expresión de INSTANCIA

funcionamiento con NULO. Ya que los valores nulos son frecuentes en muchas bases de datos, se
requiere un entendimiento cuidadoso de todas estas funciones, en particular NVL y NVL2.
La función DECODIFICAR y la expresión de INSTANCIA son a veces percibidas como complejas
y difíciles de entender. Ellos son, sin embargo, dos de las funciones más simples y más útiles
garantizadas para ser examinados. Preste la atención al sentido posicional de los parámetros usando la
función DECODIFICAR. La expresión de INSTANCIA simple y buscada se diferencia de las
funciones habladas antes. Esto es debido al bloque de CASEEND, que encierra a uno o varios pares
WHENOELR y opcionalmente un MÁS select. Práctica con esta expresión y usted aprenderá
rápidamente su estructura legible y estandarizada.
Prácticamente todos los terceros y cuartos lenguajejes de programación de generación
ponen en práctica una select de instancia. Como la función DECODIFICAR, la expresión
de INSTANCIA facilita "si entonces más" lógica condicional. Hay dos variantes de la
expresión de INSTANCIA. La expresión de INSTANCIA simple pone el artículo de
búsqueda condicional en una lista una vez, y la igualdad con el artículo de búsqueda es
probada por cada expresión de comparación. La expresión de INSTANCIA buscada pone una
condición separada en una lista para cada expresión de comparación.
258
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

La expresión de INSTANCIA toma al menos tres parámetros obligatorios, pero puede tomar
muchos más. Su sintaxis depende de si un simple o una expresión de INSTANCIA
buscada son usados. La sintaxis para la expresión de INSTANCIA simple es como sigue:
INSTANCIA search_expr
CUANDO comparison_expr1 ENTONCES iftrue1 [CUANDO comparison_expr2
ENTONCES iftrue2 
CUANDO comparison_exprN ENTONCES iftrueN
MÁS iffalse] FINAL
La expresión de INSTANCIA simple es encerrada dentro de un bloque de
CASEEND y
consiste en al menos una select WHENELN. En su forma más simple, con una select
WHENELN, el search_expr es comparado con el comparison_expr1. Si ellos son iguales,
entonces el resultado iftrue1 es devuelto. Si no, un valor nulo es devuelto a menos que
MÁS EL COMPONENTE sea definido, en cuyo instancia, la falta iffalse valor es
devuelta. Cuando más de una select WHENELN existe en la expresión de INSTANCIA,
buscando una expresión de comparación correspondiente sigue hasta que un partido
sea encontrado.
La búsqueda, la comparación, y los parámetros de resultado pueden ser valores de
columna, expresiones, o literales, pero deben ser todos del mismo tipo de datos.
Considere la pregunta siguiente:
escogido
instancia substr (1234,1,3)
cuando '134' entonces '1234 es un partido' cuando '1235' entonces
'1235 es un partido' cuando concat ('1', '23') entonces concat
('1', '23') ||' no es un partido' más 'ningún partido'
final de dual;
La expresión de búsqueda sacada del SUBSTR (1234,1,3) es el carácter
cuerda 123. El primer CUANDO... ENTONCES La select compara la cuerda 134 con
123. Ya que ellos no son iguales, la expresión de resultado no es evaluada. La segunda
select WHENELN compara la cuerda 1235 con 123 y otra vez, ellos no son iguales. La tercera
select WHENELN compara los resultados sacados del CONCAT ('1', '23') expresión, que es
123, a la expresión de búsqueda. Ya que ellos son idénticos, la tercera expresión de
resultados '123 es un partido', es devuelto.
El LAST_NAME y las columnas HIRE_DATE para EMPLOYEES con valores
DEPARTMENT_ID de 10 o 60 son recuperados junto con dos expresiones numéricas y
una expresión de INSTANCIA, como mostrado en la Figura 5-11.
Suliste que SYSDATE sea 01-JAN-2008. La expresión numérica aliased como
AÑOS devuelve un valor truncado obtenido dividiendo los meses de servicio por 12.
Aplique Expresiones Condicionales en una Select SENTENCIA
259

LA FIGURA 5-11 La expresión de INSTANCIA

Cinco categorías de la comandoación de lealtad basada durante años del servicio son
definidas truncando el cociente obtenido dividiendo los meses del servicio por 60. Esto
forma la expresión de búsqueda en la select de INSTANCIA. Ninguna de las filas en el
dataset empareja la expresión de comparación en la primera select WHENELN, pero ya que
la Figura 5-11 muestra, cinco filas encontraron las select WHENELN restantes y una fila es
agarrada por el MÁS select.
La sintaxis para la expresión de INSTANCIA buscada es como sigue:
INSTANCIA
CUANDO condition1 ENTONCES iftrue1 [CUANDO condition2 ENTONCES iftrue2

CUANDO conditionN ENTONCES iftrueN
MÁS iffalse] FINAL
260
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

La expresión de INSTANCIA buscada es encerrada dentro de un bloque de CASEEND y


consiste en al menos una select WHENELN. En su forma más simple con una select
WHENELN, el condition1 es evaluado; si es verdad, entonces el resultado iftrue1 es devuelto.
Si no, un valor nulo es devuelto a menos que MÁS EL COMPONENTE sea definido, en
cuyo instancia la falta iffalse valor es devuelta. Cuando más de una select WHENELN
existe en la expresión de INSTANCIA, buscando una expresión de comparación
correspondiente sigue hasta que uno sea encontrado. La pregunta para recuperar el SET
idéntico de resultados a los obtenidos en la Figura 5-11, usando una expresión de
INSTANCIA buscada es puesta en una lista después:
seleccione last_name, hire_date, trunc (months_between (sysdate, hire_date)/12)
años,
el trunc (months_between (sysdate, hire_date)/60) "Años dividió el instancia
cuando trunc (months_between (sysdate, hire_date)/60) <1 entonces cuando trunc
(months_between (sysdate, hire_date)/60) <2 entonces cuando trunc
(months_between (sysdate, hire_date)/60) <3 entonces cuando trunc
(months_between (sysdate, hire_date)/60) <4 entonces más 'Mobiliario'
termine la Lealtad de EMPLOYEES donde department_id en (60,10);
por 5",

'Interne' a 'Junior' 'Intermedio' 'Senior'

EJERZA 5-3 Utilización la Función DECODIFICAR


Se solicita que usted pregunte la comando de LOCATIONS para filas con el valor
EE.UU en el
Columna de COUNTRY_ID. Una expresión aliased como LOCATION_INFO se
requiere evaluar los valores de columna STATE_PROVINCE y devuelve la información
diferente según la comando siguiente. Clasifique salida basado en la expresión
LOCATION_INFO.

Si STATE_PROVINCE es Washington Texas California Nueva Jersey

El valor volvió es La cuerda 'Oficina central' La cuerda 'Pozos de petróleo' El valor de columna de CIUDAD El
valor de columna STREET_ADDRESS

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La expresión


LOCATION_ID puede ser calculada de varios modos diferentes.
Esto incluye la utilización de una expresión de INSTANCIA o una función
DECODIFICAR. La solución debajo de usos DECODIFICA.
Aplique Expresiones Condicionales en una Select SENTENCIA
261

3. La cláusula SENTENCIA es
ESCOGIDO DECODIFICAN (STATE_PROVINCE, 'Washington', 'los Cuarteles generales, 'Texas',
los Pozos de petróleo, 'California', CIUDAD, 'Nueva Jersey', STREET_ADDRESS) el Aviso de
LOCATION_INFO la mezcla de literales de carácter y columnas especificadas como parámetros a la
función DECODIFICAR.
4. El DE la cláusula es
DE EMPLOYEES 5. El DONDE cláusula es
DONDE COUNTRY_ID ='US' 6. El PEDIDO POR cláusula es
PEDIDO POR LOCATION_INFO 7. El resultado de ejecutar esta select es mostrado en la
ilustración siguiente:
262
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

RESUMEN DE CERTIFICACIÓN
Este capítulo añade las funciones de fila solas introducidas antes. Los conceptos
del tipo de datos implícito y explícito conversión son explicados junto con los riesgos de
fiabilidad asociados con conversiones implícitas.
La fecha al carácter y el número a conversiones de carácter son descritos usando la
función de TO_CHAR. Una variedad de modelos de formato o máscaras está disponible.
La función de TO_NUMBER realiza el carácter para numerar conversiones, mientras
la función de TO_DATE realiza el carácter para fechar conversiones de tipo de datos.
Las funciones anidadas y su evaluación son una de las lecciones más valiosas en este
capítulo. El entendimiento de este concepto fundamental es crucial. Las funciones
generales NVL, NVL2, NULLIF, y SE FUNDEN son diseñadas para simplificar el
funcionamiento con valores nulos y proporcionar la funcionalidad lógica condicional
básica.
DECODIFIQUE es una función específica para el Oracle que apoya la lógica "si
entonces más" en el contexto de una select SQL junto con la expresión de INSTANCIA
ANSI-dócil. Las dos variantes son el INSTANCIA simple y expresiones de
INSTANCIA buscadas. Estas funciones condicionales son francas y muy útiles.
La conversión, las funciones generales, y condicionales añaden considerablemente
al conocimiento foundational de SQL que usted adquirió de capítulos anteriores y le
sostendrá en el lugar bueno mientras que usted progresa con su aprendizaje.
Taladradora de dos minutos
263


TALADRADORA DE DOS MINUTOS
Describa Diversos tipos de Funciones de Conversión Disponibles en SQL
❑ Cuando los valores no emparejan los parámetros definidos de funciones, Oracle
tentativas de convertirlos en los tipos de datos requeridos. Esto es conocido como la
conversión implícita.
❑ conversión Explícita ocurre cuando una función como TO_CHAR es invocada a
cambie el tipo de datos de un valor.
❑ La función de TO_CHAR realiza la fecha al carácter y el número al carácter
conversiones de tipo de datos.
❑ artículos de Carácter son explícitamente transformados en valores de fecha usando el
TO_DATE
función de conversión.
❑ artículos de Carácter son cambiados en valores de número usando el TO_NUMBER
función de conversión.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE


❑ La función de TO_CHAR devuelve un artículo de tipo VARCHAR2. los  modelos de
Formato o máscaras prescriben modelos que las cadenas de caracteres deben emparejar
facilitar conversión exacta y consecuente en artículos de fecha o número.
❑ Cuando la función de TO_CHAR realiza el número a conversiones de carácter,
la máscara de formato puede especificar el dinero, la anchura numérica, la posición del
operador decimal, miles de separador, y muchos otros códigos de formateo.
❑ Las máscaras de formato disponibles cuando TO_CHAR es usado para convertir el carácter
los artículos hasta ahora incluyen el día, la semana, el mes, el cuarto, año, y siglo. ❑
máscaras de Formato siempre debe ser especificado encerrado en citas solas. ❑ realizando la
fecha a la conversión de carácter, la máscara de formato especifica que
los elementos de fecha son extraídos y si el elemento debería ser descrito por un nombre largo
o abreviado.
❑ términos de Carácter, como nombres de día y mes, extraídos de fechas con el
La función de TO_CHAR es automáticamente rellenada de espacios que pueden ser
recortados prefijando la máscara de formato con el del modificador.
264
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

❑ La función de TO_DATE tiene un modificador fx que especifica un partido exacto para


la cadena de caracteres para ser convertida y la fecha formatea la máscara.

Aplique Expresiones Condicionales en una Select SENTENCIA


❑ funciones que Anidan usan salida de una función como el ingreso al otro. ❑ La
función de NVL devuelve el artículo original sin alterar o una alternativa
el artículo si el término inicial es nulo.
❑ La función de NVL2 devuelve un nuevo si - artículo nulo si el artículo original
es nulo o un
alternativa si no el artículo nulo si el término original no es nulo.
❑ La función de NULLIF prueba dos términos de la igualdad. Si ellos son iguales, la
función
vueltas nulas, más esto devuelve el primer de los dos términos probados.
❑ La función FUNDIR devuelve el primer valor no nulo de su parámetro
lista. Si todos sus parámetros son nulos, entonces un valor nulo es devuelto.
❑ La función DECODIFICAR pone en práctica "si entonces más" lógica
condicional por
las pruebas de dos términos para igualdad y vuelta del tercer término si ellos son
iguales o, opcionalmente, algún otro término si ellos no son.
❑ hay dos variantes de la expresión de INSTANCIA usada para facilitar "si
entonces más"
lógica condicional: el INSTANCIA simple y expresiones de INSTANCIA
buscadas.

MÍ PRUEBA
Mí Prueba
265
Las preguntas siguientes medirán su entendimiento del material presentado en este capítulo.
Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija todo el
correcto responde de cada pregunta.

Describa Diversos tipos de Funciones de Conversión Disponibles en SQL


1. ¿Qué tipo de conversión es realizada por la select siguiente?
LONGITUD SENTENCIA (3.14285) DE DUAL; (Elija la mejor respuesta.) A. Conversión
explícita B. Conversión implícita C. Conversión de función de TO_NUMBER D. Ninguno de
los susodichos
2. Elija cualquier select incorrecta en cuanto a funciones de conversión. (Elija todo que se aplican.)
A. TO_CHAR puede convertir artículos de fecha a artículos de carácter. B. TO_DATE puede
convertir artículos de carácter para fechar artículos. C. TO_CHAR puede convertir números a
artículos de carácter. D. TO_DATE puede convertir artículos de fecha a artículos de carácter.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE


3. ¿Qué valor es devuelto después de ejecutar la select siguiente?
SELECCIONE TO_NUMBER (1234.49, '999999.9') DE DUAL; (Elija la mejor respuesta.) A.
1234.49 B. 001234.5 C. 1234.5 D. Ninguno de los susodichos
4. ¿Qué valor es devuelto después de ejecutar la select siguiente?
SELECCIONE TO_CHAR (1234.49, '999999.9') DE DUAL; (Elija la mejor respuesta.) A.
1234.49 B. 001234.5 C. 1234.5 D. Ninguno de los susodichos
266
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

5. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente?


SELECCIONE TO_CHAR (SYSDATE, 'fmMONTH, AÑO') DE DUAL; (Elija la mejor
respuesta.) A. JULIO DE 2009 B. JULIO, DOS MIL NUEVE C. EL 09 DE JULIO D. Ninguno de
los susodichos
6. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente?
SELECCIONE TO_CHAR (SYSDATE, 'MES fmDDth') DE DUAL; (Elija la mejor respuesta.) A.
El 12 de julio B. El 12 de julio C. EL DOCE DE JULIO D. Ninguno de los susodichos

Aplique Expresiones Condicionales en una Select SENTENCIA


7. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente?
SELECCIONE TO_CHAR (TO_DATE (TO_CHAR (SYSDATE, 'DD') ', DD'), 'AÑO') DE
DUAL; (Elija la mejor respuesta.) A. 2009 B. DOS MIL NUEVE C. 12-JUL-2009 D. Ninguno de
los susodichos
8. ¿Qué valor es devuelto después de ejecutar la select siguiente?
SELECCIONE NVL2 (NULLIF ('CODA', 'SID'), 'PERRO DE AGUAS', 'TERRIER') DE DUAL;
(Elija la mejor respuesta.) A. PERRO DE AGUAS B. TERRIER C. D nulo. Ninguno de los
susodichos

9. ¿Qué valor es devuelto después de ejecutar la select siguiente?


SELECCIONE NVL (SUBSTR ('de la mañana yo NULO', 10), 'SÍ yo de la mañana') DE DUAL;
(Elija la mejor respuesta.) A. NINGÚN B. C nulo. SÍ yo de la mañana D. Ninguno de los
susodichos
Pregunta de laboratorio
267
10. ¿Si SYSDATE devuelve 12-JUL-2009, qué es devuelto por la select siguiente?
ESCOGIDO DECODIFICAN (TO_CHAR (SYSDATE, 'MM') ', 02', 'IMPUESTO DEBIDO',
'PARTIDO') DE DUAL; (Elija la mejor respuesta.) A. B debido fiscal. PARTIDO C. 02 D.
Ninguno de los susodichos

PREGUNTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
Como la parte de una nueva iniciativa de mercadotecnia, le piden preparar una lista de cumpleaños de
cliente que ocurren entre hace dos días y siete días de ahora. La lista debería recuperar filas de la comando
de CLIENTES que incluyen el CUST_FIRST_NAME, CUST_LAST_NAME, CUST_EMAIL, y
DATE_ OF_BIRTH columnas en comando ascendente basado en los componentes de mes y día del valor
de NACIMIENTO DATE_OF_. Se requiere que una expresión adicional aliased como el CUMPLEAÑOS
devuelva a un sabio mes-descriptivo basado en la comando siguiente. Hay varios enfoques a la solución de
esta pregunta. Su enfoque puede diferenciarse de la solución descrita aquí.

CUMPLEAÑOS Hace dos días Hace un día Hoy Mañana Dos días en el futuro Dentro de siete días de hoy

CADENA DE CARACTERES Anteayer Ayer Hoy Mañana Pasado mañana más


Tarde esta semana
268
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

MÍ PRUEBAN RESPUESTAS
Describa Diversos tipos de Funciones de Conversión Disponibles en
SQL
1. ® B. Dan el número 3.14285 como un parámetro a la función de LONGITUD. Hay unos datos ✓
teclee la falta de armonía, pero el Oracle implícitamente converte el parámetro a la cadena de
caracteres '3.14285', permitiendo la función funcionar correctamente.
Los ® A, C, y D son incorrectos. La conversión explícita ocurre cuando una función como
TO_CHAR es ˚
ejecutado. El C es la longitud correcta de la cuerda '3.14285', pero no preguntan para esto en la
pregunta.
2. ® D. Dates sólo son convertidos en cadenas de caracteres usando TO_CHAR y no el TO_DATE ✓
función.
Los  ® A, B, y C son select correctas.

Use el TO_CHAR, TO_NUMBER, y Funciones de Conversión TO_DATE


3. ® D. "ORA-1722: el número inválido" error es devuelto porque la select es ✓
la tentativa de convertir un número usando una máscara de formato incompatible. Si la expresión
fuera TO_NUMBER (1234.49, '999999.99'), el número 1234.49 sería devuelto. los ® A, B, y D
son incorrectos. ˚
4. ® C. Para el número 1234.49 para emparejar el carácter formatean la máscara con un lugar decimal,

doblan primero sobre el número a 1234.5 antes de que TO_CHAR lo converta en la cuerda
'1234.5'. los ® A, B, y D son incorrectos. Poder no ser devuelto porque la máscara de formato
sólo permite un ˚
carácter después de la coma decimal. El B sería devuelto si la máscara de formato fuera '009999.9'.
5. ® B. Los componentes de AÑO y MES de la máscara de formato separada por una coma y un ✓
el espacio indica que TO_CHAR debe extraer los valores de año y mes explicados detalladamente
en la mayúscula separada por una coma y un espacio. El del modificador borra impresos
suplementarios de los componentes explicados detalladamente. los ® A, C, y D son incorrectos. Si
la máscara de formato fuera 'MON, YYYY' o 'MON-YY', A y C, ˚
respectivamente, sería devuelto.
6. ® A. El componente DD devuelve el día del mes en la mayúscula. Ya que es un número, esto ✓
no importa, a menos que la máscara 'th' sea aplicada, en cuyo instancia aquel componente es
especificado en la mayúscula. El MES devuelve el mes explicado detalladamente en la mayúscula.
los ® B, C, y D son incorrectos. El B sería devuelto si la máscara de formato fuera 'fmddth el
Mes', ˚
y C sería devuelto si la máscara de formato fuera 'fmDDspth el MES'.
Aplique Expresiones Condicionales en una Select SENTENCIA
Respuesta de laboratorio
269
7. ® B. El íntimo anidó la función es TO_CHAR (SYSDATE, 'DD'), que extrae el ✓
componente de día de SYSDATE y vueltas el carácter 12. La siguiente función ejecutada es
TO_DATE ('12', 'DD') donde el carácter 12 es dado el papel del componente de día. Cuando una
fecha tan incompleta es proporcionada, valores de sustitutos de Oracle de la función de
SYSDATE; ya que SYSDATE es 12-JUL-2009, esto es la fecha usada. La función más extrema
ejecutada en TO_CHAR ('12-JUL-2009', 'AÑO') devuelve el año explicado detalladamente como
DOS MIL NUEVE.
Los ® A, C, y D son incorrectos. ˚
8. ® A. La función de NULLIF compara sus dos parámetros y, ya que ellos son diferentes, el ✓
el primer parámetro es devuelto. El NVL2 ('CODA', 'PERRO DE AGUAS', 'TERRIER') la
llamada a la función devuelve el PERRO DE AGUAS ya que su primer parámetro no es nulo.
Los ® B, C, y D son incorrectos. ˚
9. ® C. El carácter literal 'de la mañana NULO' soy nueve carácteres mucho tiempo. Por lo tanto,
tratando de obtener ✓
una subcuerda que comienza en el décimo carácter devuelve un nulo. La función externa
entonces se hace NVL (NULO, 'SÍ yo de la mañana'), causando la cuerda 'SÍ yo de la mañana' ser
devuelta.
Los ® A, B, y D son incorrectos. ˚
10. ® B. La función íntima TO_CHAR (SYSDATE, 'MM') causa la cadena de caracteres ✓
'07' devuelto. La función externa es DECODIFICAN ('07', '02', 'IMPUESTO DEBIDO',
'PARTIDO'). Desde '07' no es igual a '02', el 'PARTIDO' más componente es devuelto.
Los ® A, C, y D son incorrectos. Sólo ser devuelto si el componente de mes extrajera ˚
de SYSDATE era '02'.

RESPUESTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.

1. Comience al Developer SQL y conecte al esquema OE. 2. El dataset debe ser restringido a filas
de la comando de CLIENTES donde DATE_OF_BIRTH
los valores primero tienen el mismo mes que el mes corriente, y en segundo lugar, el
componente de día del DATE_OF_BIRTH está entre hace dos días y siete días de ahora. Hay por
lo tanto dos condiciones que arreglan el DONDE cláusula.
270
Capítulo 5:
Utilización de Funciones de Conversión y Expresiones Condicionales

3. La primera condición del DONDE la cláusula es


TO_CHAR (DATE_OF_BIRTH, 'MON') =TO_CHAR (SYSDATE, 'MON')
4. La segunda condición es
TO_NUMBER (TO_CHAR (DATE_OF_BIRTH, 'DD')) - TO_NUMBER (TO_CHAR (SYSDATE, 'DD')) ENTRE-2 Y 7

5. La expresión de CUMPLEAÑOS puede ser calculada de varios modos. Basado en el precedente


DONDE cláusula, usted es asegurado que el dataset es limitado con el SET correcto de filas. La
cláusula SENTENCIA tiene que recuperar y manipular los archivos para la visualización
apropiada. La expresión de INSTANCIA proporciona la funcionalidad a la lógica condicional y
conviene bien a esta situación.
6. El instancia probado está basado en el componente de día del DATE_OF_BIRTH menos el día
el componente volvió por la función de SYSDATE. Por ejemplo, si la diferencia es-2, entonces la
cuerda 'Anteayer' es devuelta. Las condiciones de INSTANCIA diferentes son probadas es una
manera similar. MÁS EL COMPONENTE agarra cualquier fila que no empareja las condiciones
de INSTANCIA y devuelve la cuerda 'Más tarde en la semana'.
7. La cláusula SENTENCIA es por lo tanto
SELECCIONE CUST_FIRST_NAME, CUST_LAST_NAME, CUST_EMAIL, DATE_OF_BIRTH,
INSTANCIA TO_NUMBER (TO_CHAR (DATE_OF_BIRTH, 'DD')) - TO_NUMBER (TO_CHAR (SYSDATE,
'DD'))
CUANDO-2 ENTONCES 'Anteayer' CUANDO-1 ENTONCES 'Ayer' CUANDO 0 ENTONCES 'Hoy'
CUANDO 1 ENTONCES 'Mañana' CUANDO 2 ENTONCES 'Pasado mañana' MÁS 'Más tarde esta
semana'
CUMPLEAÑOS DE FINAL

8. El DE la cláusula es
DE CLIENTES

9. El PEDIDO POR cláusula es


PEDIDO POR TO_CHAR (DATE_OF_BIRTH, 'MMDD')
Respuesta de laboratorio
271

10. La ejecución de esta select devuelve el SET de resultados que emparejan este modelo como
mostrado en
la ilustración siguiente para SYSDATE=08-JAN-2008:
Esta página intencionadamente se dejó en blanco

6
El obteniendo de
Datos Agregados
Usando las Funciones
de Grupo

OBJETIVOS DE
CERTIFICACIÓN

6.01
Describa las Funciones de Grupo
6.04
Incluya o Excluya Utilización de Filas Agrupada

la Cláusula que TIENE


6.02
Identifique las Funciones de Available Group

Taladradora de dos minutos
6.03
Datos de grupo Usando el GRUPO POR

Cláusula
Q&A
Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

274
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo
Las funciones de fila sola , exploradas en los

Capítulos 4 y 5, devuelven un valor solo para cada fila en un SET de resultados. El grupo o las

funciones agregadas actúan sobre filas múltiples. Ellos son usados para contar el número de filas o

encontrar el promedio de valores de columna específicos en un dataset.

Muchas operaciones estadísticas, como el cálculo de la desviación estándar, medianas, y promedios,


dependen de la ejecución de funciones contra datos agrupados y no filas sólo solas.

Las funciones de grupo son examinadas en dos etapas. En primer lugar, hablan de su
objetivo y la sintaxis. En segundo lugar, un análisis detallado del AVG, SUMA,
MINUTO, MAX, y funciones de CONDE es conducido. El concepto de agrupación o
segregación de datos basados en uno o varios que la columna valora es explorado antes
de presentar el GRUPO POR la cláusula.
EL DONDE la cláusula restringe filas en un dataset antes de la agrupación, mientras
la cláusula que TIENE los restringe después de la agrupación. Este capítulo concluye
con una discusión de la cláusula que TIENE.

OBJETIVO DE CERTIFICACIÓN 6.01

Describa las Funciones de Grupo


Las funciones de grupo de SQL son definidas y hablan de las variantes diferentes. La
sintaxis
del grupo seleccionado las funciones son explicadas, hablan de sus tipos de datos, y el
efecto de la palabra clave DISTINTA en ellos es explorado. Esta discusión está dividida
en dos áreas principales:

■ la Definición del grupo funciona ■ Tipos y sintaxis de funciones de grupo

Definición de Funciones de Grupo


Las funciones de grupo actúan sobre datos agregados y devuelven un resultado solo por
grupo.
Estos grupos por lo general consisten en el cero o más filas de datos. Las funciones de fila
sola son definidas con la fórmula: F (x, y, z, ) = resultado, donde x, y, z son parámetros de
ingreso. La función F ejecuta en una fila del conjunto de datos a la vez y devuelve un
resultado para cada fila. Las funciones de grupo pueden ser definidas usando la fórmula
siguiente:
F (g1, g2, g3, , gn) = result1, result2, result2, , resultn; La función de grupo ejecuta una
vez para cada racimo de filas y devuelve un single
resultado por grupo. Estos grupos pueden ser tablas enteras o partes de tablas asociadas
usando un valor común o atributo. Si todas las filas en tablas son presentadas como un
Describa las Funciones de Grupo
275

el grupo a la función de grupo entonces un resultado es devuelto. Una o varias


funciones de grupo pueden aparecer en la lista SENTENCIA como sigue:
SELECCIONE group_function (columna o expresión),  DE la comando
[DONDE ] [la COMANDO BY]
Considere la comando de EMPLOYEES. Hay 107 filas en esta comando. Los grupos
pueden
sea creado basado en los valores comunes aquella parte de filas. Por ejemplo, las filas
que comparten el mismo valor de DEPARTMENT_ID pueden ser agrupadas juntos. A
partir de entonces, las funciones de grupo son ejecutadas por separado contra cada grupo
único.
Como la Figura 6-1 muestra, hay 12 valores de DEPARTMENT_ID distintos en la
comando de EMPLOYEES incluso un valor nulo. Las filas son distribuidas en 12 grupos
basados en valores de DEPARTMENT_ID comunes. La función de CONDE ejecuta 12
veces, una vez para cada grupo. Note que los grupos distintos no contienen el mismo
número de filas.

Las funciones de grupo agregan varios valores de filas múltiples en un resultado


solo. Ellos son extensamente usados para relatar objetivos y también son
conocidos como funciones sumarias o agregadas. Los datos agregados útiles,
como totales de suma, promedios, y cuentas a menudo forman la base de
cálculos estadísticos más sofisticados. Es útil tener un entendimiento bueno de
los datos almacenados en sus tablas de aplicación para maximizar la calidad de
su obteniendo agregado.
Tipos y Sintaxis de Funciones de Grupo
Una breve descripción de las funciones de grupo el más comúnmente usadas es
proporcionada después.
Muchos son examinados detalladamente más tarde en este capítulo.
La función de CONDE cuenta el número de filas en un grupo. Su sintaxis es como
sigue:
CONDE ({* | [DISTINCT|ALL] expr});
Esta sintaxis puede ser deconstructed en las formas siguientes:

1. CONDE (*) 2. CONDE (expr distinto) 3. CONDE (TODO expr) 4. CONDE


(expr)

Cuando el CONDE (*) es invocado, todas las filas en el grupo, incluso aquellos con
nulls o valores duplicados son contadas. Cuando el CONDE (expr distinto) es ejecutado,
los acontecimientos sólo únicos de expr son contados para cada grupo. TODA la palabra
clave es la parte de la sintaxis por defecto, entonces CONDE (TODO expr) y CONDE
(expr) son equivalentes. Éstos cuentan el número de acontecimientos no nulos de expr en
cada grupo. El tipo de datos de expr puede ser
276
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

FIGURA 6-1

Funciones de grupo que actúan


sobre 12 grupos
NÚMERO, FECHA, TRABAJO POR HORAS, o VARCHAR2. Si expr es un nulo, no es
ignorado a menos que él sea manejado usando una función general como NVL, NVL2, o
FUNDIRSE.
La función de AVG calcula el valor medio de una columna numérica o expresión en
un grupo. Su sintaxis es como sigue:
AVG ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas
siguientes:

1. AVG (expr distinto) 2. AVG (TODO expr) 3. AVG (expr)


Describa las Funciones de Grupo
277

Cuando AVG (expr distinto) es invocado, los valores distintos de expr son sumados y divididos en el
número de acontecimientos únicos de expr. AVG (TODO expr) y AVG (expr) añaden los valores no nulos de
expr para cada fila y dividen la suma en el número de filas no nulas en el grupo. El tipo de datos del
parámetro expr es el NÚMERO.
La función de SUMA devuelve el total agregado de los valores de expresión numéricos no nulos en un
grupo. Esto tiene la sintaxis siguiente:
SUMA ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas siguientes:

1. SUMA (expr distinto) 2. SUMA (TODO expr) 3. SUMA (expr)


LA SUMA (expr distinto) proporciona un total añadiendo que todos los valores únicos volvieron
después de que el expr es evaluado para cada fila en el grupo. SUMA (expr) y SUMA (TODO expr)
proporcionan un total añadiendo expr para cada fila en el grupo. Los valores nulos no son ignorados. El
tipo de datos de expr es el NÚMERO.
MAX y las funciones de MINUTO devuelven el valor de expr (más grande) y mínimo máximo (más
pequeño) en un grupo. Su sintaxis es como sigue:
MAX ([DISTINCT|ALL] expr); el MINUTO ([DISTINCT|ALL] expr) Esta sintaxis puede ser
deconstructed en las formas siguientes:

1. MAX (expr distinto); MINUTO (expr distinto) 2. MAX (TODO expr); MINUTO (TODO expr) 3.
MAX (expr); MINUTO (expr);
MAX (expr), MAX (TODO expr) y MAX (expr distinto) examina los valores
para expr en un grupo de filas y vuelta el valor más grande. Los valores nulos no son ignorados. MINUTO
(expr), MINUTO (TODO expr) y MINUTO (expr distinto) examinan los valores de expr en un grupo de
filas y devuelven el valor más pequeño. El tipo de datos del parámetro expr puede ser NÚMERO,
FECHA, TRABAJO POR HORAS o VARCHAR2.
STDDEV y las funciones de DESACUERDO son dos de mucho Oracle de funciones de grupo
estadístico provee. El DESACUERDO tiene la sintaxis siguiente:
DESACUERDO ([DISTINCT|ALL] expr); Esta sintaxis puede ser deconstructed en las formas
siguientes:

1. DESACUERDO (expr distinto) 2. DESACUERDO (TODO expr) 3. DESACUERDO (expr)


278
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

STDDEV tiene la sintaxis siguiente: STDDEV ([DISTINCT|ALL] expr); Esta sintaxis puede ser
deconstructed en las formas siguientes:

1. STDDEV (expr distinto) 2. STDDEV (TODO expr) 3. STDDEV (expr)

El desacuerdo estadístico se refiere a la variabilidad de tanteos en una muestra o el SET de datos.


EL DESACUERDO (expr distinto) devuelve la variabilidad de datos no nulos únicos
en un grupo. DESACUERDO (expr) y DESACUERDO (TODO expr) devuelven la
variabilidad de datos no nulos en el grupo.
STDDEV calcula la desviación estándar estadística, que es el nivel de la desviación del
valor medio en un grupo. Es sacado encontrando la raíz cuadrada del desacuerdo.
STDDEV (expr distinto) devuelve la desviación estándar de datos no nulos únicos en un
grupo. STDDEV (expr) y STDDEV (TODO expr) devuelven la desviación estándar de
datos no nulos en el grupo. El tipo de datos del parámetro expr es el NÚMERO.

Hay dos reglas fundamentales de recordar estudiando funciones de grupo. En


primer lugar, ellos siempre actúan sobre un grupo solo de filas a la vez. El grupo puede ser uno
de muchos grupos en los cuales un dataset ha sido segmentado o puede ser una comando
entera. La función de grupo ejecuta una vez por grupo. En segundo lugar, las filas con nulls que
ocurre en columnas de grupo o expresiones no son ignoradas, a menos que una función general
como NVL, NVL2, o SE FUNDA es proporcionado para manejárselos.

Considere el ejemplo siguiente. Si el valor medio para COMMISSION_PCT es recuperado de


la comando de EMPLOYEES, sólo los valores no nulos se consideran. La expresión AVG
(COMMISSION_PCT) añade que el 35 P.C. COMMISSION_ no nulo valora y divide el total en
35. El promedio basado en 107 filas puede ser computado usando la expresión AVG (NVL
(COMMISSION_PCT, 0)).

OBJETIVO DE CERTIFICACIÓN 6.02


Identifique las Funciones de Available Group
279
Identifique las Funciones de Available Group
Hablaron sólo de las variantes diferentes de funciones de grupo y su sintaxis. Esto
la sección proporciona ejemplos que demuestran la aplicación de estas funciones.
Hablan de las interacciones de funciones de grupo con valores nulos y la palabra clave
DISTINTA, y el concepto de funciones de grupo que anidan también se considera. Las
funciones de grupo disponibles son identificadas y exploradas bajo los títulos siguientes:

■ Utilización del grupo funciona ■ funciones de grupo que Anidan

Utilización de las Funciones de Grupo


La aplicación práctica de funciones de grupo es demostrada usando AVG, SUMA,
MINUTO,
MAX, y CONDE. Estos el grupo funciona toda la vuelta resultados numéricos. Además,
el MINUTO y las funciones de MAX pueden devolver resultados de fecha y carácter.
Estas cinco funciones actúan sobre valores no nulos, pero, a diferencia de los demás, el
CONDE (*) la llamada a la función también cuenta filas con valores nulos. La palabra
clave DISTINTA es usada para reprimir las filas presentadas a las funciones de grupo.
Los analistas con frecuencia desean saber el valor medio o total agregado de una
columna o una expresión. Esto es simple de conseguir la utilización de la mayor parte de
paquetes de hoja de cálculo. La utilización de las funciones de grupo SQL para el
obteniendo proporciona dos ventajas de usar una hoja de cálculo para el análisis. En
primer lugar, ellos ofrecen una plataforma conveniente para realizar cálculos usando
datos vivos de tiempo real. En segundo lugar, ellos tienen el análisis fácil en cuenta de
cada valor en un dataset o de grupos específicos de valores.

El Conde Function La ejecución de CONDE en una columna o una expresión


devuelve un valor entero que representa el número de filas en el grupo. La función de
CONDE tiene la sintaxis siguiente:
CONDE ({* | [DISTINCT|ALL] expr}); hay un parámetro que puede ser cualquiera
*, que representa todas las columnas
incluso valores nulos, o una columna específica o expresión. Puede ser precedido por el
DISTINTO o TODAS las palabras claves. Considere las preguntas siguientes:
La consulta 1: seleccione a la cuenta (*) de la Consulta 2 de
EMPLOYEES: seleccione a la cuenta (commission_pct) de EMPLOYEES
280
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

La consulta 3: seleccione a la cuenta (commission_pct distinto) de la Consulta 4 de


EMPLOYEES: seleccione a la cuenta (hire_date), cuenta (manager_id) de EMPLOYEES
La consulta 1 cuenta las filas en la comando de EMPLOYEES y devuelve el número entero 107.
La consulta 2 cuenta las filas con valores de COMMISSION_PCT no nulos y vuelve
35. La consulta 3 considera las 35 filas no nulas, determina el número de valores únicos,
y vuelve 7. La consulta 4 demuestra dos aspectos. En primer lugar, funciones de grupo
múltiples pueden ser usadas en la misma lista SENTENCIA y en segundo lugar, la
función de CONDE es usada tanto en una columna de FECHA como en una columna
de NÚMERO. Los números enteros 107 y 106 son devueltos ya que hay 107 valores de
HIRE_DATE no nulos y 106 valores de MANAGER_ID no nulos en el grupo.
Tres expresiones adyacentes usando la función de CONDE son mostradas en la
Figura 6-2. Esta pregunta ilustra que hay 107 archivos de empleado en la comando de
EMPLOYEES. Adelante, estos 107 EMPLOYEES son asignados a 12
DEPARTMENTS, incluso DEPARTMENTS nulos, y trabajo en 19 JOBS únicos.

La Función de SUMA El total agregado de una columna o una expresión es


computada con la función de SUMA. Su sintaxis es como sigue:
SUMA ([DISTINCT|ALL] expr); Un parámetro numérico, opcionalmente precedido
por el DISTINTO o TODOS
palabras claves, es proporcionado a la función de SUMA, que devuelve un valor
numérico. Considere las preguntas siguientes:
Pregunta
1:
escogido
suma (2) de EMPLOYEES
Pregunta
2:
escogido
suma (sueldo) de EMPLOYEES
Pregunta
3:
escogido
suma (sueldo distinto) de EMPLOYEES
Pregunta
4:
escogido
suma (commission_pct) de EMPLOYEES

FIGURA 6-2

La función de
CONDE
Identifique las Funciones de Available Group
281

Hay 107 filas en la comando de EMPLOYEES. La consulta 1 añade el número 2 a


través de 107 filas y vuelve 214. La consulta 2 toma el valor de columna de SUELDO
para cada fila en el grupo, que en este instancia es la comando entera, y devuelve la
cantidad de sueldo total de 691400. La consulta 3 devuelve un total de 397900 ya que
pagan a muchos EMPLOYEES el mismo sueldo y la palabra clave DISTINTA sólo
añade valores únicos en la columna al total. La consulta 4 vuelve 7.8 después de añadir
los valores no nulos.
La figura 6-3 muestra dos preguntas. El primer calcula el número de días entre la fecha
de sistema actual y el valor en la columna HIRE_DATE. La aritmética de fecha es
realizada para cada fila. El número volvió es añadido usando una llamada a la función de
SUMA. El resultado está dividido en 365.25 para dar el número total de años trabajados
por todos los EMPLOYEES corrientes. La segunda pregunta muestra que la función de
SUMA devuelve "ORA-00932: datatypes inconsecuente" error si es proveído de un
argumento no numérico.

La Función de AVG El valor medio de una columna o expresión divide la suma en el


número de filas no nulas en el grupo. La función de AVG tiene la sintaxis siguiente:
AVG ([DISTINCT|ALL] expr); Un parámetro numérico, precedido por el DISTINTO
o TODAS las palabras claves, es
a condición de que a la función de AVG, que devuelve un valor numérico. Considere
las preguntas siguientes:
Pregunta
1:
escogido
avg (2) de EMPLOYEES
Pregunta
2:
escogido
avg (sueldo) de EMPLOYEES
Pregunta
3:
escogido
avg (sueldo distinto) de EMPLOYEES
Pregunta
4:
escogido
avg (commission_pct) de EMPLOYEES

FIGURA 6-3

La función de SUMA
282
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

Hay 107 filas en la comando de EMPLOYEES. La consulta 1 añade el número 2 a través


107 filas y dividen el total en el número de filas para devolver el número 2. Los literales
numéricos presentados a la función de AVG son devueltos sin alterar. La consulta 2
añade el valor de SUELDO para cada fila para obtener la cantidad de sueldo total de
691400. Esto está dividido en las 107 filas con valores de SUELDO no nulos para
devolver los 6461.68224 medios. Usted puede esperar que la consulta 3 devuelva un
resultado más pequeño que la consulta 2, pero esto no hace. Hay 57 valores de sueldo
únicos, que cuando añadido, cede un total de 397900. La división 397900 por 57 vueltas
6980.70175 como el promedio de los valores de sueldo distintos. La consulta 4 puede
producir resultados inesperados si no correctamente entendido. La adición de los valores
no nulos, incluso duplicados, produce un total de 7.8. Hay 35 archivos de empleado con
valores de COMMISSION_PCT no nulos. La división 7.8 por 35 producciones
COMMISSION_PCT medio de 0.222857143.
La figura 6-4 muestra dos preguntas. Las primeras listas el LAST_NAME y columnas
JOB_ID con una expresión que calcula el número total de años trabajaron por
programadores en la organización. Los segundos usos los AVG funcionan para calcular
el número medio de años durante los cuales los programadores corrientes han sido
EMPLOYEES.

MAX y las Funciones de MINUTO MAX y funciones de MINUTO actúan


sobre NÚMERO, FECHA, TRABAJO POR HORAS, y tipos de datos VARCHAR2.
Ellos devuelven un valor del mismo tipo de datos que sus argumentos de ingreso, que
son los artículos más grandes o más pequeños en el grupo. Cuando aplicado PARA
fechar artículos, MAX devuelve la última fecha y el MINUTO devuelve el más
temprano.

FIGURA 6-4

La función de AVG
Identifique las Funciones de Available Group
283

Las cadenas de caracteres son convertidas a representaciones numéricas de sus


carácteres constituyentes basados en las configuraciones NLS en la base de datos.
Cuando la función de MINUTO es aplicada a un grupo de cadenas de caracteres, la
palabra que parece primera por comando alfabético es devuelta, mientras MAX
devuelve la palabra que parecería última. MAX y las funciones de MINUTO tienen la
sintaxis siguiente:
MAX ([DISTINCT|ALL] expr); MINUTO ([DISTINCT|ALL] expr) Ellos toman un
parámetro precedido por el DISTINTO o TODAS las palabras claves. Considerar
las preguntas siguientes:
La consulta 1: minuto escogido (commission_pct), máximo
(commission_pct) de la Consulta 2 de EMPLOYEES: minuto escogido
(start_date), máximo (end_date) de la Consulta 3 job_history: minuto
escogido (job_id), máximo (job_id) de EMPLOYEES
La consulta 1 devuelve los valores numéricos 0.1 y 0.4 para mínimo y máximo
COMMISSION_PCT valora en la comando de EMPLOYEES. Note que los valores
nulos para COMMISSION_PCT no son ignorados. La consulta 2 evalúa una columna
de FECHA e indica que START_DATE más temprano en la comando JOB_HISTORY
es 17-SEP-1987 y último END_DATE es 31-DEC-1999. La consulta 3 devuelve
AC_ACCOUNT y ST_MAN como los valores de JOB_ID que aparecen en general por
comando alfabético en la comando de EMPLOYEES.
La primera pregunta mostrada en la Figura 6-5 usa a MAX y funciones de MINUTO
para obtener la información sobre EMPLOYEES con valores JOB_ID de SA_REP. Los
resultados indican que los representantes de ventas que trabajan para las duraciones más
cortas y más largas eran

FIGURA 6-5

El MINUTO y funciones de
MAX
284
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

alquilado en 21-APR-2000 y 30-JAN-1996, respectivamente. Además, los


representantes de ventas que ganan los sueldos más grandes y más pequeños ganan
11500 y 6100, respectivamente. La segunda pregunta trae los valores de
LAST_NAME para los representantes de ventas a quien HIRE_DATE mínimo y
máximo y los valores de SUELDO se aplican.

EJERZA 6-1 Utilización de las Funciones de Grupo


La comando de COUNTRIES almacena una lista de valores de COUNTRY_NAME. Le
requieren
calcular la longitud media de todos los nombres del país. Deben doblar sobre cualquier
componente fraccionario al número entero más cercano.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La longitud del valor


de nombre del país para cada fila es calculada usando el
Función de LONGITUD. La longitud media puede ser determinada usando la
función de AVG. Pueden doblar sobre ello al número entero más cercano
usando la función REDONDA.
3. La cláusula SENTENCIA usando el alias
AVERAGE_COUNTRY_NAME_LENGTH es
SELECCIONE POR AHÍ (AVG (LONGITUD (COUNTRY_NAME)))
AVERAGE_COUNTRY_NAME_LENGTH
4. El DE la cláusula es
DE COUNTRIES
5. La ejecución de esta select devuelve una fila sola que representa el promedio
longitud de todos los nombres del país en la comando de COUNTRIES, como
mostrado en la ilustración siguiente:
Identifique las Funciones de Available Group

GUIÓN & SOLUCIÓN


285
Le gustaría recuperar la fecha más temprana de una columna que almacena la información de FECHA. ¿Puede un
grupo funcionar ser utilizado para recuperar este valor?
Sí. La función de MINUTO actúa sobre numérico, fecha, y datos de carácter. Cuando la función de MINUTO
es ejecutada contra una columna de FECHA, el valor de fecha más temprano es devuelto.
Las estadísticas sumarias son requeridas por altos directivos. Esto incluye detalles como el número de
EMPLOYEES, coste de sueldo de personal total, sueldo más bajo, y los valores de sueldo más altos. ¿Puede tal
informe ser dibujado usando una pregunta?
Sí. No hay ninguna restricción al número de funciones de grupo puestas en una lista en la cláusula SENTENCIA. El
informe solicitado puede ser dibujado usando la pregunta siguiente: SELECCIONE AL CONDE (*)
Num_Employees, SUMA (SUELDO) Tot_Salary_Cost, MINUTO (SUELDO) el Sueldo Más bajo, MAX (SUELDO)
Sueldo de Máximo DE EMPLOYEES;
Le piden poner el número en una lista de JOBS únicos realizados por EMPLOYEES en la organización. Contar
los archivos de JOB_ID le dará todos los JOBS. ¿Es posible contar los JOBS únicos?
Sí. La palabra clave DISTINTA puede ser usada con las funciones agregadas. Para contar valores de JOB_ID
únicos en la comando de EMPLOYEES, usted puede publicar la pregunta: SELECCIONE AL CONDE (JOB_ID
distinto) DE EMPLOYEES;

Funciones de Nested Group


Recuerde que las funciones de fila sola pueden ser anidadas o empotradas a cualquier
nivel de la profundidad.
Las funciones de grupo sólo pueden ser anidadas dos niveles profundamente. Tres funciones
de grupo de utilización de formatos son mostradas aquí:
El G1 (group_item) = resultado G1 (G2 (group_item) = resultado G1 (G2 (G3
(group_item))) no es permitido. Las funciones de grupo son representadas por la
carta G seguida de un número. El primer
la forma simple no contiene ningún anidó funciones. Los ejemplos incluyen la SUMA
(group_item) o AVG (group_item) funciones que devuelven un resultado solo por
grupo. La segunda forma apoya dos anidó funciones de grupo, como la SUMA (AVG
(group_item)). En este instancia, un GRUPO POR la cláusula es obligatorio ya que el
valor medio del group_item por grupo es calculado antes de ser agregado por la función
de SUMA.
La tercera forma es rechazada por el Oracle. Considere una expresión que anida tres
funciones de grupo. Si la función de MAX es aplicada al ejemplo anterior, la expresión
MAX (SUMA (AVG (group_item))) es formado. Las dos funciones de grupo interiores
devuelven un valor solo que representa la suma de un SET de valores medios. Esta
expresión se hace MAX (valor solo). Una función de grupo no puede ser aplicada a un
valor solo.
286
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

La figura 6-6 demuestra dos preguntas. Ambos restringen las filas devueltas a aquellos con
Valores de DEPARTMENT_ID de nulo, 40, y 80. Éstos son divididos entonces por
sus valores de DEPARTMENT_ID en tres grupos. La primera pregunta calcula la
suma de los valores de COMMISSION_PCT para cada grupo y devuelve los valores
0.15, nulo, y 7.65. La consulta 2 contiene las funciones de grupo anidadas, que
pueden ser evaluadas como sigue: AVG (SUMA (COMMISSION_PCT)) = (0.15 +
7.65)/2 = 3.9.

FIGURA 6-6

Funciones de grupo
anidadas
Datos de grupo Usando el GRUPO POR Cláusula
287
Las funciones de fila sola pueden ser anidadas a cualquier nivel, pero las
funciones de grupo pueden ser anidadas a, como máximo, dos niveles profundamente. La
llamada a la función anidada CONDE (SUMA (AVG (X))) devuelve el error, "ORA-00935: la
función de grupo es anidada demasiado profundamente." Es aceptable para

la fila sola de nido funciona dentro de funciones de grupo. Considere la pregunta siguiente:
SELECCIONE LA SUMA (AVG (LONGITUD (NOMBRE de LAST_))) DE EMPLOYEES GROUP
POR DEPARTMENT_ID. Esto calcula la suma de la longitud media de valores de LAST_NAME
por departamento.

OBJETIVO DE CERTIFICACIÓN 6.03

Datos de grupo Usando el GRUPO POR Cláusula


Las funciones de grupo hablaron de grupos de uso más tempranos de filas que comprenden
la comando entera.
Esta sección explora la división de un SET de datos en grupos que usan el GRUPO POR
la cláusula. Las funciones de grupo pueden ser aplicadas a estos subconjuntos o racimos de
filas. Hablan de la sintaxis de funciones de grupo y el GRUPO POR la cláusula en las
áreas siguientes:

■ Creación de grupos de datos ■ El GRUPO POR cláusula ■ Agrupación por


columnas múltiples

Creating Groups de Datos


Una comando tiene al menos una columna y cero o más filas de datos. En muchas
tablas
estos datos requieren que el análisis lo transforme en la información útil. Es un
requisito de obteniendo común para calcular la estadística de un SET de datos divididos
en grupos que usan atributos diferentes. Las funciones de grupo de utilización de
ejemplos anteriores funcionaron contra todas las filas en una comando. La comando
entera fue tratada como un grupo grande.
Los grupos de datos dentro de un SET son creados asociando filas con propiedades
comunes o atributos el uno con el otro. A partir de entonces, las funciones de grupo
pueden ejecutar contra cada uno de estos grupos. Los grupos de datos incluyen filas
enteras y no columnas específicas.
288
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

Considere la comando de EMPLOYEES. Esto comprende 11 columnas y 107 filas. Usted


podría crear grupos de filas que comparten un valor de DEPARTMENT_ID común. La
función de SUMA puede ser usada entonces para crear totales de sueldo por
departamento. Otro SET posible de grupos puede compartir valores de columna JOB_ID
comunes. La función de grupo AVG puede ser usada entonces para identificar el sueldo
medio pagado a EMPLOYEES en JOBS diferentes.
Un grupo es definido como un subconjunto de dataset entero compartimiento de uno
o varios atributos comunes. Estos atributos son típicamente valores de columna, pero
también pueden ser expresiones. El número de grupos creados depende de los valores
distintos presentes en el atributo común.
Como la Figura 6-7 muestra, hay 12 valores de DEPARTMENT_ID únicos en la
comando de EMPLOYEES. Si las filas son agrupadas usando valores de
DEPARTMENT_ID comunes, habrá 12 grupos. Si una función de grupo es ejecutada
contra estos grupos, habrá 12 valores devueltos, ya que ejecutará una vez para cada
grupo.

La agrupación de datos y la utilización de funciones sumarias son extensamente


utilizadas para relatar objetivos. Es valioso practicar la segmentación de un SET
de datos en agrupaciones diferentes. El oracle proporciona la lenguaje analítica a
deconstruct datasets en grupos, divida éstos en subgrupos adicionales, etcétera.
Las funciones de agrupación agregadas pueden ser ejecutadas entonces contra
estos grupos y subgrupos.

El GRUPO POR Cláusula


La select SENTENCIA es realzada por la adición del GRUPO POR la cláusula.
Esta cláusula facilita la creación de grupos. Aparece después el DONDE cláusula, pero
antes del PEDIDO POR la cláusula, como sigue:
SELECCIONE column|expression|group_function (column|expression [alias]), } DE
la comando [DONDE la condición (ones)] [GRUPO POR {Cnel (es) |expr}] [PIDE POR
{Cnel (es) |expr|numeric_pos} [ASC|DESC] [NULLS FIRST|LAST]]; La columna o
la expresión especificada en el GRUPO POR la cláusula también son conocidas como
el atributo que se agrupa y es el componente por el cual las filas son agrupadas. El dataset
es segmentado basado en el atributo que se agrupa. Considere la pregunta siguiente:
máximo escogido (sueldo), el conde (*) del grupo de EMPLOYEES por
department_id pide por department_id
Datos de grupo Usando el GRUPO POR Cláusula
289

FIGURA 6-7
DEPARTMENT_ único ID valora
en la comando de EMPLOYEES

El atributo que se agrupa en este ejemplo es la columna DEPARTMENT_ID. El dataset,


que las funciones de grupo en la lista SENTENCIA deben actuar, está dividido en 12
grupos, un para cada departamento. Para cada grupo (departamento), el valor de sueldo
máximo y el número de filas son devueltos. Ya que los resultados son clasificados por
DEPARTMENT_ID, la tercera fila en el SET de resultados contiene los valores 11000 y 6.
Esto indica que 6 EMPLOYEES tienen un valor DEPARTMENT_ID de 30. De estos 6, el
asalariado más alto tiene un valor de SUELDO de 11000. Esta pregunta demuestra que el
atributo que se agrupa no tiene que ser incluido en la lista SENTENCIA.
290
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

Es común ver el atributo que se agrupa en la lista SENTENCIA junto a la agrupación


funciones. Si un artículo, que no es una función de grupo, aparece en la lista
SENTENCIA y no hay ningún GRUPO POR la cláusula, "ORA-00937: el error" de
función de grupo de ni-un-solo-grupo es levantado. Si un GRUPO POR la cláusula está
presente pero aquel artículo no es un atributo que se agrupa, entonces "ORA-00979: no
un GRUPO SEGÚN la expresión" error es devuelto.
Cualquier artículo en la lista SENTENCIA que no es una función de grupo debe ser un
atributo que se agrupa del GRUPO POR la cláusula.
Si una función de grupo es colocada en un DONDE cláusula, "ORA-00934: la función
de grupo no es permitida aquí" el error es devuelto. Imponer condiciones de nivel del
grupo es conseguido usando la cláusula de discusión en la siguiente sección. Las
funciones de grupo pueden ser, sin embargo, usadas como la parte del PEDIDO POR la
cláusula.
La primera pregunta en la Figura 6-8 levanta un error ya que la columna END_DATE
está en la lista SENTENCIA con una función de grupo y no hay ningún GRUPO POR
la cláusula. Un error "ORA-00979" es devuelto de la segunda pregunta ya que el artículo
START_DATE es puesto en una lista en la cláusula SENTENCIA, pero no es un
atributo que se agrupa.
La tercera pregunta divide las filas JOB_HISTORY en grupos basados en el
componente de año de 4 dígitos de la columna END_DATE. Cuatro grupos son creados
usando este atributo de agrupación. Éstos representan años diferentes cuando los
EMPLOYEES terminaron sus JOBS. El CONDE muestra el número de EMPLOYEES
que salió sus JOBS durante cada uno

FIGURA 6-8

El GRUPO POR cláusula


Datos de grupo Usando el GRUPO POR Cláusula
291

de estos años. Los resultados son puestos en una lista en el pedido inclinado basado en
la expresión "de Número de EMPLOYEES". Note que la función de grupo de
CONDE está presente en el PEDIDO POR la cláusula.

Un dataset está dividido en grupos que usan el GRUPO POR la cláusula. El


atributo que se agrupa es la llave común compartida por miembros de cada grupo. El atributo
que se agrupa es por lo general una columna sola, pero puede ser columnas múltiples o

La agrupación por Columnas Múltiples

una expresión que no puede estar basada en funciones de grupo. Note que sólo la agrupación
de atributos y funciones de grupo es permitida en la cláusula SENTENCIA usando el GRUPO
POR.
Una extensión potente al GRUPO POR la cláusula usa atributos de agrupación múltiples.
El oracle permite a datasets ser dividido en grupos y permite que estos grupos estén
divididos adelante en subgrupos que usan un atributo de agrupación diferente.
Considere las dos preguntas siguientes:
La consulta 1: seleccione department_id, sume (commission_pct) de
EMPLOYEES donde commission_pct no es el grupo nulo por la Consulta 2
department_id: seleccione department_id, job_id, sume
(commission_pct) de EMPLOYEES donde commission_pct no es el grupo
nulo por department_id, job_id
La consulta 1 restringe las filas devueltas de la comando de EMPLOYEES a las 35
filas
con valores de COMMISSION_PCT no nulos. Estas filas están divididas entonces en
dos grupos: 80 y NULO basado en el atributo de agrupación de DEPARTMENT_ID. El
SET de resultado contiene dos filas, que devuelven la suma de los valores de
COMMISSION_PCT para cada grupo.
La consulta 2 es similar a la primera excepto ello tiene un artículo adicional: JOB_ID
tanto en el ESCOGIDO como en GRUPO POR cláusulas. Este segundo atributo de
agrupación descompone los dos grupos basados en DEPARTMENT_ID en los
componentes JOB_ID constituyentes que pertenecen a las filas en cada grupo. Los
valores de JOB_ID distintos para filas con DEPARTMENT_ID=80 son SA_REP y
SA_MAN. El valor de JOB_ID distinto para filas con DEPARTMENT_ID nulo es
SA_REP. Por lo tanto, la consulta 2 devuelve dos agrupaciones, uno que consiste en dos
subgrupos, y otro con sólo un, como mostrado en la Figura 6-9.
292
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

FIGURA 6-9

El GRUPO POR cláusula con


columnas múltiples

EJERZA 6-2 Datos que se Agrupan Basados en Columnas Múltiples


El análisis del volumen de ventas de personal es un requisito de obteniendo común.
Requieren a usted
cree un informe que contiene el número de EMPLOYEES que dejó sus JOBS,
agrupados por el año en el cual ellos se marcharon. Los JOBS que ellos realizaron
también se requieren. Los resultados deben ser clasificados en el pedido inclinado
basado en el número de EMPLOYEES en cada grupo. El informe debe poner en una
lista el año, el JOB_ID, y el número de EMPLOYEES que dejó un trabajo particular en
aquel año.
1. Comience al Developer SQL y conecte al esquema de HORA. 2. La comando
JOB_HISTORY contiene el END_DATE y columnas JOB_ID,
que constituyen la fuente de datos para este informe.
3. El componente de año es extraído usando la función de TO_CHAR. El número
de EMPLOYEES que salieron un trabajo particular en cada año es obtenido usando
al CONDE (*) función.
4. La cláusula SENTENCIA es
TO_CHAR (END_DATE, 'YYYY') "Año que Sale", JOB_ID, CONDE (*)
"Número de EMPLOYEES"
5. El DE la cláusula es
DE EMPLOYEES

6. No hay DONDE cláusula.


Datos de grupo Usando el GRUPO POR Cláusula
293
7. Ya que el informe requiere que EMPLOYEES sean puestos en una lista antes del año y JOB_ID,
estos dos artículos deben aparecer en el GRUPO POR la cláusula, que es el GRUPO POR TO_CHAR
(END_DATE, 'YYYY'), JOB_ID
8. La comandoación es realizada con
PEDIDO POR CONDE (*) DESC 9. La ejecución de esta select devuelve el informe de volumen de
ventas de personal solicitado como mostrado
en la ilustración siguiente:
294
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

GUIÓN & SOLUCIÓN


Usted desea imprimir insignias de nombre para los EMPLOYEES que trabajan como representantes de ventas.
¿Puede la longitud de los valores de LAST_NAME más cortos y más largos ser determinada para estos
EMPLOYEES?
Sí. MAX y las funciones de MINUTO aplicadas al espacio de LAST_NAME determinarán los nombres más
cortos y más largos como mostrado en la pregunta siguiente: MINUTO ESCOGIDO (LONGITUD
(LAST_NAME)), MAX (LONGITUD (LAST_NAME)) DE EMPLOYEES DONDE JOB_ID ='SA_REP';
¿Es posible contar los archivos en cada grupo, primero dividiendo los archivos de empleado antes del año del
empleo, luego por el trabajo, y finalmente por el sueldo?
Sí. La agrupación por columnas múltiples es una opción potente que permite el análisis de grano fino como mostrado
en la pregunta siguiente: SELECCIONE AL CONDE (*), TO_CHAR (HIRE_DATE, 'YYYY'), JOB_ID, SUELDO
DE EMPLOYEES GROUP POR TO_CHAR (HIRE_DATE, 'YYYY'), JOB_ID, SUELDO
¿Hay un límite del número de grupos dentro de grupos que pueden ser formados?
No. No hay ningún límite del número de grupos y subgrupos que pueden ser formados.

OBJETIVO DE CERTIFICACIÓN 6.04


Incluya o Excluya Filas Agrupadas Usando la
Cláusula que TIENE
La creación de grupos de datos y aplicando funciones agregadas es muy útil. Un
refinamiento
a estos aspectos es la capacidad de incluir o excluir resultados basados en condiciones de
nivel del grupo. Esta sección introduce la cláusula que TIENE. Una distinción clara es
hecha entre el DONDE cláusula y la cláusula que TIENE. La cláusula que TIENE es
explicada en las áreas siguientes:

■ Restricción de grupo resulta ■ La cláusula que TIENE

Resultados de Restricting Group


DONDE las condiciones de cláusula restringen filas devueltas por una pregunta. Las filas
son incluidas basadas
en si ellos realizan las condiciones puestas en una lista y son a veces conocidos como
resultados de nivel de la fila. Filas que se agrupan usando el GRUPO POR cláusula y
aplicando un conjunto
Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE
295

funcione a estos resultados de vueltas de grupos a menudo referidos como resultados de nivel del grupo. La
cláusula que TIENE proporciona la lenguaje para restringir resultados de nivel del grupo.
La pregunta siguiente limita las filas recuperadas de la comando JOB_HISTORY especificando un
DONDE la condición basada en la columna DEPARTMENT_ID valora.
seleccione department_id de job_history donde department_id en (50,60,80,110);
Esta pregunta devuelve siete filas. Si el DONDE la cláusula era ausente, diez filas
sería recuperado. Suliste que usted quiere saber cuantos EMPLOYEES fueron EMPLOYEES antes en
cada uno de estos DEPARTMENTS. Hay siete filas que pueden ser a mano agrupadas y contadas. Sin
embargo, si hay un gran número de filas, una función agregada como el CONDE puede ser usada, como
mostrado en la pregunta siguiente:
seleccione department_id, cuenta (*) de job_history donde department_id en
(50,60,80,110) grupo por department_id;
Esta pregunta es muy similar a la select anterior. La función agregada
EL CONDE fue añadido a la lista SENTENCIA, y un GRUPO POR la cláusula DEPARTMENT_ID
también fue añadido. Cuatro filas con su cuenta de fila agregada son devueltas y está claro que las siete
filas originales restringidas por el DONDE cláusula fueron agrupados en cuatro grupos basados en valores
de DEPARTMENT_ID comunes, como mostrado en la comando siguiente:

DEPARTMENT_ID CONDE (*) 50 260 180 2110 2


Suliste que usted quiso refinar esta lista para incluir sólo aquellos DEPARTMENTS con
más de un empleado. La cláusula que TIENE limita o restringe las filas de nivel del grupo como
requerido.
Esta pregunta debe realizar los pasos siguientes:

1. Considere el nivel de la fila entero dataset. 2. Limite el basado dataset en cualquiera DONDE
condiciones de cláusula.
296
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

3. Segmente los datos en uno o varios grupos que usan los atributos que se agrupan
especificado en el GRUPO POR cláusula. 4. Aplique cualquier función agregada para crear un nuevo
nivel del grupo dataset. Cada fila
puede ser considerado como una agregación de sus datos de nivel de la fila de la fuente basados en los
grupos creados.
5. Limite o restrinja los datos de nivel del grupo con una condición de cláusula que TIENE. Sólo
los resultados de nivel del grupo que emparejan estas condiciones son devueltos.

La elección del contexto apropiado para usar un DONDE o una cláusula que
TIENE depende de o físico o filas de nivel del grupo debe ser restringida. Las filas
que contienen datos almacenados en columnas son a veces llamadas filas
actuales o físicas. Cuando las filas (físicas) actuales son restringidas, una o varias
condiciones son impuestas usando un DONDE cláusula. Cuando estas filas son
agrupadas juntos, una o varias funciones agregadas pueden ser aplicadas,
cediendo una o varias filas de nivel del grupo. Éstos no son filas físicas, pero
agregaciones temporales de datos. Grupo - las filas de nivel son restringidas
usando condiciones impuestas por una cláusula que TIENE.

La Cláusula que TIENE


La forma general de la select SENTENCIA es realzada adelante por la adición de
la cláusula que TIENE y se hace:
SELECCIONE column|expression|group_function (column|expression [alias]), } DE
la comando [DONDE la condición (ones)] [GRUPO POR {Cnel (es) |expr}] [TENIENDO
group_condition (s)] [PIDE POR {Cnel (es) |expr|numeric_pos} [ASC|DESC]
[NULLS FIRST|LAST]]; Una diferencia importante entre la cláusula que TIENE y
otro ESCOGIDO
las cláusulas de select son que sólo puede ser especificado si un GRUPO POR la cláusula
está presente. Esta dependencia es prudente ya que las filas de nivel del grupo deben
existir antes de que ellos puedan ser restringidos. La cláusula que TIENE puede ocurrir
antes del GRUPO POR la cláusula en la select SENTENCIA. Sin embargo, es más
común colocar la cláusula que TIENE después del GRUPO POR la cláusula. Toda la
agrupación es realizada y las funciones de grupo son ejecutadas antes de la evaluación de
la cláusula que TIENE.
Los espectáculos de pregunta siguientes como la cláusula que TIENE es usada para
restringir dataset agregado. Los archivos de la comando JOB_HISTORY están divididos
en cuatro grupos. Las filas que encuentran la condición de cláusula que TIENE
(contribuyendo más de una fila a la cuenta de fila de grupo) son devueltas:
Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE
seleccione department_id, cuenta (*) de job_history donde
department_id en (50,60,80,110) grupo por department_id que tiene la
cuenta (*)> 1
297
Tres filas con valores DEPARTMENT_ID de 50, 80, y 110, cada uno con a
CONDE (*) valor de 2, son devueltos.
La figura 6-10 muestra tres preguntas. La consulta 1 divide los 107 archivos de la
comando de EMPLOYEES en 19 grupos basados en valores de JOB_ID comunes. El
sueldo medio para cada grupo JOB_ID y el conde de fila agregado es computado. La
consulta 2 refina los resultados por excluyendo con reservas aquellas filas agregadas
donde el

FIGURA 6-10

La cláusula que TIENE


298
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

el sueldo medio es menos que o igual a 10000, usando una cláusula que TIENE. La
consulta 3 demuestra que los operadores Booleanos pueden ser usados para especificar
condiciones de cláusula múltiples que TIENEN.

La cláusula que TIENE sólo puede ser especificada cuando un GRUPO POR la
cláusula está presente. Un GRUPO POR la cláusula puede ser especificado sin una cláusula que
TIENE. Condiciones múltiples pueden ser impuestas por a

EJERZA 6-3 Utilización la Cláusula que TIENE

TENER cláusula usando el Booleano Y, O, y NO operadores. Las condiciones de cláusula que


TIENEN restringen datos de nivel del grupo y deben contener una función de grupo o una
expresión que usa el que.
La compañía planea una unidad de disco de reclutamiento y quiere identificar los días
de la semana durante la cual 20 o más EMPLOYEES fueron contratados. Su informe debe
poner en una lista los días y el número de EMPLOYEES contratado en cada uno de
ellos.
1. Comience SQL*Plus y conecte al esquema de HORA. 2. Los archivos de
EMPLOYEES deben estar divididos en grupos basados durante el día
componente de la columna HIRE_DATE. El número de EMPLOYEES por grupo
puede ser obtenido usando la función de CONDE.
3. La cláusula SENTENCIA es
SELECCIONE TO_CHAR (HIRE_DATE, 'DÍA'), CONDE (*)
4. No DONDE la cláusula se requiere desde todas las filas físicas de los
EMPLOYEES
la comando se considera.
5. El GRUPO POR cláusula es
GRUPO POR TO_CHAR (HIRE_DATE, 'DÍA') Este GRUPO POR la cláusula
potencialmente crea siete filas de nivel del grupo, un para cada día de la semana.
6. La función de CONDE en la cláusula SENTENCIA entonces pone el número en
una lista de personal
los miembros EMPLOYEES durante cada día. La cláusula que TIENE debe ser
usada para restringir estas siete filas a sólo aquellos donde la cuenta es mayor que
o igual a 20.
Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE

7. La cláusula que TIENE es


TENER CONDE (*)> = 20 8. El DE cláusula es
DE EMPLOYEES
299
9. La ejecución de esta select devuelve los días de la semana en cual 20 o más
los EMPLOYEES fueron contratados como mostrado en la ilustración siguiente:

DENTRO DEL EXAMEN


Los objetivos de certificación en este capítulo son examinados usando ejemplos prácticos y guiones que
requieren que usted para predecir re sults volviera de preguntas de SQL. Estas preguntas se concentran en
dividir datasets en grupos que usan uno o varios atributos de agrupación.
Entienda las limitaciones de funciones de grupo que anidan. Recuerde que las funciones de grupo deben
existir en la cláusula SENTENCIA si hay un GRUPO POR la cláusula. La cláusula que TIENE puede
ocurrir antes del GRUPO POR la cláusula, pero es por lo general seguida de ello. Un error es devuelto si la
cláusula que TIENE es usada sin un GRUPO POR la cláusula. Recuerde que TENER

la cláusula puede contener condiciones múltiples, pero cada uno debe contener una función de grupo.
Saber como interpretar y remontar anidó las funciones de fila sola y grupo son esenciales, tan muchas
preguntas contienen expresiones con funciones anidadas. El íntimo al pedido más extremo de la
evaluación de grupo anidado y funciones solas es idéntico y debe ser recordado.
Hay muchas funciones de grupo incorporadas disponibles, pero los exámenes probarán su bajo -
posición del CONDE, SUMA, AVG, MAX, y funciones de MINUTO. Asegure que usted tiene un
entendimiento cuidadoso de estas funciones y como ellos se relacionan con la palabra clave DISTINTA
y valores NULOS.
300
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

RESUMEN DE CERTIFICACIÓN
Funciones de fila múltiples y el concepto de datos que se dividen en grupos son
descritos
en este capítulo. Hay grupo múltiple o las funciones agregadas disponibles. La llave
funciona para crear totales de suma; calculando promedios, mínimos, o máximos; y la
obtención de una cuenta de registro es explorada detalladamente.
Las diferencias entre funciones de grupo que anidan y funciones de fila sola son
investigadas, y las limitaciones del antiguo son explicadas. La creación de grupos que
usan atributos de agrupación comunes es encarnada con la introducción del GRUPO
POR la cláusula a la select SENTENCIA. Los datos de nivel de la fila son limitados por
condiciones especificadas en el DONDE cláusula. También hablan de la restricción de
datos de nivel del grupo usando la cláusula que TIENE.
Taladradora de dos minutos
301


TALADRADORA DE DOS MINUTOS
Describa las Funciones de Grupo
❑ funciones de Grupo también son conocidos como fila múltiple, conjunto, o resumen
funciones. Ellos ejecutan una vez para cada grupo de datos y agregan los datos de filas
múltiples en un resultado solo para cada grupo.
❑ Grupos puede estar tablas enteras o partes de una comando agrupada juntos por un común
agrupación de atributo.

Identifique las Funciones de Available Group


❑ El CONDE de una función devuelve un valor entero que representa el número
de filas en un grupo.
❑ La función de SUMA devuelve un total agregado de todo el numérico no nulo
la expresión valora en un grupo.
❑ La función de AVG divide la suma de una columna o expresión por el número
de filas no nulas en un grupo.
❑ MAX y funciones de MINUTO actúan sobre NÚMERO, FECHA, TRABAJO POR
HORAS, y
Tipos de datos de VARCHAR2. Ellos devuelven un valor que es el artículo más grande o
más pequeño en el grupo.
❑ funciones de Grupo sólo puede ser anidado dos niveles profundamente.

Datos de grupo Usando el GRUPO POR Cláusula


❑ El GRUPO POR la cláusula especifica que las filas de atributo que se agrupan deben tener
en
común para ellos para ser agrupado juntos.
❑ El GRUPO POR la cláusula facilita la creación de grupos dentro de un SET seleccionado
de datos y aparece después el DONDE cláusula, pero antes del PEDIDO POR la cláusula.
❑ Cualquier artículo a la lista SENTENCIA que no es una función de grupo debe ser una
agrupación
atributo. ❑ funciones de Grupo puede no ser colocado en un DONDE cláusula. ❑ Datasets
puede ser dividido en grupos y adelante dividido en subgrupos
basado en atributos de agrupación múltiples.
302
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE


❑ filas que se Agrupan usando una agrupación común atribuyen con el GRUPO
POR
la cláusula y la aplicación de una función agregada a cada uno de estos grupos
devuelven resultados de nivel del grupo.
❑ La cláusula que TIENE proporciona la lenguaje para limitar los resultados de
nivel del grupo
devuelto.
❑ La cláusula que TIENE sólo puede ser especificado si hay un GRUPO POR la
cláusula
presente.
❑ Toda la agrupación es realizado y las funciones de grupo son ejecutadas antes de
la evaluación
la cláusula que TIENE.

MÍ PRUEBA
Mí Prueba
303
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.

Describa las Funciones de Grupo


1. ¿Qué resultado es devuelto por la select siguiente?
SELECCIONE A CONDE (*) DE DUAL; (Elija la mejor respuesta.) A. B nulo. 0 C. 1 D.
Ninguno de los susodichos
2. Elija una select correcta en cuanto a funciones de grupo.
A. Las funciones de grupo sólo pueden ser usadas cuando un GRUPO POR la cláusula está
presente. Las funciones de B. Group pueden actuar sobre filas múltiples a la vez. Las funciones
de C. Group sólo actúan sobre una fila sola a la vez. Las funciones de D. Group pueden ejecutar
tiempos múltiples dentro de un grupo solo.

Identifique las Funciones de Available Group


3. ¿Qué valor es devuelto después de ejecutar la select siguiente?
SELECCIONE LA SUMA (SUELDO) DE EMPLOYEES; Suliste que haya 10 archivos de empleado
y cada uno contiene un valor de SUELDO de 100, excepto 1, que tiene un valor nulo en el espacio
de SUELDO. (Elija la mejor respuesta.) A. 900 B. 1000 C. D nulo. Ninguno de los susodichos
4. ¿Qué valores son devueltos después de ejecutar la select siguiente?
SELECCIONE AL CONDE (*), CONDE (SUELDO) DE EMPLOYEES; Suliste que haya 10
archivos de empleado y cada uno contiene un valor de SUELDO de 100, excepto 1, que tiene un
valor nulo en su espacio de SUELDO. (Elija todo que se aplican.) A. 10 y 10 B. 10 y C nulo. 10 y
9 D. Ninguno de los susodichos
304
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

5. ¿Qué valor es devuelto después de ejecutar la select siguiente?


SELECCIONE AVG (NVL (SUELDO, 100)) DE EMPLOYEES; Suliste que haya diez archivos de
empleado y cada uno contiene un valor de SUELDO de 100, excepto un empleado, que tiene un
valor nulo en el espacio de SUELDO. (Elija la mejor respuesta.) A. B nulo. 90 C. 100 D. Ninguno
de los susodichos

Datos de grupo Usando el GRUPO POR Cláusula


6. ¿Qué valor es devuelto después de ejecutar la select siguiente?
SELECCIONE LA SUMA ((AVG (LONGITUD (NVL (SUELDO, 0))))) DE EMPLOYEES
GROUP POR EL SUELDO; Suliste que haya diez archivos de empleado y cada uno contiene un valor
de SUELDO de 100, excepto uno, que tiene un valor nulo en el espacio de SUELDO. (Elija la
mejor respuesta.) A. Un error es devuelto B. 3 C. 4 D. Ninguno de los susodichos
7. ¿Cuántos archivos son devueltos por la pregunta siguiente?
SELECCIONE LA SUMA (SUELDO), DEPARTMENT_ID DE EMPLOYEES GROUP POR
DEPARTMENT_ID; Suliste que haya 11 no nulo y 1 valores de DEPARTMENT_ID únicos nulos.
Todos los archivos tienen un valor de SUELDO no nulo. (Elija la mejor respuesta.) A. 12 B. 11 C.
D nulo. Ninguno de los susodichos
8. ¿Qué valores son devueltos después de ejecutar la select siguiente?
SELECCIONE JOB_ID, MAX_SALARY DE JOBS GROUP POR MAX_SALARY; Suliste que la
comando de JOBS tenga diez archivos con el mismo valor JOB_ID de DBA y el mismo valor
MAX_SALARY de 100. (Elija la mejor respuesta.) A. Una fila de salida con los valores DBA, 100
B. Diez filas de salida con los valores DBA, 100 C. Un error es devuelto D. Ninguno de los
susodichos
Pregunta de laboratorio
305

Incluya o Excluya Filas Agrupadas Usando la Cláusula que TIENE


9. ¿Cuántas filas de datos son devueltas después de ejecutar la select siguiente?
SELECCIONE DEPT_ID, SUMA (NVL (SUELDO, 100)) DE EMP GROUP POR DEPT_ID que
TIENE LA SUMA (SUELDO)> 400; Suliste que la comando EMP tenga diez filas y cada uno
contiene un valor de SUELDO de 100, excepto uno, que tiene un valor nulo en el espacio de
SUELDO. Las cinco primeras y segundas filas tienen valores DEPT_ID de 10 y 20,
respectivamente. (Elija la mejor respuesta.) A. Dos filas B. Una fila C. Filas cero D. Ninguno de
los susodichos
10. ¿Cuántas filas de datos son devueltas después de ejecutar la select siguiente?
SELECCIONE DEPT_ID, SUME (SUELDO) DE EMP GROUP POR DEPT_ID que TIENE LA
SUMA (NVL (SUELDO, 100))> 400; Suliste que la comando EMP tenga diez filas y cada uno
contiene un valor de SUELDO de 100, excepto uno, que tiene un valor nulo en el espacio de
SUELDO. Las cinco primeras y segundas filas tienen valores DEPT_ID de 10 y 20,
respectivamente. (Elija la mejor respuesta.) A. Dos filas B. Una fila C. Filas cero D. Ninguno de
los susodichos

PREGUNTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
La comando PRODUCT_INFORMATION pone en una lista artículos que son orderable y otros que
son planeados, obsoletos, o en el desarrollo. Se requiere que usted prepare un informe que los grupos no
- orderable productos por su PRODUCT_STATUS y muestran el número de productos en cada grupo y
la suma del LIST_PRICE de los productos por grupo. Adelante, sólo las filas de nivel del grupo, donde la
suma del LIST_PRICE es mayor que 4000, deben ser mostradas. Un producto es nonorderable si el valor
de PRODUCT_STATUS no es igual a la cuerda 'orderable'. Hay varios enfoques a la solución de esta
pregunta. Su enfoque puede diferenciarse de la solución propuesta.
306
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo
MÍ PRUEBAN
RESPUESTAS
Describa las Funciones de Grupo
1. ® C. La comando DUAL se pelea y una columna. El CONDE (*) función devuelve el ✓
número de filas en una comando o grupo.
Los ® A, B, y D son incorrectos. ˚
2. ® B. Por definición, las funciones de grupo pueden actuar sobre filas múltiples a la vez, a
diferencia de la fila sola ✓
funciones.
Los ® A, C, y D son select incorrectas. Una función de grupo puede ser usada sin un GRUPO
POR ˚
cláusula. En este instancia, dataset entero es hecho funcionar en como un grupo. La función de
CONDE a menudo es ejecutada contra una comando entera, que se comporta como un grupo. El D
es incorrecto. Una vez que un dataset ha sido dividido en grupos diferentes, cualquier función de
grupo ejecuta una vez por grupo.

Identifique las Funciones de Available Group


3. ® A. La función de conjunto de SUMA no hace instancia de valores nulos y añade valores no
nulos. Desde nueve ✓
las filas contienen el valor de SUELDO 100, 900 es devuelto.
Los ® B, C, y D son incorrectos. El B sería devuelto si la SUMA (NVL (SUELDO, 100))
fuera ˚
ejecutado. El C es una opción atractiva ya que la aritmética regular con valores NULOS
devuelve un resultado NULO. Sin embargo, las funciones agregadas, excepto el CONDE (*), no
hacen instancia de valores NULOS.
4. ® C. El CONDE (*) considera todas las filas incluso aquellos con valores NULOS. CONDE
(SUELDO) ✓
sólo considera las filas no nulas.
Los ® A, B, y D son incorrectos. ˚
5. ® C. La función de NVL converte un valor NULO en 100. A partir de entonces, el promedio ✓
la función añade que el SUELDO valora y obtiene 1000. La división de esto por el número de
archivos vuelve 100.
Los ® A, B, y D son incorrectos. El B sería devuelto si AVG (NVL (SUELDO, 0)) fuera
seleccionado. Esto ˚
es interesante de notar que si el AVG (SUELDO) fuera seleccionado, 100 también habría sido
devuelto, ya que la función de AVG sumaría los valores no nulos y dividiría el total en el número
de filas con valores de SUELDO no nulos. Entonces AVG (SUELDO) sería calculado como:
900/9=100.

Datos de grupo Usando el GRUPO POR Cláusula


6. ® C. El dataset es segmentado basado en la columna de SUELDO. Esto crea dos grupos: un ✓
con valores de SUELDO de 100 y otro con un valor de SUELDO nulo. La longitud media del
SUELDO valora 100 es 3 para las filas en el primer grupo. El valor de sueldo NULO es convertido
primero
Mí Respuestas de Prueba
307

en el número 0 por la función de NVL, y la longitud media del SUELDO es 1. La función de


SUMA funciona a través de los dos grupos que añaden los valores 3 y 1 vuelta 4.
Los ® A, B, y D son incorrectos. Parecer plausible desde funciones de grupo no puede ser
anidado más ˚
que dos niveles profundamente. Aunque haya cuatro funciones, sólo dos son funciones de grupo
mientras los demás son funciones de fila sola evaluadas antes de las funciones de grupo. El B sería
devuelto si la SUMA de expresión (AVG (LONGITUD (SUELDO))) fuera seleccionada.
7. ® A. Hay 12 valores de DEPARTMENT_ID distintos. Ya que esto es el atributo que se agrupa, ✓
12 grupos son creados, incluso 1 con un valor de DEPARTMENT_ID nulo. Por lo tanto 12 filas son
devueltas.
Los ® B, C, y D son incorrectos. ˚

Incluya o Excluya Filas Agrupadas Usando la Cláusula que


TIENE
8. ® C. Para un GRUPO POR la cláusula para ser usada, una función de grupo debe aparecer en la
lista SENTENCIA. ✓
Los ® A, B, y D son incorrectos ya que la select es sintácticamente inexacta y es rechazada ˚
por Oracle. No confunda la columna llamada MAX_SALARY para MAX (SUELDO) función.
9. ® B. Dos grupos son creados basados en sus valores de DEPT_ID comunes. El grupo con ✓
Los valores de DEPT_ID de diez consisten en cinco filas con valores de SUELDO de 100 en cada
uno de ellos. Por lo tanto, la SUMA (SUELDO) que la función devuelve 500 para este grupo, y
esto satisface la SUMA QUE TIENE (SUELDO)> 400 cláusula. El grupo con valores DEPT_ID
de 20 tiene cuatro filas con valores de SUELDO de 100 y una fila con un SUELDO NULO. LA
SUMA (SUELDO) Sólo vuelve 400 y este grupo no satisface la cláusula que TIENE.
Los ® A, C, y D son incorrectos. Precávase de la SUMA (NVL (SUELDO, 100)) la expresión en
el ˚
Cláusula SENTENCIA. Esta expresión selecciona el formato de salida. Esto no restringe o limita el
dataset en de todos modos.
10. ® A. Dos grupos son creados basados en sus valores de DEPT_ID comunes. El grupo con ✓
Los valores de DEPT_ID de 10 consisten en cinco filas con valores de SUELDO de 100 en cada uno
de ellos. Por lo tanto la SUMA (NVL (SUELDO, 100)) la función vuelve 500 para este grupo y esto
satisface la SUMA QUE TIENE (SUELDO)> 400 cláusula. El grupo con valores DEPT_ID de 20
tiene cuatro filas con valores de SUELDO de 100 y una fila con un SUELDO nulo. La SUMA (NVL
(SUELDO, 100)) vuelve 500 y este grupo satisface la cláusula que TIENE. Por lo tanto dos filas son
devueltas.
Los ® B, C, y D son incorrectos. Aunque la cláusula SENTENCIA contenga la SUMA
(SUELDO), ˚
que vuelve 500 y 400 para los dos grupos, la cláusula que TIENE contiene la SUMA (NVL
(SUELDO, 100)) expresión, que especifica los criterios de exclusión o inclusión para una fila de
nivel del grupo.
308
Capítulo 6:
El obteniendo de Datos Agregados Usando las Funciones de Grupo

RESPUESTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución
propuesta aquí.
1. Comience al Developer SQL y conecte al esquema OE. 2. El dataset debe ser restringido a filas de
la comando PRODUCT_INFORMATION donde el
PRODUCT_STATUS no es igual a la cuerda 'orderable'. Ya que este carácter literal puede haber sido
introducido en el instancia variado, una función de conversión de instancia como el SUPERIOR
puede ser usada.
3. El DONDE la cláusula es
DONDE SUPERIOR (PRODUCT_STATUS) <> 'ORDERABLE'
4. Ya que el dataset debe ser segmentado en grupos basados en la columna PRODUCT_STATUS,
el GRUPO POR select es GRUPO POR PRODUCT_STATUS
5. El dataset es dividido ahora en grupos diferentes basados en su PRODUCT_STATUS
valores. Por lo tanto, el CONDE (*) función puede ser usado para obtener el número de productos
en cada grupo. La SUMA (LIST_PRICE) función agregada puede ser usada para calcular la suma
de los valores de LIST_PRICE para todas las filas en cada grupo.
6. La cláusula SENTENCIA es por lo tanto
SELECCIONE A CONDE (*), SUMA (LIST_PRICE), PRODUCT_STATUS
7. La cláusula que TIENE que restringe filas de nivel del grupo es por lo tanto
TENER SUMA (LIST_PRICE)> 4000
8. El DE la cláusula es
DE PRODUCT_INFORMATION
9. La ejecución de esta select devuelve el informe requerido como mostrado en la ilustración siguiente.

7
La pruebas de
Datos de Tablas
Múltiples

OBJETIVOS DE CERTIFICACIÓN
7.01

7.02
7.03

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using Equijoins y Nonequijoins
Afíliese a una Comando a Sí Usando unos Datos de Vista de Autojuntura que no Encuentran una Juntura
Condición Usando Junturas Externas

7.04


Q&A

Genere un producto Cartesiano de Dos o más Tablas


Taladradora de dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

310
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

Los tres pilares de la teoría relacional son la selección, la proyección, y la


conexión. Este capítulo se concentra en la realización práctica de la conexión. Las filas de tablas

diferentes son

asociado el uno con el otro usando junturas. El apoyo a la conexión tiene implicaciones
para el camino
los datos son almacenados en tablas de base de datos. Muchos modelos de datos, como tercera
forma normal o esquemas de estrella han surgido para explotar este aspecto.

Las tablas pueden ser afiliadas de varios modos. La técnica más común es llamada un
equijoin. Una fila tiene que ver con una o varias filas en otra comando basada en la
igualdad de valores de columna o expresiones. Las tablas también pueden ser afiliadas
usando un nonequijoin. En este instancia, una fila tiene que ver con una o varias filas en
otra comando si sus valores de columna caen a una variedad determinada por
operadores de desigualdad.
Una técnica menos común debe asociar filas con otras filas en la misma comando.
Esta asociación está basada en columnas con relaciones lógicas y por lo general
jerárquicas el uno con el otro. Esto es llamado una autojuntura. Las filas con entradas
nulas o que se diferencian en columnas de juntura comunes son excluidas cuando
equijoins y nonequijoins son realizados. Una juntura externa está disponible para traer
estas filas cojas o quedadas huérfanas si es necesario.
Una juntura enfadada o el producto Cartesiano son formados cuando cada fila de una
comando es afiliada a todas las filas en el otro. Esta juntura a menudo es el resultado de
ausencia o condiciones de juntura inadecuadas, pero es de vez en cuando intencional.

OBJETIVO DE CERTIFICACIÓN 7.01

Escriba Select SENTENCIAS a Datos de Acceso de


más de Un Table Using Equijoins y Nonequijoins
Este objetivo de certificación recibe la cobertura extensa en este capítulo. Es crucial
a aprendizaje de los conceptos y lenguaje para realizar junturas. Los tipos diferentes de
junturas son introducidos en sus formas primitivas que perfilan las amplias categorías
que están disponibles. Una discusión a fondo de varias cláusulas de juntura es
conducida entonces. Hablan de la sintaxis de Oracle ANSI-dócil y tradicional moderna,
pero el hincapié es hecho en la sintaxis moderna. Esta sección concluye con una
discusión
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
311

de nonequijoins y condiciones de juntura adicionales. La conexión es descrita


concentrándose en las ocho áreas siguientes:

■ los Tipos de las junturas ■ tablas que se Unen usando la sintaxis de SQL:1999
■ Calificación a la columna ambigua llama ■ La cláusula de JUNTURA
NATURAL ■ La JUNTURA natural USANDO la cláusula ■ La JUNTURA
natural EN la cláusula ■ N-camino junturas y condiciones de juntura adicionales
■ Nonequijoins

Tipos de Junturas
Dos junturas básicas son el equijoin y el nonequijoin. Equijoins son más con frecuencia
usados. Las junturas pueden ser realizadas entre tablas múltiples, pero la mayor parte de
la discusión siguiente usará dos tablas hipotéticas para ilustrar los conceptos y lenguaje
de junturas. La primera comando es llamada la fuente y el segundo es llamado el
objetivo. Las filas en la fuente y tablas objetivo comprenden una o varias columnas.
Como un ejemplo, suliste que la fuente y el objetivo sean los COUNTRIES y tablas de
REGIONS del esquema de HORA, respectivamente.
La comando de COUNTRIES contiene tres columnas llamadas COUNTRY_ID,
COUNTRY_NAME, y REGION_ID. La comando de REGIONS consiste de dos
columnas llamadas REGION_ID y REGION_NAME. Los datos en estas dos tablas
están relacionados el uno con el otro basado en la columna REGION_ID común.
Considere las preguntas siguientes:
La consulta 1: seleccione * de COUNTRIES donde country_id ='CA'; la
Consulta 2: seleccione region_name de REGIONS donde region_id =
'2';
El nombre de la región a la cual un país pertenece puede ser determinado por
la obtención de su valor de REGION_ID. Este valor es usado para afiliarse a ello con
la fila en la comando de REGIONS con mismo REGION_ID. La consulta 1 recupera
los valores de columna asociados con la fila de la comando de COUNTRIES donde el
COUNTRY_ ID ='CA'. El valor REGION_ID de esta fila es 2. La consulta 2 trae las
Américas REGION_NAME de la comando de REGIONS para la fila con
REGION_ID=2. Equijoining facilita la recuperación de valores de columna de tablas
múltiples usando una pregunta sola.
312
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

La fuente y las tablas objetivo pueden ser cambiadas, entonces la comando de REGIONS podría ser el
la fuente y la comando de COUNTRIES podrían ser el objetivo. Considere las dos
preguntas siguientes:
La consulta 1: seleccione * de REGIONS donde region_name
='Americas'; la Consulta 2: seleccione country_name de COUNTRIES
donde region_id = '2';
La consulta 1 trae una fila con un valor REGION_ID de 2. Participar en esto puso
marcha atrás
la manera permite que la pregunta siguiente sea preguntada: ¿Qué COUNTRIES
pertenecen a la región de Américas? Las respuestas de la segunda pregunta son cinco
valores de COUNTRY_NAME: Argentina, Brasil, Canadá, México, y los Estados
Unidos de América. Estos resultados pueden ser obtenidos de una pregunta sola que se
afilia a las tablas juntos. La lenguaje para realizar equijoins, nonequijoins, junturas
externas, y junturas enfadadas es introducida después, junto con una discusión de la
sintaxis de juntura de Oracle tradicional.

Las Junturas naturales La juntura natural es puesta en práctica usando tres


cláusulas de juntura posibles que usan las palabras claves siguientes en combinaciones
diferentes: JUNTURA NATURAL, UTILIZACIÓN, y EN.
Cuando la fuente y las tablas objetivo comparten columnas idénticamente llamadas, es
posible realizar una juntura natural entre ellos sin especificar una columna de juntura. Esto
es a veces referido como una juntura natural pura. En este guión, las columnas con los
mismos nombres en la fuente y tablas objetivo automáticamente tienen que ver el uno con
el otro. Las filas con valores de columna correspondientes en ambas tablas son
recuperadas. La comando de COUNTRIES y REGIONS ambos comparte la columna
REGION_ID. Ellos pueden ser naturalmente afiliados sin especificar columnas de juntura,
como mostrado en las dos primeras preguntas en la Figura 7-1.
Las palabras claves de JUNTURA NATURALES instruyen el Oracle de identificar
columnas con nombres idénticos entre tablas objetivo y la fuente. A partir de entonces,
una juntura es implícitamente realizada entre ellos. En la primera pregunta, la columna
REGION_ID es identificada como la columna única comúnmente llamada en ambas
tablas. Las REGIONS son la comando de la fuente y aparecen después el DE la
cláusula. La comando objetivo es por lo tanto COUNTRIES. Para cada fila en la
comando de REGIONS, un partido para el valor de REGION_ID es buscado de todas
las filas en la comando de COUNTRIES. Un SET de resultado interino es construido
conteniendo filas que emparejan la condición de juntura. Este SET es restringido
entonces por el DONDE cláusula. En este instancia, porque el valor de
COUNTRY_NAME debe ser Canadá, el NOMBRE de REGION_ de Américas es
devuelto.
La segunda pregunta muestra una juntura natural donde los COUNTRIES son la
comando de la fuente. El valor de REGION_ID para cada fila en la comando de
COUNTRIES es identificado y una búsqueda de una fila correspondiente en la
comando de REGIONS es iniciada. Si los partidos son encontrados, los resultados
interinos son limitados por cualquiera DONDE condiciones. Los COUNTRY_NAME
de filas con Américas como su REGION_NAME son devueltos.
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
313
FIGURA 7-1

Junturas naturales

A veces más control debe ser ejercido en cuanto a cual columnas usar para junturas.
Cuando hay nombres de columna idénticos en la fuente y apuntan tablas usted quiere
excluir como columnas de juntura, el formato de JOINUSING puede ser usado. Recuerde
que el Oracle no impone ninguna regla que declara que las columnas con el mismo
nombre en dos tablas distintas deben tener una relación el uno con el otro. La tercera
pregunta explícitamente especifica que la comando de REGIONS sea afiliada a la
comando de COUNTRIES basada en valores comunes en sus columnas REGION_ID.
Esta sintaxis permite que junturas naturales sean formadas en columnas específicas en
vez de en todas las columnas comúnmente llamadas.
La cuarta pregunta demuestra el formato JOINON de la juntura natural, que permite que
columnas de juntura sean explícitamente declaradas. Este formato no depende de las
columnas en la fuente y apunta tablas que tienen nombres idénticos. Esta forma es más
general y es el formato de juntura natural el más extensamente usado.
314
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

Tenga cuidado usando junturas naturales puras ya que los diseñadores de base de
datos pueden adjudicar el mismo nombre a columnas claves o únicas. Estas
columnas pueden tener nombres como ID o SEQ_NO. Si una juntura natural
pura es intentada entre tales tablas, los resultados ambiguos e inesperados
pueden ser devueltos.

Junturas externas No todas las tablas comparten una relación perfecta, donde cada
registro en la comando de la fuente puede ser emparejado a al menos una fila en la
comando objetivo. Hace falta de vez en cuando que las filas con la columna de juntura
no correspondiente también valoren ser recuperadas por una pregunta. Esto puede
parecer derrota el objetivo de junturas, pero tiene algunas ventajas prácticas.
Suliste a los EMPLOYEES y las tablas de DEPARTMENTS son afiliadas con valores
de DEPARTMENT_ID comunes. Los archivos de EMPLOYEES con valores de
DEPARTMENT_ID nulos son excluidos junto con valores ausentes de la comando de
DEPARTMENTS. Una juntura externa trae estas filas.

Las Junturas enfadadas Una juntura enfadada o el producto Cartesiano sacan sus
nombres de matemáticas, donde también es referido como un producto enfadado entre dos
SETs o matrices. Esta juntura crea una fila de salida para cada combinación de la fuente
y apuntan filas de comando.
Si la fuente y las tablas objetivo tienen tres y cuatro filas, respectivamente, una juntura
enfadada entre ellos resultados en (34 12) filas devueltas. Considere a las cuentas
de fila recuperadas de las preguntas en la Figura 7-2.
Los dos primeros recuentos de fila son realizados en los COUNTRIES y tablas de
REGIONS que ceden 25 y 4 filas respectivamente. La tercera pregunta cuenta el número
de filas volvió de una juntura enfadada de estas tablas y cede 100. La consulta 4
devolvería 100 archivos si el DONDE la cláusula era ausente. Cada una de las cuatro
filas en la comando de REGIONS es afiliada a una fila de la comando de
COUNTRIES. Cada fila volvió contiene cada columna de ambas tablas.

La Sintaxis de Juntura de oracle que Una sintaxis de juntura de Oracle


patentada ha desarrollado lo que es estable y entendido por millones de usuarios. Esta
sintaxis tradicional es apoyada por el Oracle y está presente en sistemas de software a
través del mundo. Usted sin duda encontrará la sintaxis de juntura de Oracle tradicional
que hace ahora el camino para la sintaxis ANSI-dócil estandarizada hablado en este
capítulo.
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
315

FIGURA 7-2

Juntura enfadada
La sintaxis de juntura de Oracle tradicional apoya conexión natural, junturas
externas, y junturas Cartesianos, como mostrado en las preguntas siguientes:
La consulta 1: REGIONS region_name sentencias, COUNTRIES
country_name de REGIONS, COUNTRIES donde REGIONS
region_id=countries.region_id; la Consulta 2: seleccione last_name,
department_name de EMPLOYEES, DEPARTMENTS donde EMPLOYEES
department_id (+) = DEPARTMENTS department_id; la Consulta 3:
seleccione * de REGIONS, COUNTRIES;
La consulta 1 realiza una juntura natural especificando la juntura como una
condición en el
DONDE cláusula. Esto es la diferencia más significativa entre el tradicional y ANSI
SQL sintaxis de juntura. Tome la nota de la columna aliasing utilización de la
COMANDO.COLUMN_NAME nota para quitar la ambigüedad a los nombres de
columna idénticos. Hablan de esta nota detalladamente más tarde en este capítulo. La
consulta 2 especifica la juntura entre la fuente y tablas objetivo como un DONDE
condición. Hay un más el símbolo encerrado entre paréntesis (+) a la izquierda del
signo igual que indica al Oracle que una juntura externa correcta debe ser realizada. Esta
pregunta devuelve LAST_NAME de los EMPLOYEES y
316
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

sus valores de DEPARTMENT_NAME correspondientes. Además, la juntura externa


recupera DEPARTMENT_NAME de las filas con valores de DEPARTMENT_ID no
actualmente adjudicados a cualquier archivo de empleado. La consulta 3 realiza una
juntura Cartesiano o enfadada por la exclusión de la condición de juntura.

La sintaxis de juntura de Oracle tradicional es extensamente usada. Sin


embargo, el examen tasa su entendimiento de junturas y el ANSI SQL las formas de la su sintaxis.
Esté preparado, aunque: algunas preguntas pueden dar un toque
su conocimiento de la sintaxis tradicional. Este conocimiento es útil ya que la sintaxis de
Oracle tradicional es profundamente empotrada a través de sistemas de software por todo el
mundo.

La conexión a Tablas Usando Sintaxis de SQL:1999


Antes del Oracle 9i, la sintaxis de juntura tradicional era la única lenguaje disponible
para la juntura
tablas. Desde entonces, el Oracle ha introducido una nueva lenguaje que es dócil al
ANSI SQL:1999 estándares. Esto no ofrece ningunas ventajas de rendimiento sobre la
sintaxis tradicional. Las junturas naturales, externas, y enfadadas pueden ser escritas
usando tanto SQL:1999 como Oracle tradicional SQL.
La forma general de la select SENTENCIA usando ANSI SQL:1999 sintaxis es como
sigue:
SELECCIONE table1.column, table2.column DE table1 [la JUNTURA NATURAL
table2] | [SE UNE table2 USANDO (column_name)] | [SE AFILIAN a table2 EN
(table1.column_name = table2.column_name)] | [DEJADO | DERECHO | JUNTURA
EXTERNA LLENA table2 EN (table1.column_name = table2.column_name)] | [La
CRUZ SE AFILIA a table2]; Esto es disecado y los ejemplos son explicados en las
siguientes secciones. El
la forma general de la sintaxis patentada al Oracle tradicional relevante para junturas es
como sigue:
SELECCIONE table1.column, table2.column DE table1, table2 [DONDE
(table1.column_name = table2.column_name)] | [DONDE (table1.column_name (+) =
table2.column_name)] | [DONDE (table1.column_name) = table2.column_name) (+)];
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
317

Si ningunas junturas o menos que junturas de n-1 son especificados en el DONDE


las condiciones de cláusula, donde N se refiere al número de tablas en la pregunta,
entonces una juntura Cartesiano o enfadada es realizada. Si un número adecuado de
condiciones de juntura es especificado, entonces la primera cláusula condicional
opcional especifica una juntura natural, mientras las dos segundas cláusulas opcionales
especifican la sintaxis para junturas externas izquierdas y derechas.

Calificación a Nombres de Columna Ambiguos


Las columnas con los mismos nombres pueden ocurrir en tablas implicadas en una
juntura. El
las columnas llamadas DEPARTMENT_ID y MANAGER_ID son encontradas tanto en
los EMPLOYEES como en tablas de DEPARTMENTS. La columna REGION_ID está
presente tanto en las REGIONS como en tablas de COUNTRIES. El listado de tales
columnas en una pregunta se hace problemático cuando el Oracle no puede resolver su
origen. Las columnas con nombres únicos a través de las tablas implicadas en una
juntura no causan ninguna ambigüedad, y el Oracle puede resolver fácilmente su
comando de la fuente.
El problema de nombres de columna ambiguos es dirigido con la nota de punto. Una
columna puede ser prefijada por su nombre de tabla y un punto o símbolo de período
para designar su origen. Esto lo diferencia de una columna con el mismo nombre en
otra comando. La nota de punto puede ser usada en preguntas que implican cualquier
número de tablas. Referirse a algunas columnas usando la nota de punto no implica que
todas las columnas deben ser referidas de esta manera.
La nota de punto es realzada con aliases de comando. Un alias de comando
proporciona un suplente, nombre por lo general más corto para una comando. Puede
referirse una columna como TABLE_NAME.COLUMN_NAME o
TABLE_ALIAS.COLUMN_NAME. Considere la pregunta mostrada en la Figura 7-3.
La comando de EMPLOYEES es aliased con el nombre corto EMP mientras la
comando de DEPARTMENTS no es. La cláusula SENTENCIA se refiere al
EMPLOYEE_ID y columnas MANAGER_ID como EMP.EMPLOYEE_ID y
EMP.MANAGER_ID. La columna MANAGER_ID de la comando de
DEPARTMENTS se menciona como DEPARTMENTS MANAGER_ID. La
calificación a la columna EMPLOYEE_ID usando la nota de punto es innecesaria porque
hay sólo una columna con este nombre entre las dos tablas. Por lo tanto, no hay ninguna
ambigüedad.
La columna MANAGER_ID debe ser calificada para evitar la ambigüedad porque es
presentado en ambas tablas. Ya que el formato de JOINUSING es aplicado, sólo
DEPARTMENT_ID es usado como la columna de juntura. Si una JUNTURA
NATURAL fuera empleada, tanto el DEPARTMENT_ID como las columnas
MANAGER_ID serían usados. Si la columna MANAGER_ID no fuera calificada, "ORA-
00918:column ambiguamente definió" el error sería devuelto. Si DEPARTMENT_ID fuera
aliased, "ORA-25154:column la parte de USAR la cláusula no puede tener el calificador"
error sería levantado.
318
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

FIGURA 7-3

Nota de punto
El Developer de SQL proporciona el título MANAGER_ID a la primera referencia
hecha en la cláusula SENTENCIA. La cuerda "_1" es automáticamente añadida a la
segunda referencia, creando el título MANAGER_ID_1.

La calificación a referencias de columna con la nota de punto para indicar la


comando de una columna del origen tiene una ventaja de rendimiento. El tiempo
es ahorrado porque el Oracle es dirigido al instante a la comando apropiada y no
tiene que resolver el nombre de tabla.
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

La Cláusula de JUNTURA NATURAL


La sintaxis general para la cláusula de JUNTURA NATURAL es como sigue:
SELECCIONE table1.column, table2.column
DE JUNTURA NATURAL table1 table2;
319
La juntura natural pura identifica las columnas con nombres comunes en table1 y
table2 e implícitamente se afilia a las tablas usando todas estas columnas. Las
columnas en la cláusula SENTENCIA pueden ser calificadas usando la nota de punto
a menos que ellos sean una de las columnas de juntura. Considere las preguntas
siguientes:
Pregunta de pregunta donde Pregunta de Pregunta

1: seleccione * de LOCATIONS COUNTRIES de juntura naturales; 2: seleccione *


de LOCATIONS, LOCATIONS country_id de COUNTRIES = COUNTRIES country_id; 3:
seleccione * de JOBS COUNTRIES de juntura naturales; 4: seleccione * de JOBS,
COUNTRIES;
La juntura natural identifica columnas con nombres comunes entre las dos tablas.
En la consulta 1, COUNTRY_ID ocurre en ambas tablas y se hace la columna de
juntura. La consulta 2 es escrita usando la sintaxis de Oracle tradicional y recupera las
mismas filas que la consulta 1. A menos que usted sea familiar con las columnas en la
fuente y apunte tablas, las junturas naturales deben ser usadas con la precaución, ya que
las condiciones de juntura son automáticamente formadas entre todas las columnas con
nombres compartidos.
La consulta 3 realiza una juntura natural entre tablas de COUNTRIES y los JOBS. No
hay ningunas columnas con nombres idénticos, causando un producto Cartesiano. La
consulta 4 es equivalente a la consulta 3, y una juntura Cartesiano es realizada usando la
sintaxis de Oracle tradicional.
La juntura natural es simple, pero propensa a una debilidad fundamental. Esto sufre
el riesgo que dos columnas con el mismo nombre no pudieran tener ninguna relación y
pueden no tener hasta tipos de datos compatibles. En la Figura 7-4, los COUNTRIES,
LAS REGIONS, y las tablas SALE_REGIONS son descritos. La comando
SALES_REGIONS fue construida para ilustrar el punto importante siguiente: Aunque
esto tenga REGION_ ID en común con la comando de COUNTRIES, no puede ser
naturalmente afiliado a ello porque sus tipos de datos son incompatibles. Los tipos de
datos de los COUNTRIES. REGION_ID y las columnas
SALES_REGIONS.REGION_ID son el NÚMERO y VARCHAR2, respectivamente.
Los datos de carácter no pueden ser implícitamente convertidos en datos numéricos y
"ORA-01722: el número inválido" error es incrementado. Las REGIONS.REGION_ID
columna son del NÚMERO de tipo y sus datos están relacionados con los datos en la
comando de COUNTRIES. Por lo tanto, la juntura natural entre la comando de
COUNTRIES y REGIONS trabaja perfectamente.
320
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

FIGURA 7-4

La juntura natural
EJERZA 7-1 Utilización de la JUNTURA NATURAL
La comando JOB_HISTORY comparte tres columnas idénticamente llamadas con el
Comando de EMPLOYEES: EMPLOYEE_ID, JOB_ID, y DEPARTMENT_ID. Se
requiere que usted describa las tablas y traiga el EMPLOYEE_ID, JOB_ID,
DEPARTMENT_ID, LAST_NAME, HIRE_DATE, y valores de END_DATE para todas
las filas recuperadas usando una juntura natural pura. El alias la comando de
EMPLOYEES como EMP y la comando JOB_HISTORY como JH y uso puntea la nota
donde posible.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. Las tablas son descritas


usando los comandos EMPLOYEES de DESC y
El DESC JOB_HISTORY, y las columnas con nombres idénticos y sus tipos de
datos puede ser examinado.
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins

3. El DE la cláusula es
DE JOB_HISTORY JH
4. La cláusula de JUNTURA es
EMPLOYEES DE JUNTURA NATURALES EMP
5. La cláusula SENTENCIA es
SELECCIONE EMP.LAST_NAME, EMP.HIRE_DATE, JH.END_DATE
321
6. La ejecución de esta select devuelve una fila sola con mismo EMPLOYEE_ID,
JOB_ID, y DEPARTMENT_ID valoran en ambas tablas y son mostrados en la
ilustración siguiente:
La JUNTURA Natural USANDO Cláusula
El formato de la sintaxis para la JUNTURA natural USANDO la cláusula es
como sigue:
SELECCIONE table1.column, table2.column
DE table1 SE AFILIAN A LA UTILIZACIÓN de table2 (join_column1,
join_column2);
322
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

Mientras la juntura natural pura contiene la palabra clave NATURAL en su sintaxis, el


La sintaxis de JOINUSING no hace. Un error es levantado si las palabras claves NATURALES y
UTILIZACIÓN ocurren en la misma cláusula de juntura. La cláusula JOINUSING
permite que una o varias columnas equijoin sean explícitamente especificadas entre
paréntesis después de la palabra clave de UTILIZACIÓN. Esto evita los defectos
asociados con la juntura natural pura. Muchas situaciones exigen que las tablas sólo
sean afiliadas en ciertas columnas, y este formato satisface este requisito. Considere
las preguntas siguientes:
Pregunta 1: seleccione * de COUNTRIES de juntura de LOCATIONS
usando (country_id); Pregunta 2: seleccione * de LOCATIONS,
COUNTRIES donde LOCATIONS country_id = COUNTRIES country_id;
Pregunta 3: seleccione * de la utilización de COUNTRIES de juntura
de JOBS;
La consulta 1 especifica que las LOCATIONS y las tablas de COUNTRIES
deben ser
afiliado en valores de columna COUNTRY_ID comunes. Todas las columnas de
estas tablas son recuperadas para las filas con valores de columna de juntura
correspondientes. La consulta 2 muestra una pregunta tradicionalmente especificada
que recupera las mismas filas que la consulta 1. La consulta 3 ilustra que una juntura
Cartesiano no puede ser por casualidad especificada con la sintaxis JOINUSING
desde sólo las columnas con nombres compartidos son permitidas después de la palabra clave de
UTILIZACIÓN. Las columnas de juntura no pueden ser calificadas usando nombres
de tabla o aliases cuando se los refieren. Ya que esta sintaxis de juntura
potencialmente excluye algunas columnas con nombres idénticos de la cláusula de
juntura, éstos deben ser calificados si se los refieren para evitar la ambigüedad.
Como la Figura 7-5 muestra, el JOB_HISTORY y las tablas de EMPLOYEES
fueron afiliados basados en la presencia de valores iguales en su JOB_ID y columnas
EMPLOYEE_ID. Las filas que se conforman con esta condición de juntura son
recuperadas. Estas tablas comparten tres columnas idénticamente llamadas. La
sintaxis JOINUSING permite la especificación de sólo dos de éstos como columnas de
juntura. Note que aunque la columna tercera idénticamente llamada sea
DEPARTMENT_ID, es calificada con un alias de comando para evitar la
ambigüedad. Sin embargo, las columnas de juntura en la cláusula SENTENCIA no
pueden ser calificadas con aliases de comando.

La JUNTURA Natural EN Cláusula


El formato de la sintaxis para la JUNTURA natural EN la cláusula es como sigue:
SELECCIONE table1.column, table2.column
DE table1 SE AFILIAN a table2 EN (table1.column_name = table2.column_name);
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
323

FIGURA 7-5

Juntura natural usando la


JOIN cláusula de
UTILIZACIÓN

La juntura natural pura y las cláusulas JOINUSING dependen de columnas de juntura con
nombres de columna idénticos. La cláusula JOINON permite la especificación explícita
de columnas de juntura, sin tener en cuenta sus nombres de columna. Esto es la forma
más flexible y extensamente usada de las cláusulas de juntura. El EN y palabras claves
NATURALES no puede aparecer juntos en una cláusula de juntura. Las columnas
equijoin son totalmente calificadas de table1.column1 = table2.column2 y son
opcionalmente especificadas entre paréntesis después el EN la palabra clave. Las
preguntas siguientes ilustran la cláusula JOINON:
La consulta 1: seleccione * de DEPARTMENTS d acompañan a EMPLOYEES e
en (e.employee_id=d.department_id); la Consulta 2: seleccione * de
EMPLOYEES e, DEPARTMENTS d donde e.employee_id=d.department_id;
324
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

GUIÓN & SOLUCIÓN


Se requiere que usted recupere la información de tablas múltiples, agrupe los resultados, y aplique una función
agregada a ellos. ¿Puede un grupo funcionar ser usado contra datos de fuentes de comando múltiples? Afiliándose a
dos tablas, hay un riesgo que entre ellos ellos contengan nombres de columna comunes. ¿Sabe el oracle qué tablas
traer datos de si tales columnas están presentes en la lista SENTENCIA?

La cláusula de JUNTURA NATURAL es usada para afiliarse a filas de dos tablas basadas en columnas con
nombres comunes que comparten valores idénticos. ¿Es posible afiliarse a dos tablas basadas en algunas columnas
compartidas y no todos ellos?

Sí. La conexión a tablas múltiples por último cede un SET de datos que comprenden una o varias filas y columnas.
Una vez que el dataset es creado, las funciones agregadas lo tratan como si los datos provinieron de una fuente. No.
El oracle no sabe de que tabula tales columnas provienen, y un error es levantado. Las referencias de columna
ambiguas pueden ser evitadas usando a calificadores. Los calificadores emplean la nota de punto para clarificar la
comando de una columna del origen. Sí. La cláusula recomendada por afiliarse naturalmente a dos tablas basadas en
una o varias de las columnas con nombres idénticos es JOINUSING. Un par de soportes sigue la cláusula de
UTILIZACIÓN en la cual las columnas de juntura no calificadas son especificadas.

La consulta 1 recupera todos los valores de columna tanto de los DEPARTMENTS


como de tablas de EMPLOYEES para las filas que encuentran una condición equijoin.
Esta condición es realizada por valores de EMPLOYEE_ID que emparejan valores de
DEPARTMENT_ID en la comando de DEPARTMENTS. La sintaxis de Oracle
tradicional en la consulta 2 devuelve los mismos resultados que la consulta 1. Note las
semejanzas entre la condición de juntura tradicional especificada en el DONDE
cláusula y la condición de juntura especificada después el EN la palabra clave.
La columna START_DATE en la comando JOB_HISTORY es afiliada a la columna
de FECHA HIRE_ en la comando de EMPLOYEES en la Figura 7-6. Este equijoin
recupera los detalles de EMPLOYEES que trabajaron para la organización y cambiaron
JOBS.

EJERZA 7-2 Utilización de la Cláusula JOINON NATURAL


Cada registro en la comando de DEPARTMENTS tiene una columna MANAGER_ID
correspondiente
un EMPLOYEE_ID valora en la comando de EMPLOYEES. Se requiere que usted
produzca un informe con una columna aliased como gerentes. Cada fila debe contener
una oración del formato FIRST_NAME LAST_NAME es el gerente del
DEPARTMENT_NAME
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
325
FIGURA 7-6

Juntura natural usando la


cláusula JOINON

departamento. El alias la comando de EMPLOYEES como E y la comando de


DEPARTMENTS como D y uso puntea la nota donde posible.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La columna


de gerentes puede ser construida concadenando el requerido
artículos y separación de ellos con espacios.
3. La cláusula SENTENCIA es
SELECCIONE E.FIRST_NAME ||' '|| E.LAST_NAME ||' es el gerente del '||
D.DEPARTMENT_NAME ||' departamento.' "Gerentes"
326
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

4. El DE la cláusula es
DE LOS EMPLOYEES E 5. La cláusula JOINON es
DEPARTMENTS DE JUNTURA D EN (E. EMPLOYEE_ID=D.MANAGER_ID).
6. La ejecución de esta select devuelve 11 filas que describen a los gerentes de cada uno
departamento como mostrado en la ilustración siguiente:
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
De N-camino Junturas y Condiciones de Juntura Adicionales
327
Las junturas sólo habladas fueron demostradas usando dos tablas. No hay ninguna
restricción del número de tablas que pueden estar relacionadas usando junturas. La
tercera forma normal consiste en un SET de tablas conectadas por una serie de relaciones
de clave foránea y primarias. Cruzar estas relaciones usando junturas habilita la
recuperación consecuente y confiable de datos. Cuando junturas múltiples existen en
una select, ellos son evaluados de la izquierda a la derecha. Considere la pregunta
siguiente usando junturas naturales puras:
seleccione r.region_name, c.country_name, l.city, d.department_name
de DEPARTMENTS d LOCATIONS de juntura naturales l COUNTRIES de
juntura naturales c REGIONS de juntura naturales r
La juntura entre DEPARTMENTS y LOCATIONS crea un ínterin
SET de resultado que consiste en 27 filas. Estas tablas proporcionan columnas de
CIUDAD y el DEPARTMENT_NAME. Este SET es naturalmente afiliado a la
comando de COUNTRIES. Ya que el SET interino no contiene la columna
COUNTRY_ID, una juntura Cartesiano es realizada. Las 27 filas interinas son afiliadas
a las 25 filas en la comando de COUNTRIES, cediendo un nuevo SET de resultados
interino con 675 (2725) filas y tres columnas: DEPARTMENT_NAME, CIUDAD, y
COUNTRY_NAME. Este SET es naturalmente afiliado a la comando de REGIONS.
Otra vez, una juntura Cartesiano ocurre porque la columna REGION_ID es ausente del
SET interino. El SET de resultado final contiene 2700 (675 4) filas y cuatro
columnas. La utilización de junturas naturales puras con tablas múltiples es susceptible
de errores y no recomendada.
El JOINUSING y la sintaxis JOINON son mejor satisfechos para unirse múltiple
tablas. La pregunta siguiente se afilia a cuatro tablas usando la sintaxis de juntura natural
pura:
seleccione region_id, country_id, c.country_name, l.city, d.department_name
de DEPARTMENTS d LOCATIONS de juntura naturales l COUNTRIES de juntura
naturales c REGIONS de juntura naturales r
Esta pregunta correctamente cede 27 filas en el SET de resultados finales desde la
juntura requerida
las columnas son puestas en una lista en la cláusula SENTENCIA. La pregunta siguiente
demuestra como la cláusula JOINON es usada para traer las mismas 27 filas. Una condición de
juntura sólo puede referirse a columnas en su alcance. En el ejemplo siguiente, la juntura
de DEPARTMENTS a LOCATIONS puede no referirse a columnas en los
COUNTRIES o tablas de REGIONS, pero la juntura entre COUNTRIES y REGIONS
puede referirse a cualquier columna de las cuatro tablas implicadas en la pregunta.
seleccione r.region_name, c.country_name, l.city, d.department_name
de DEPARTMENTS d LOCATIONS de juntura l en
(l.location_id=d.location_id) COUNTRIES de juntura c en
(c.country_id=l.country_id) REGIONS de juntura r en
(r.region_id=c.region_id)
328
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

La cláusula JOINUSING también puede ser usada para afiliarse a estas cuatro tablas como sigue:
seleccione r.region_name, c.country_name, l.city, d.department_name de DEPARTMENTS d
LOCATIONS de juntura l usando (location_id) COUNTRIES de juntura c usando
(country_id) REGIONS de juntura r usando (region_id)
EL DONDE la cláusula es usada para especificar condiciones que restringen el SET de resultados de a
pregunte si esto contiene junturas o no. La cláusula JOINON también es usada para
especificar condiciones que limitan el SET de resultados creado por la juntura. Considere
las dos preguntas siguientes:
La consulta 1: seleccione d.department_name de DEPARTMENTS d
LOCATIONS de juntura l en (l. LOCATION_ID=d. LOCATION_ID) donde
d.department_name como 'P %'

La consulta 2: seleccione d.department_name de DEPARTMENTS d


LOCATIONS de juntura l en (l. LOCATION_ID=d. LOCATION_ID y
d.department_name como 'P %')
La consulta 1 usa un DONDE cláusula para restringir las 27 filas creadas por
equijoining el
Las tablas de LOCATIONS y DEPARTMENTS basadas en su LOCATION_ID valoran
a los tres que contienen valores de DEPARTMENT_ID que comienzan con la carta P.
La consulta 2 pone en práctica la condición dentro de los soportes del EN la
subcláusula y devuelve las mismas tres filas.
Cinco tablas son afiliadas en la Figura 7-7, causando una lista que describe a los
EMPLOYEES de ganancia superiores e información geográfica sobre sus
DEPARTMENTS.

Hay tres formatos de juntura naturales. La juntura natural pura usa la cláusula
de JUNTURA NATURAL y se afilia a dos tablas basadas en todas las columnas con nombres
compartidos. Los otros dos formatos usan el JOINUSING y cláusulas JOINON y también
son referidos junturas como naturales. Ellos no usan la palabra clave NATURAL.

Preste la atención a la sintaxis, desde una cláusula de juntura tal como SENTENCIA * DE LA
JUNTURA NATURAL TABLE1 TABLE2 USANDO (LA COLUMNA) puede parecer correcto, pero
es, de hecho, sintácticamente incorrecto. Recuerde la UTILIZACIÓN, EN, y las palabras claves
NATURALES son mutuamente exclusivas en el contexto de la misma cláusula de juntura.
Escriba Select SENTENCIAS a Access Data Using Equijoins y Nonequijoins
329
FIGURA 7-7

El N-camino se une y
condiciones de juntura
adicionales

Nonequijoins
Nonequijoins emparejan valores de columna de tablas diferentes basadas en una
expresión de desigualdad. El valor de la columna de juntura en cada fila en la comando
de la fuente es comparado con los valores correspondientes en la comando objetivo.
Un partido es encontrado si la expresión usada en la juntura, basada en un operador de
desigualdad, evalúa al verdadero. Cuando tal juntura es construida, un nonequijoin es
realizado.
Un nonequijoin es especificado usando la sintaxis JOINON, pero la condición de juntura
contiene a un operador de desigualdad en vez de un signo igual.
330
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

El formato de la sintaxis para una cláusula nonequijoin es como sigue: SELECCIONE table1.column,
table2.column DE table1 [SE UNEN table2 EN (table1.column_name <table2.column_name)] | [SE UNEN
table2 EN (table1.column_name> table2.column_name)] | [SE UNEN table2 EN (table1.column_name <=
table2.column_name)] | [SE UNEN table2 EN (table1.column_name> = table2.column_name)] | [SE
AFILIAN a table2 EN (table1.column ENTRE table2.col1 Y table2.col2)] | Consideran las 15 primeras
filas devueltas por la pregunta en la Figura 7-8. Los EMPLOYEES
la comando es nonequijoined a la comando de JOBS basada en la condición de
juntura de desigualdad (2*E.SALARY <J.MAX_SALARY). La comando de JOBS
almacena la variedad de sueldo para JOBS diferentes en la organización. El valor de
SUELDO para cada registro de empleado es

FIGURA 7-8

Nonequijoins
Afíliese a una Comando a Sí Usando una
Autojuntura
331

doblado y comparado con todo MAX_SALARY valora en la comando de JOBS. Si la


condición de juntura evalúa al verdadero, la fila es devuelta.
Las dos primeras filas muestran al empleado con un LAST_NAME de Abel que
actualmente tiene un valor JOB_ID de SA_REP y gana un SUELDO de 11000. Éstos
son las sólo dos filas en la comando de JOBS que satisfacen la condición de juntura de
desigualdad (2*E.SALARY <J.MAX_SALARY) para este registro de empleado.

Nonequijoins no son comúnmente usados. El ENTRE el operador de variedad a


menudo aparece con condiciones nonequijoin. Es más simple usar un ENTRE el
operador en una condición que dos condiciones nonequijoin basadas en el
menos que o igual a (<=) y el mayor que o igual a (> =) operadores.

OBJETIVO DE CERTIFICACIÓN 7.02

Afíliese a una Comando a Sí Usando una Autojuntura


El almacenaje de datos jerárquicos en una comando relacional sola es llevado a cabo
asignando en
la menor parte dos columnas por fila. Una columna almacena un identificador del registro
paternal de la fila y las segundas tiendas el identificador de la fila. La asociación de filas el
uno con el otro basado en una relación jerárquica requiere que el Oracle se afilie a una
comando a sí. Hablan de esta técnica de autojuntura en la siguiente sección.

La conexión a una Comando a Sí Usando la Cláusula JOINON


Suliste que hay una necesidad de almacenar un árbol genealógico en una comando
relacional. Hay varios
enfoques uno podría tomar. Una opción es usar una comando llamada la FAMILIA con
columnas llamadas ID, NOMBRE, MOELR_ID, y FAELR_ID, donde cada fila
almacena nombre de una persona, Número de identificación único, y los valores de ID
para sus padres.
Cuando dos tablas son afiliadas, cada fila de la comando de la fuente es sujetada a la
condición de juntura con filas de la comando objetivo. Si la condición evalúa al
verdadero, entonces la fila afiliada, consistiendo en columnas de ambas tablas, es
devuelta.
Cuando las columnas de juntura provienen de la misma comando, se requiere una
autojuntura. Conceptualmente, la comando de la fuente es duplicada para crear la
comando objetivo. La autojuntura trabaja como una juntura regular entre estas tablas.
Note que, internamente, el Oracle no hace
332
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

duplique la comando y esta descripción es simplemente proporcionada para explicar el


concepto de la autoconexión. Considere las cuatro preguntas siguientes:
La consulta 1: seleccione id, nombre, faelr_id de la familia; la
Consulta 2: seleccione el nombre de la familia donde id=&faelr_id;
la Consulta 3: seleccione al papá f1.name, f2.name Niño de la
familia f1 familia de juntura f2 en (f1.id=f2.faelr_id)
Para identificar al padre de una persona en la comando de FAMILIA, usted podría usar
la consulta 1 para ponerse
ID de aquella persona, NOMBRE, y valor de FAELR_ID. En la consulta 2, el valor de
FAELR_ID obtenido de la primera pregunta puede ser substituido para obtener el valor
de NOMBRE del padre. Note que amba información de la fuente de consultas 1 y 2 de
la comando de FAMILIA.
La consulta 3 realiza una autojuntura con la cláusula JOINON por aliasing la comando
de FAMILIA como f1 y f2. El oracle trata éstos como tablas diferentes aunque ellos
señalen a la misma comando física. El primer acontecimiento de la comando de
FAMILIA, aliased como f1, es designado como la comando de la fuente, mientras el
segundo acontecimiento, aliased como f2, es adjudicado como la comando objetivo. La
condición de juntura en el EN la cláusula es de la fuente child_ de formato
id=target.parent_id. La figura 7-9 muestra una muestra de datos de FAMILIA y demuestra
una autojuntura de tres caminos a la misma comando.

EJERZA 7-3 Realización de


una Autojuntura
Hay una relación jerárquica entre EMPLOYEES y sus gerentes. Ya que cada fila en la
comando de EMPLOYEES la columna MANAGER_ID almacena el EMPLOYEE_ID
del gerente de cada empleado. Usando una autojuntura en la comando de EMPLOYEES, se
requiere que usted recupere LAST_NAME del empleado, EMPLOYEE_ID,
LAST_NAME del gerente, y DEPARTMENT_ID del empleado para las filas con valores
DEPARMENT_ID de 10, 20, o 30. Alias la comando de EMPLOYEES como E y el
segundo instancia de la comando de EMPLOYEES como M de Clase los resultados
basados en la columna DEPARTMENT_ID.

1. Comience al Developer SQL y conecte al esquema de HORA. 2. La cláusula


SENTENCIA es
SELECCIONE A EMPLEADO E.LAST_NAME, E.EMPLOYEE_ID,
E.MANAGER_ID, M LAST_NAME DE GERENTE, E.DEPARTMENT_ID.
3. El DE la cláusula con comando de la fuente y alias es
DE EMPLOYEES E.
Afíliese a una Comando a Sí Usando una
Autojuntura
333

FIGURA 7-9

Autojuntura

4. La cláusula JOINON con la comando objetivo de aliased es


ACOMPAÑE A EMPLOYEES M EN
(E.MANAGER_ID=M.EMPLOYEE_ID). 5. El DONDE cláusula es
DONDE E.DEPARTMENT_ID EN (10,20,30). 6. El PEDIDO POR
cláusula es
PEDIDO POR E.DEPARTMENT_ID.
334
Capítulo 7:
La pruebas de Datos de Tablas Múltiples
7. La ejecución de esta select devuelve nueve filas que describen a los gerentes de cada uno
empleado en estos DEPARTMENTS como mostrado en la ilustración siguiente:

OBJETIVO DE CERTIFICACIÓN 7.03

Datos de vista Que no Encuentran una Condición de


Juntura Usando Junturas Externas
Equijoins emparejan filas entre dos tablas basadas en la igualdad de los datos de columna
almacenado en cada comando. Nonequijoins confían en filas correspondientes entre tablas
basadas en una condición de juntura que contiene una expresión de desigualdad. Las filas
de comando objetivo sin la columna de juntura correspondiente en la comando de la
fuente no se requieren por lo general. Cuando ellos son
Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas
Externas
335

requerido, sin embargo, una juntura externa es usada para traerlos. Varias variaciones de
junturas externas pueden ser usadas según si los datos de columna de juntura faltan en la
fuente o tablas objetivo o ambos. Estas técnicas de juntura externas son descritas en los
temas siguientes:

■ Interior contra junturas externas ■ junturas externas Izquierdas ■ junturas


externas Correctas ■ junturas externas Llenas

Interior contra Junturas Externas


Cuando equijoins y nonequijoins son realizados, filas de la fuente y objetivo
las tablas son emparejadas usando una condición de juntura formulada con operadores
de desigualdad e igualdad, respectivamente. Éstos se mencionan como junturas interiores.
Una juntura externa es realizada cuando las filas, que no son recuperadas por una
juntura interior, son devueltas.
Dos tablas a veces comparten la relación de niño paternal o un detalle del maestro. En
el esquema de HORA de muestra hay varios pares de tablas con tal relación. Un par es
tablas de EMPLOYEES y los DEPARTMENTS. La comando de DEPARTMENTS
almacena una lista de maestro de valores de DEPARTMENT_ID y
DEPARTMENT_NAME. Cada los EMPLOYEES registran hace reprimir una columna
DEPARTMENT_ID a ser un valor que existe en la comando de DEPARTMENTS o
nulo. Esto lleva a uno de los tres guiones siguientes. El cuarto guión podría ocurrir si la
coacción entre las tablas fuera borrada.

1. Una fila de empleado tiene un valor de DEPARTMENT_ID que empareja una


fila en el
Comando de DEPARTMENTS. 2. Una fila de empleado tiene un valor nulo en
su columna DEPARTMENT_ID. 3. Hay filas en la comando de DEPARTMENTS
con DEPARTMENT_ID
los valores que no son almacenados en ningún archivo de empleado.
4. Una fila de empleado tiene un valor de DEPARTMENT_ID que no es
presentado en el
Comando de DEPARTMENTS.

El primer guión describe una juntura interior natural entre las dos tablas. Los
segundos y terceros guiones causan muchos problemas. La conexión a los
EMPLOYEES y tablas de DEPARTMENTS causa filas de empleado excluidas. Una
juntura externa puede ser usada para incluir estas filas quedadas huérfanas en el SET de
resultados. El cuarto guión debería ocurrir raramente en una base de datos bien diseñada,
porque las coacciones de clave foránea prevendrían la introducción de archivos de niño
sin valores paternales. Ya que esta fila será excluida por una juntura interior, puede ser
recuperada usando una juntura externa.
336
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

Una juntura externa izquierda entre la fuente y tablas objetivo devuelve los resultados de un
la juntura interior así como las filas de la comando de la fuente excluida por aquella
juntura interior. Una juntura externa correcta entre la fuente y tablas objetivo
devuelve los resultados de una juntura interior así como filas de la comando objetivo
excluida por aquella juntura interior. Si una juntura devuelve los resultados de una
juntura interior así como filas de ambos la fuente y tablas objetivo excluidas por
aquella juntura interior, entonces una juntura externa llena ha sido realizada.

Junturas Externas
izquierdas
El formato de la sintaxis para la cláusula de JUNTURA EXTERNA IZQUIERDA es
como siga:
SELECCIONE table1.column, table2.column
DE table1 DEJÓ LA JUNTURA EXTERNA table2 EN (table1.column =
table2.column); Una juntura externa izquierda realiza una juntura interior de table1 y
table2 basado en el
condición especificada después el EN palabra clave. Cualquier fila de la comando a la
izquierda de la palabra clave de JUNTURA excluida para no realizar la condición de
juntura también es devuelta. Considere las dos preguntas siguientes:
La consulta 1: seleccione e.employee_id, e.department_id
EMP_DEPT_ID, d.department_id DEPT_DEPT_ID, d.department_name de
DEPARTMENTS el d abandonó a EMPLOYEES de juntura externos e en (d.
DEPARTMENT_ID=e. DEPARTMENT_ID) donde d.department_name como 'P %' la
Consulta 2: seleccione e.employee_id, e.department_id EMP_DEPT_ID,
d.department_id DEPT_DEPT_ID, d.department_name de DEPARTMENTS los d
acompañan a EMPLOYEES e en (d. DEPARTMENT_ID=e. DEPARTMENT_ID) donde
d.department_name como 'P %'
Las consultas 1 y 2 son idénticas excepto las cláusulas de juntura, que tienen las
palabras claves
JUNTURA EXTERNA IZQUIERDA y JUNTURA, respectivamente. La consulta 2
realiza una juntura interior y siete filas son devueltas. Estas filas comparten valores de
DEPARTMENT_ID idénticos en ambas tablas. La consulta 1 devuelve las mismas siete
filas y una fila adicional. Esta fila suplementaria es obtenida de la comando a la
izquierda de la palabra clave de JUNTURA, que es la comando de DEPARTMENTS.
Es la fila que contiene detalles del departamento de Nómina. La juntura interior no
incluye esta fila ya que ningunos EMPLOYEES son adjudicados actualmente al
departamento.
Una juntura externa izquierda es mostrada en la Figura 7-10. La juntura interior
produce 27 filas con emparejar valores de LOCATION_ID en ambas tablas. Hay 43
filas en total, que implica que 16 filas fueron recuperadas de la comando de
LOCATIONS, que está en el
Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas
Externas
337

FIGURA 7-10

Juntura externa izquierda


dejado de la palabra clave de JUNTURA. Ninguna de las filas de la comando de
DEPARTMENTS contiene cualquier de estos 16 valores de LOCATION_ID.

Junturas Externas
correctas
El formato de la sintaxis para la cláusula de JUNTURA EXTERNA
CORRECTA es como sigue:
SELECCIONE table1.column, table2.column
DE JUNTURA EXTERNA CORRECTA table1 table2 EN (table1.column =
table2.column);
338
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

Una juntura externa correcta realiza una juntura interior de table1 y table2 basado en la juntura
condición especificada después el EN palabra clave. Las filas de la comando a la derecha
de la palabra clave de JUNTURA, excluida por la condición de juntura, también son
devueltas. Considere la pregunta siguiente:
seleccione e.last_name, d.department_name de DEPARTMENTS d EMPLOYEES
de juntura externos correctos e en (e.department_id=d.department_id)
donde e.last_name como 'G %';
La juntura interior produce siete filas que contienen detalles para los EMPLOYEES
con
Los valores de LAST_NAME que comienzan con G. La comando de EMPLOYEES es a
la derecha de la palabra clave de JUNTURA. Cualquier archivo de empleado que no se
conforme con la condición de juntura es incluido, a condición de que ellos se
conformen con el DONDE condición de cláusula. Además, la juntura externa correcta
trae un registro de EMPLEADO con un LAST_NAME de Subvención. Este registro
actualmente tiene un valor de DEPARTMENT_ID nulo. La juntura interior excluye el
registro ya que ningún DEPARTMENT_ID es adjudicado a este empleado.
Una juntura externa correcta entre el JOB_HISTORY y tablas de EMPLOYEES es
mostrada en la Figura 7-11. La comando de EMPLOYEES es a la derecha de la palabra
clave de JUNTURA. La palabra clave DISTINTA elimina combinaciones duplicadas de
valores de JOB_ID de las tablas. Los resultados muestran los JOBS que los
EMPLOYEES se han marchado históricamente. Los JOBS que ningunos EMPLOYEES
han dejado también son devueltos.

Hay tres tipos de formatos de juntura externos. Cada uno de ellos realiza una
juntura interior antes incluso filas la condición de juntura excluida. Si una juntura externa
izquierda es realizada entonces filas excluidas por el

Junturas Externas llenas

la juntura interior, a la izquierda de la palabra clave de JUNTURA, también es devuelta. Si una


juntura externa correcta es realizada entonces las filas excluidas por la juntura interior, a la
derecha de la palabra clave de JUNTURA, son devueltas también.
El formato de la sintaxis para la cláusula de JUNTURA EXTERNA LLENA es
como sigue:
SELECCIONE table1.column, table2.column
DE JUNTURA EXTERNA LLENA table1 table2 EN (table1.column =
table2.column);
Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas
Externas
339

FIGURA 7-11

Juntura externa correcta


Una juntura externa llena devuelve los resultados combinados de una juntura externa
derecha e izquierda. Una juntura interior de table1 y table2 es realizada antes de que las
filas excluidas por la condición de juntura de ambas tablas sean fusionadas en el SET de
resultados.
La sintaxis de juntura de Oracle tradicional no apoya una juntura externa llena, que
es típicamente realizada combinando los resultados de una juntura externa derecha e
izquierda usando al operador de SET de UNIÓN descrito en el Capítulo 9. Considere
la juntura externa llena mostrada en la Figura 7-12. El DONDE la cláusula que
restringe los resultados a filas con valores de DEPARTMENT_ID nulos muestra las
filas huérfanas en ambas tablas. Hay un registro en la comando de EMPLOYEES que
no tiene ningunos valores de DEPARTMENT_ID, y hay 16 DEPARTMENTS a los
cuales ningunos EMPLOYEES pertenecen.
340
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

FIGURA 7-12

Juntura externa llena


EJERZA 7-4 Realización de una Juntura externa
La comando de DEPARTMENTS contiene detalles de todos los DEPARTMENTS en la
organización.
Se requiere que usted recupere el DEPARTMENT_NAME y valores de
DEPARTMENT_ID para aquellos DEPARTMENTS a los cuales ningunos
EMPLOYEES son adjudicados actualmente.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La cláusula


SENTENCIA es
SELECCIONE D.DEPARTMENT_NAME, D.DEPARTMENT_ID.
Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas
Externas

GUIÓN & SOLUCIÓN


341
Los datos en dos tablas a las cuales usted desea afiliarse están relacionados, pero no comparten ninguna columna
idénticamente llamada. ¿Es posible afiliarse a tablas usando columnas que no comparten el mismo nombre? Usted
desea dividir al personal en cuatro grupos nombrados por las cuatro REGIONS en la comando de REGIONS. ¿Es
posible obtener una lista de EMPLOYEE_ID, LAST_NAME, y valores de REGION_NAME para cada empleado
afiliándose al EMPLOYEE_ID y columnas REGION_ID en una manera de retorno al punto de origen?

Se requiere que usted recupere una lista de NOMBRE de DEPARTMENT_ y valores de LAST_NAME para todos los
DEPARTMENTS, incluso aquellos que actualmente no tienen ningunos EMPLOYEES adjudicados a ellos. En tales
instancias la cuerda 'Ningunos EMPLOYEES' debería ser mostrada como el valor de columna de NOMBRE de LAST_.
¿Puede esto ser hecho usando junturas?
Sí. La cláusula JOINON es proporcionada para este fin. Esto proporciona una solución flexible y genérica de tablas que
se unen basadas en nombres de columna no idénticos.

Sí. Los REGION_ID valoran variedades de 1 a 4. La adición 1 al resto de EMPLOYEE_ID dividido en 4 crea un
valor en la variedad 1 a 4. La asignación de retorno al punto de origen de EMPLOYEES puede ser hecha como sigue:
SELECCIONE LAST_NAME, EMPLOYEE_ID, REGION_NAME, DE EMPLOYEES SE AFILIAN A REGIONS
EN (MOD (EMPLOYEE_ID, 4) +1 = REGION_ID) Sí. Según cual lado de la palabra clave de JUNTURA la
comando de DEPARTMENTS es colocada, una juntura externa izquierda o correcta puede ser usada, ya que esto es
la comando de donde las filas huérfanas provienen. La pregunta siguiente satisface la solicitud: SELECCIONE
DEPARTMENT_NAME, NVL (NOMBRE de LAST_, 'Ningunos EMPLOYEES) del DERECHO DE EMPLOYEES
DEPARTMENTS DE JUNTURA EXTERNOS USANDO (DEPARTMENT_ID)

3. El DE la cláusula con comando de la fuente y alias es


DE LAS OFICINAS D. 4. La cláusula de JUNTURA
EXTERNA IZQUIERDA con comando objetivo de aliased es
EMPLOYEES DE JUNTURA EXTERNOS ABANDONADOS E
EN E.DEPARTMENT_ID=D.DEPARTMENT_ID.
5. El DONDE la cláusula es
DONDE E.DEPARTMENT_ID ES NULO.
342
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

6. La ejecución de esta select devuelve dieciséis filas que describen los DEPARTMENTS a
que ningunos EMPLOYEES son adjudicados actualmente como mostrado en la ilustración siguiente:

OBJETIVO DE CERTIFICACIÓN 7.04


Genere un producto Cartesiano de Dos o MoreTables
Un producto Cartesiano de dos tablas puede ser conceptuado como afiliándose a cada
fila del
comando de la fuente con cada fila en la comando objetivo. El número de filas en el
SET de resultado creado por un producto Cartesiano es igual al número de filas en la
comando de la fuente multiplicada por el número de filas en la comando objetivo. Los
productos cartesianos pueden ser formados intencionadamente usando el ANSI
SQL:1999 sintaxis de juntura enfadada. Esta técnica es descrita en la siguiente sección.

La creación de productos Cartesianos Usando Junturas Enfadadas


El producto cartesiano es un término matemático. Esto se refiere al SET de datos
creados por
la fusión de las filas de dos o más tablas juntos. La juntura enfadada es la sintaxis usada
Genere un producto Cartesiano de Dos o más Tablas
343

crear un producto Cartesiano afiliándose a tablas múltiples. Ambos términos a menudo son
usados sinónimamente. El formato de la sintaxis para la cláusula de JUNTURA
ENFADADA es como sigue:
SELECCIONE table1.column, table2.column DE LA CRUZ de table1 SE AFILIAN a
table2;
Es importante observar que ninguna condición de juntura es especificada usando el EN o
USANDO palabras claves. Un producto Cartesiano libremente asocia las filas de table1 con
cada fila en table2. Las condiciones que limitan los resultados son permitidas en la forma
de DONDE restricciones de cláusula. Si table1 y table2 contienen x y el número y de filas,
respectivamente, el producto Cartesiano contendrá tiempos x y el número de filas. Los
resultados de una juntura enfadada pueden ser usados para identificar filas huérfanas o
generar un conjunto de datos grande para el uso en pruebas de aplicación. Considere las
preguntas siguientes:
La consulta 1: seleccione * de job_history de juntura de cruz de JOBS;
la Consulta 2: seleccione * de JOBS j cruz se afilian a job_history jh
donde j.job_id ='AD_PRES';
La consulta 1 toma las 19 filas y 4 columnas de la comando de JOBS y las 10 filas y
5 columnas de la comando JOB_HISTORY y generan un SET grande de 190 archivos con 9
columnas. SQL*Plus presenta cualquier columna idénticamente llamada como títulos. El
Developer de SQL añade subrayar y número a cada nombre de columna compartido y lo
usa como el título. La columna JOB_ID es común tanto a los JOBS como a tablas
JOB_HISTORY. Los títulos en el Developer SQL son marcados JOB_ID y
JOB_ID_1, respectivamente. La consulta 2 genera el
mismo producto Cartesiano que el primer, pero las
190 filas son reprimidas por el DONDE cláusula
Usando la cruz
La figura 7-13 muestra que una juntura enfadada
entre la sintaxis de juntura, un producto Cartesiano es
las REGIONS y tablas de COUNTRIES.
intencionadamente generado. Involuntario
Hay 4 filas en REGIONS y 25 filas los productos
Cartesianos son creados cuando
en COUNTRIES. Desde el DONDE la cláusula t h e
re un re i n s u f fi c i e n t j o i n c o n d i t i o n s i n
limita la comando de REGIONS con 2 de 4 filas, un
s t un t e m e n t. J o i n s t h un t s p e c i f y f ew e r
el producto Cartesiano produce 50 (252)
que n-1 se afilian a condiciones uniéndose
comando alfabético, N tablas o que especifican laarchivos. Los resultados son clasificados por
juntura inválida
condiciones puede crear por descuido primero en el REGION_NAME y luego en las
productos Cartesianos. Una juntura natural pura COUNTRY_NAME. El primer registro tiene
dos tablas que comparten no idénticamente el par de valores, Asia y Argentina. Cuando entre
llamadas del primer registro causan una juntura Cartesiano los cambios de REGION_NAME, las columnas
dos tablas son afiliadas, pero menos que tiene el par de valores, África y Argentina. ya que
una condición está disponible. Note que los valores de COUNTRY_NAME son
repetido para cada REGION_NAME.
la condición y sólo 10 filas son devueltas.
344
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

FIGURA 7-13

La juntura enfadada
EJERZA 7-5 Realización de una Juntura enfadada
Se requiere que usted obtenga el número de filas en los EMPLOYEES y
La comando de DEPARTMENTS así como el número de archivos que serían creados
Genere un producto Cartesiano de Dos o más Tablas
345

por un conducto pro Cartesiano de estas dos tablas. Confirme sus resultados contando explícitamente y
multiplicando el número de filas presentes en cada una de estas tablas.

1. Comience SQL*Plus y conecte al esquema de HORA. 2. La cláusula SENTENCIA para


encontrar el número de filas en el producto Cartesiano es
SELECCIONE AL CONDE (*).
3. El DE la cláusula es
DE EMPLOYEES.
4. El producto Cartesiano es realizado usando
CRÚCESE SE AFILIAN A DEPARTMENTS.
5. Los cargos explícitos por las filas presentes en las tablas de la fuente son realizados usando
SELECCIONE AL CONDE (*) DE EMPLOYEES; SELECCIONE AL CONDE (*) DE
DEPARTMENTS;
6. La multiplicación explícita de los valores que resultan de las preguntas anteriores puede
sea realizado preguntando la comando DUAL.
7. La ejecución de estas select revela que hay 107 archivos en el
Comando de EMPLOYEES, 27 archivos en la comando de DEPARTMENTS, y 2889 archivos en el
conducto pro Cartesiano de estos dos conjuntos de datos como mostrado en la ilustración siguiente:
346
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

DENTRO DEL EXAMEN


La conexión es un principio relacional fundamental. Los objetivos de certificación en este capítulo son
examinados usando guiones prácticos en los cuales dos tablas son afiliadas. Se requiere que usted
prediga el número de filas devueltas por una pregunta de juntura o tase si es syntacti-cally correcto o no.
Las cláusulas de juntura naturales incluyen la JUNTURA NATURAL, JOINUSING, y JOINON.
Recuerde las reglas simples siguientes. Las palabras claves NATURALES, UTILIZACIÓN, y EN
son mutuamente exclusivas. Ellos no pueden ser usados juntos en la misma cláusula de juntura. La
juntura NATURAL pura no toma ningunas condiciones de juntura. La cláusula JOINUSING requiere
unquali-fied referencias de columna en condiciones de juntura, que deben parecer entre paréntesis
después de la palabra clave de UTILIZACIÓN.
Las autojunturas a menudo son usadas para averiguar datos jerárquicos almacenados en columnas
separadas en la misma comando. Es una juntura poco común y poco hincapié es hecho en pruebas de
su conocimiento de autoparticipa en el examen. Las junturas externas, sin embargo, forman una parte
significativa del contenido de examen. Asegure que usted tiene un entendimiento sólido de junturas
EXTERNAS IZQUIERDAS, CORRECTAS, y LLENAS.
Los productos cartesianos pueden ser creados inad-vertently o intencionadamente utilización de la
cláusula de JUNTURA ENFADADA. Un error con frecuencia hecho en las etapas tempranas del
aprendizaje sobre junturas es especificar menos condiciones de juntura que son neces-sary afiliándose a
tablas múltiples. Esto lleva a junturas Cartesianos casuales y es a veces probado en los exámenes.
Recuerde que uniéndose N tablas, al menos n-1 condiciones de juntura se requieren evitar una juntura
Cartesiano.

RESUMEN DE CERTIFICACIÓN
Los datos almacenados en tablas separadas pueden tener que ver el uno con el otro
usando diversos tipos
de junturas. Las junturas permiten que datos sean almacenados en una manera
relacional. Esto previene la necesidad de copias múltiples de los mismos datos a través
de tablas múltiples.
Equijoins y nonequijoins se mencionan como junturas interiores. Ellos asocian filas de
tablas múltiples que se conforman para afiliarse a condiciones y son especificadas
usando a operadores de desigualdad o igualdad. Las filas que no se conforman con estas
condiciones de juntura, que son generalmente excluidas por junturas interiores, pueden
ser recuperadas con junturas externas. Las junturas externas izquierdas, correctas, y
llenas facilitan la recuperación de filas huérfanas.
Hablan de la sintaxis de juntura SQL:1999-dócil ANSI detalladamente, y tres formas
de la juntura natural son exploradas. Cada forma tiene un objetivo, y las ventajas y
arriesga asociado con ellos se consideran.
Resumen de certificación
347

Las junturas asocian columnas de tablas múltiples que pueden compartir el mismo nombre. La nota de
punto usa un método de calificar a columnas para quitarles la ambigüedad. Es acompañado por la
comando aliasing, que no es estrictamente esencial, pero ayuda a mucho formulando junturas entre tablas
con nombres larguísimos.
La recuperación de datos jerárquicos almacenados en una comando sola usando autojunturas se
considera. De N-camino las junturas permiten que más de dos tablas sean afiliadas, y hablan de esta
opción generalizada. Finalmente, las junturas enfadadas y los desafíos únicos asociados con ellos son
examinados.
La conexión es uno de los pilares fundamentales de la teoría relacional y es crítica a su explotación
acertada del potencial lleno esto ofertas de SQL.
348
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

TALADRADORA DE DOS MINUTOS
Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using
Equijoins y Nonequijoins
❑ Equijoining ocurre cuando una pregunta trae valores de columna de tablas múltiples
en que las filas realizan una condición de juntura basada en la igualdad.
❑ Una juntura natural pura es realizado usando la sintaxis de JUNTURA NATURAL cuando el
la fuente y las tablas objetivo son implícitamente equijoined usando todas las columnas
idénticamente llamadas.
❑ La sintaxis JOINUSING permite que una juntura natural sea formada en el específico
columnas con nombres compartidos.
❑ nota de Dot se refiere a la calificación a una columna prefijándolo con su nombre de tabla
y un punto o símbolo de período. Esto designa la comando de la cual una columna proviene
y lo diferencia de columnas idénticamente llamadas de otras tablas.
❑ La cláusula JOINON permite la especificación explícita de columnas de juntura
sin tener en cuenta sus nombres de columna. Esto proporciona un formato de conexión
flexible.
Los  el EN, UTILIZACIÓN, y palabras claves NATURALES son mutuamente exclusivos y
por lo tanto no puede aparecer juntos en una cláusula de juntura.
❑ Un nonequijoin es realizado cuando los valores en las columnas de juntura realizan la juntura
condición basada en una expresión de desigualdad.

Afíliese a una Comando a Sí Usando una Autojuntura


❑ Una autojuntura se requiere cuando las columnas de juntura provienen de la misma
comando.
Conceptualmente, la comando de la fuente es duplicada y una comando objetivo es creada.
La autojuntura entonces trabaja como una juntura regular entre dos tablas distintas.
❑ Almacenaje de datos jerárquicos en una comando relacional requiere mínimo de dos
columnas por fila. Una columna almacena un identificador del registro paternal de la fila y
las segundas tiendas el identificador de la fila.

Vista DataThat no Encuentra una Condición de Juntura Usando Junturas


Externas
❑ Cuando equijoins y nonequijoins son realizados, filas de la fuente y
las tablas objetivo son emparejadas. Éstos se mencionan como junturas interiores.
Taladradora de dos minutos
349
❑ Una juntura externa es realizado cuando las filas, que no son recuperadas por un interior
únase, son incluidos para la recuperación.
❑ Una juntura externa izquierda entre la fuente y tablas objetivo devuelve los resultados de un
juntura interior y las filas ausentes esto excluyó de la comando de la fuente.
❑ Una juntura externa correcta entre la fuente y tablas objetivo devuelve los resultados de un
juntura interior y las filas ausentes esto excluyó de la comando objetivo.
❑ Una juntura externa llena devuelve los resultados combinados de una juntura externa izquierda y
derecho externo
juntura.

Genere un producto Cartesiano de Dos o más Tablas


❑ Un producto Cartesiano es a veces llamado una juntura enfadada. Es un matemático
el término que se refiere al SET de datos creados fusionando las filas de dos o más tablas.
❑ El cargo por las filas devueltas de un producto Cartesiano es igual al num-
el ber de filas en la comando de la fuente se multiplicó por el número de filas en la comando
objetivo.
❑ Junturas que especifican a menos que condiciones de juntura de n-1 uniéndose N tablas, o
esto especifica condiciones de juntura inválidas, por descuido crea productos Cartesianos.
350
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

MÍ PRUEBA
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque puede haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.

Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using


Equijoins y Nonequijoins
1. Los EMPLOYEES y las tablas de DEPARTMENTS tienen dos columnas idénticamente llamadas:
DEPARTMENT_ID y MANAGER_ID. ¿Cuál de estas select se afilia a estas tablas basadas sólo en
valores de DEPARTMENT_ID comunes? (Elija todo que se aplican.) A. SELECCIONE * DE
EMPLOYEES DEPARTMENTS DE JUNTURA NATURALES; B. SELECCIONE * DE
EMPLOYEES E DEPARTMENTS DE JUNTURA NATURALES D EN
E.DEPARTMENT_ID=D.DEPARTMENT_ID;
C. SELECCIONE * DE EMPLOYEES UTILIZACIÓN DE DEPARTMENTS DE JUNTURA
NATURAL
(DEPARTMENT_ID);
D. Ninguno de los susodichos
2. Los EMPLOYEES y las tablas de DEPARTMENTS tienen dos columnas idénticamente llamadas:
DEPARTMENT_ID y MANAGER_ID. ¿Qué select se afilian a estas tablas basadas en ambos
valores de columna? (Elija todo que se aplican.) A. SELECCIONE * DE EMPLOYEES
DEPARTMENTS DE JUNTURA NATURALES; B. SELECCIONE * DE LA UTILIZACIÓN DE
DEPARTMENTS DE JUNTURA DE EMPLOYEES (DEPARTMENT_
ID, MANAGER_ID);
C. SELECCIONE * DE EMPLOYEES E SE AFILIAN A DEPARTMENTS D EN
E.DEPARTMENT_
ID=D.DEPARTMENT_ID Y E.MANAGER_ID=D.MANAGER_ID;
D. Ninguno de los susodichos
3. ¿Qué juntura es realizada por la pregunta siguiente?
SELECCIONE E.JOB_ID, J.JOB_ID DE EMPLOYEES E SE AFILIAN A JOBS J EN (E.SALARY
<J.MAX_SALARY); (Elija la mejor respuesta.) A. Equijoin B. Nonequijoin C. Juntura enfadada
D. Juntura externa
4. ¿Cuáles de las select siguientes es sintácticamente correcta? (Elija todo que se aplican.)
A. SELECCIONE * DE EMPLOYEES E SE AFILIAN A DEPARTMENTS D USANDO
(DEPARTMENT_ID); B. SELECCIONE * DE DEPARTMENTS DE JUNTURA DE EMPLOYEES
D USANDO (D.DEPARTMENT_ID);
Mí Prueba
351

C. SELECCIONE D.DEPARTMENT_ID DE DEPARTMENTS DE JUNTURA DE EMPLOYEES


D UTILIZACIÓN
(DEPARTMENT_ID);
D. Ninguno de los susodichos
5. ¿Cuáles de las select siguientes es sintácticamente correcta? (Elija todo que se aplican.)
A. SELECCIONE E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, E.JOB_ID CURRENT_JOB DE
LOS JOB_HISTORY J CRUZ ACOMPAÑAN A EMPLOYEES E EN
(J.START_DATE=E.HIRE_DATE);
B. SELECCIONE E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, E.JOB_ID CURRENT_JOB
DE JOB_HISTORY LOS J ACOMPAÑAN A EMPLOYEES E EN
(J.START_DATE=E.HIRE_DATE);
C. SELECCIONE E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, E.JOB_ID CURRENT_JOB
DE JOB_HISTORY J EMPLOYEES DE JUNTURA EXTERNOS E EN (J.START_DATE=E.
HIRE_DATE);
D. Ninguno de los susodichos
6. Elija una select correcta en cuanto a la pregunta siguiente:
SELECCIONE * DE EMPLOYEES E SE AFILIAN A DEPARTMENTS D EN
(D.DEPARTMENT_ID=E.DEPARTMENT_ID) LOCATIONS DE JUNTURA L EN
(L.LOCATION_ID =D.LOCATION_ID); no permiten a A. Joining tres tablas. B. Un producto
Cartesiano es generado. C. La cláusula JOINON puede ser usada para junturas entre tablas múltiples. D.
Ninguno de los susodichos

Afíliese a una Comando a Sí Usando una Autojuntura


7. ¿Cuántas filas son devueltas después de ejecutar la select siguiente?
SELECCIONE * DE REGIONS REGIONS DE JUNTURA de R1 R2 EN (R1.
REGION_ID=LENGTH (R2. REGION_NAME)/2); La comando de REGIONS contiene los datos
de fila siguientes. (Elija la mejor respuesta.)

REGION_ID
1234
REGION_NAME
Europa Américas Asia Oriente Medio y África
A. 2B. 3C. 4D.
Ninguno de los susodichos
352
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas


Externas
8. Elija una select correcta en cuanto a la pregunta siguiente.
SELECCIONE C.COUNTRY_ID DE LOCATIONS L COUNTRIES DE JUNTURA EXTERNOS
CORRECTOS C EN (L.COUNTRY_ID=C.COUNTRY_ID) DONDE L.COUNTRY_ID es A
nulo. Ningunas filas en la comando de LOCATIONS hacen devolver los valores de
COUNTRY_ID. B. Ningunas filas en la comando de COUNTRIES hacen devolver los valores de
COUNTRY_ID. C. Las filas volvieron representan los valores de COUNTRY_ID para todas las
filas en las LOCATIONS
comando.
D. Ninguno de los susodichos
9. ¿Cuáles de las select siguientes es sintácticamente correcta? (Elija todo que se aplican.)
A. SELECCIONE JH.JOB_ID DE JOB_HISTORY JH JOBS DE JUNTURA EXTERNOS
CORRECTOS J EN
JH.JOB_ID=J.JOB_ID
B. SELECCIONE JOB_ID DE JOB_HISTORY JH JOBS DE JUNTURA EXTERNOS
CORRECTOS J EN
(JH.JOB_ID=J.JOB_ID)
C. SELECCIONE JOB_HISTORY.JOB_ID DE JOBS DE JUNTURA EXTERNOS
JOB_HISTORY EN
JOB_HISTORY.JOB_ID=JOBS.JOB_ID
D. Ninguno de los susodichos

Genere un producto Cartesiano de Dos o más Tablas


10. Si la comando de REGIONS, que contiene 4 filas, es enfadada afiliado a la comando de
COUNTRIES, que
¿contiene 25 filas, cuántas filas aparecen en el SET de resultados finales? (Elija la mejor respuesta.)
A. 100 filas de filas C. 25 de filas B. 4 D. Ninguno de los susodichos

PREGUNTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE y complete las tareas siguientes.
Se requiere que usted produzca un informe de clientes que compraron productos con precios de
catálogo de más de 1000$. El informe debe contener al cliente en general llama y los nombres de
conducto pro y sus precios de catálogo. La información de cliente es almacenada en la comando de
CLIENTES, que tiene la columna CUSTOMER_ID como su clave primaria. El nombre del producto y
los detalles de precio de catálogo son almacenados en
Pregunta de laboratorio
353

la comando PRODUCT_INFORMATION con la columna PRODUCT_ID como su clave primaria.


Otras dos tablas relacionadas pueden asistir en la generación del informe requerido: el O RDERS
comando, que almacena el CUSTOMER_ID y O RDER_ID información, y el O RDER_ITEMS
comando, que almacena los valores de PRODUCT_ID asociados con cada O RDER_ID.
Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución
puesta en una lista.
354
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

MÍ PRUEBAN RESPUESTAS
Escriba Select SENTENCIAS a Datos de Acceso de más de Un Table Using
Equijoins y Nonequijoins
1. ® D. Las preguntas en B y C incorrectamente contienen la palabra clave NATURAL. Si esto es
borrado, ✓
ellos se afiliarán a los DEPARTMENTS y tablas de EMPLOYEES basadas en la columna
DEPARTMENT_ID.
Los ® A, B, y C son incorrectos. Realizar una juntura natural pura que implícitamente se
afilia a dos ˚
las tablas en todas las columnas con nombres idénticos que, en este instancia, son
DEPARTMENT_ID y MANAGER_ID.
2. ® A, B, y C. Estas cláusulas demuestran técnicas diferentes para afiliarse a las tablas en ambos el

DEPARTMENT_ID y columnas MANAGER_ID.
® el D es incorrecto. ˚
3. ® B. La condición de juntura es una expresión basada en el menos que el operador de desigualdad.
Por lo tanto, ✓
esta juntura es un nonequijoin.
Los ® A, C, y D son incorrectos. Ser correcto si el operador en la condición de juntura ˚
la expresión era un operador de igualdad. Las palabras claves de JUNTURA ENFADADAS o la
ausencia de una condición de juntura causarían C ser verdadero. El D sería verdad si una de la
cláusula de JUNTURA EXTERNA fuera usada en vez de la cláusula JOINON.
4. ® A. Esta select demuestra el uso correcto de la cláusula JOINUSING. ✓
Los ® B, C, y D son incorrectos. El B es incorrecto ya que los nombres de columna sólo no
calificados son permitidos ˚
en los soportes después de la palabra clave de UTILIZACIÓN. El C es incorrecto porque la
columna entre paréntesis después de la palabra clave de UTILIZACIÓN no puede ser referida con
un calificador en la cláusula SENTENCIA.
5. ® el B demuestra el uso correcto de la cláusula JOINON. ✓
Los ® A, C, y D son incorrectos. A es incorrecto ya que la cláusula de JUNTURA
ENFADADA no puede contener ˚
EL EN palabra clave. El C es incorrecto ya que las palabras claves de JUNTURA EXTERNAS
deben ser precedidas por la IZQUIERDA, DERECHO, o palabra clave LLENA.
6. ® C. La cláusula JOINON y las otras cláusulas de juntura pueden ser todos usadas para junturas entre ✓ múltiple
tablas. El JOINON y las cláusulas JOINUSING son mejor satisfechos para el N-camino junturas de
comando. los ® A, B, y D son incorrectos. A es falso ya que usted puede afiliarse a tantas tablas como
usted desea. Un ˚
El producto cartesiano no es creado ya que hay dos condiciones de juntura y tres tablas.

Afíliese a una Comando a Sí Usando una Autojuntura


7. ® B. Tres filas son devueltas. Para la fila con un valor REGION_ID de 2, el REGION_NAME ✓
es Asia y mitad que la longitud del REGION_NAME también es 2. Por lo tanto esta fila es devuelta.
Respuesta de laboratorio

La misma lógica causa las filas con valores REGION_ID de tres y cuatro y valores
REGION_NAME de Europa y Américas devueltas. los ® A, C, y D son incorrectos. ˚

Datos de vista Que no Encuentran una Condición de Juntura Usando Junturas


Externas
355
8. ® A. La juntura externa correcta trae las filas de COUNTRIES que la juntura interior entre el ✓
LAS LOCATIONS y las tablas de COUNTRIES han excluido. El DONDE la cláusula entonces
restringe los resultados eliminando los resultados de juntura interiores. Esto deja las filas de la
comando de COUNTRIES con la cual ningunos archivos de los archivos de comando de
LOCATIONS tienen que ver.
Los ® B, C, y D son incorrectos. ˚
9. ® A. Esta select demuestra el uso correcto de la cláusula JOINON EXTERNA CORRECTA. ✓
Los ® B, C, y D son incorrectos. La columna JOB_ID en la cláusula SENTENCIA en B no es
calificada ˚
y es por lo tanto ambiguo desde la comando de la cual esta columna viene no es especificado. El C
usa una JUNTURA EXTERNA sin las palabras claves DEJADAS, DERECHO, o LLENO.

Genere un producto Cartesiano de Dos o más Tablas


10. ® A. La juntura enfadada asocia cada cuatro filas a partir de los tiempos de tabla 25 de
REGIONS con el ✓
las filas de la comando de COUNTRIES que cede un SET de resultado que contiene 100 filas.
Los ® B, C, y D son incorrectos. ˚

RESPUESTA DE LABORATORIO
Usando al Developer de SQL o SQL*Plus, conecte al esquema OE, y complete las tareas siguientes.
Hay varios enfoques a la solución de esta pregunta. Su enfoque puede diferenciarse de la solución
siguiente puesta en una lista.
1. Comience al Developer SQL y conecte al esquema OE. 2. La lista SENTENCIA consiste en cuatro
columnas de dos tablas, que tendrán que ver con cada uno
otra utilización de varias junturas. La cláusula SENTENCIA es CUST_FIRST_NAME escogido,
CUST_LAST_NAME, PRODUCT_NAME, LIST_PRICE.
3. El DE la cláusula es
DE CLIENTES.
4. El DONDE la cláusula es
DONDE LIST_PRICE> 1000.
5. Las cláusulas de JUNTURA son interesantes desde el PRODUCT_INFORMATION y
CLIENTES
tablas no directamente relacionadas. Ellos están relacionados por otras dos tablas.
356
Capítulo 7:
La pruebas de Datos de Tablas Múltiples

6. La comando de PEDIDOS debe ser afiliada primero a la comando de CLIENTES basada en el


común
Valores de CUSTOMER_ID. La primera cláusula de juntura después el DE la cláusula de
CLIENTES es PEDIDOS DE JUNTURA USANDO (CUSTOMER_ID).
7. Este SET debe ser afiliado entonces a la comando ORDER_ITEMS basada en valores de
ORDER_ID comunes
ya que la comando ORDER_ITEMS puede conectar por último con la comando
PRODUCT_INFORMATION. La segunda cláusula de juntura es la JUNTURA ORDER_ITEMS
USANDO (ORDER_ID).
8. El eslabón perdido para unirse a la comando PRODUCT_INFORMATION basada en común
Los valores de columna de PRODUCT_ID están disponibles ahora. La tercera cláusula de juntura
es la JUNTURA PRODUCT_INFORMATION USANDO (PRODUCT_ID).
9. La ejecución de esta select devuelve el informe requerido como mostrado en la ilustración
siguiente:

8
La utilización de
Subconsultas para
Solucionar
problemas
OBJETIVOS DE
CERTIFICACIÓN

8.01
Defina Subconsultas
8.04
Escriba la Fila sola y la Fila múltiple

Subconsultas
8.02
Describa los Tipos de problemas

Que las Subconsultas Puedan Solucionar



Taladradora de dos minutos
8.03
Liste los Tipos en una lista de Subconsultas
Q&A
Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

358
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas
Los seis capítulos anteriores han tratado con la select SENTENCIA en detalles

considerables, pero en cada instancia la select SENTENCIA ha sido un comando solo, autónomo.

Este capítulo es el primero de dos que el espectáculo como dos o más comandos
ESCOGIDOS pueden ser
combinado en una select. La primera técnica (cubierto en este capítulo) es el uso de subconsultas.
Una subpregunta es una select SENTENCIA cuya salida está acostumbrado como introducido para
otra select SENTENCIA (o en efecto para una select DML, como hecho en el Capítulo 10).El
segunda técnica es el uso de operadores de SET, donde los resultados de varios comandos
ESCOGIDOS son combinados en un SET de resultado solo.

OBJETIVO DE CERTIFICACIÓN 8.01

Defina Subconsultas
Una subpregunta es una pregunta que es anidada dentro de un ESCOGIDO, INSERCIÓN,
ACTUALIZACIÓN, o BORRAR
select o dentro de otra subpregunta. Una subpregunta puede devolver un SET de filas o
sólo una fila a su pregunta paternal. Una subpregunta escalar es una pregunta que devuelve
exactamente un valor: una fila sola, con una columna sola. Las subconsultas escalares
pueden ser usadas en la mayor parte de sitios en una select SQL donde usted podría usar
una expresión o un valor literal.
Los sitios en una pregunta donde una subpregunta puede ser usada son como sigue:

■ En la lista SENTENCIA usada para proyección de columna ■ En el DE cláusula


■ En el DONDE cláusula ■ En la cláusula que TIENE

Una subpregunta a menudo es referida como una


pregunta interior, y la select dentro de la cual
ocurre es llamada entonces la pregunta externa. No
hay nada
Las subconsultas pueden ser anidadasincorrecto con esta terminología, salvo que
esto mayo a una profundidad ilimitada en un DE cláusula implique que usted sólo puede tener
dos niveles, interiores, pero a "sólo" 255 niveles en un DONDE y externo. De hecho, la realización
de Oracle de cláusula. Ellos pueden ser usados en el ESCOGIDO las subconsultas no imponen
ninguna lista de límites práctica y en el DE, DONDE, y al nivel de anidar: la profundidad de anidar
TENIENDO cláusulas de una pregunta. permitido en el DE cláusula de una select
es ilimitado, y que en el DONDE la cláusula es
hasta 255.
Defina Subconsultas
359

Una subpregunta puede tener cualquiera de las cláusulas habituales para selección
y proyección. Lo siguiente es cláusulas requeridas:

■ Una lista SENTENCIA ■ UN DE cláusula

Lo siguiente es cláusulas opcionales:

■ DONDE GRUPO ■ POR ■ TENER

La subpregunta (o las subconsultas) dentro de una select deben ser ejecutadas


antes el
la pregunta paternal que lo llama, a fin de que los resultados de la subpregunta
puedan ser pasados al padre.

EJERZA 8-1 Tipos de


Subconsultas
En este ejercicio, usted escribirá el código que demuestra los sitios donde las
subconsultas pueden ser usadas. Use SQL*Plus o Developer SQL. Todas las preguntas
deberían ser ejecutadas cuando conectado al esquema de HORA.

1. Inicio de sesión a su base de datos como HORA de usuario 2. Escriba una


pregunta que usa subconsultas en la lista de proyección de columna. La pregunta
informará sobre los números corrientes de DEPARTMENTS y personal:
seleccione sysdate Hoy,
(seleccione a la cuenta (*) de DEPARTMENTS) Dept_count, (cuenta
sentencia (*) de EMPLOYEES) Emp_count del dual;

3. Escriba una pregunta para identificar a todos los EMPLOYEES que son
gerentes. Esto va
requiera la utilización de una subpregunta en el DONDE la cláusula para
seleccionar a todos los EMPLOYEES cuyo EMPLOYEE_ID aparece como un
MANAGER_ID:
seleccione last_name de EMPLOYEES donde
(employee_id en (seleccionan manager_id de EMPLOYEES));
360
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

4. Escriba una pregunta para identificar el sueldo más alto pagado en cada país. Esto va
requiera la utilización de una subpregunta en el DE la cláusula:
máximo escogido (sueldo), country_id de
(seleccione salary,department_id,location_id,country_id de
EMPLOYEES DEPARTMENTS de juntura naturales LOCATIONS de juntura
naturales)
grupo por country_id;

OBJETIVO DE CERTIFICACIÓN 8.02

Describa los Tipos de problemas Que las


Subconsultas Pueden Solucionar
Hay muchas situaciones donde usted necesitará el resultado de una pregunta como el
ingreso
para el otro.

Uso de un SET de Resultado de Subpregunta con Objetivos de


Comparación
¿Qué EMPLOYEES tienen un sueldo que es menos que el sueldo medio? Esto podría ser
contestado por dos select, o por una select sola con una subpregunta. El ejemplo siguiente
usa dos select:
seleccione el avg (sueldo) de EMPLOYEES;
seleccione last_name de EMPLOYEES donde sueldo <result_of_previous_query;
O bien, este ejemplo usa una select con una subpregunta:

seleccione last_name de EMPLOYEES donde el sueldo <(seleccionan el


avg (sueldo) de EMPLOYEES);
En este ejemplo, la subpregunta es usada para substituir un valor en el DONDE
cláusula
de la pregunta paternal: esto devuelve un valor solo, usado para la comparación con las
filas recuperadas por la pregunta paternal.
La subpregunta podría devolver un SET de filas. Por ejemplo, usted podría usar el
siguiente para
encuentre todos los DEPARTMENTS que realmente tienen uno o varios EMPLOYEES
adjudicados a ellos:
seleccione department_name de DEPARTMENTS donde department_id en
(seleccionan distinto (department_id) de EMPLOYEES);
Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar
361

En el ejemplo precedente, la subpregunta es usada como una alternativa a una


juntura. El
mismo resultado podría haber sido conseguido con lo siguiente:
seleccione department_name de DEPARTMENTS EMPLOYEES de juntura
interiores en EMPLOYEES department_id = grupo de DEPARTMENTS
department_id por department_name;
Si la subpregunta va a devolver más de una fila, entonces la comparación
el operador debe ser capaz de aceptar valores múltiples. Estos operadores están EN, NO
EN, CUALQUIERA, y TODOS. Si el operador de comparación es IGUAL, MAYOR
QUE, o MENOS QUE (que cada uno sólo puede aceptar un valor), la pregunta paternal
fallará.

La utilización NO EN es llena de problemas debido al modo que SQL se maneja


NULLs. Por regla general, no use NO EN a menos que usted esté seguro que el
SET de resultado no incluirá un NULO.

Transformación de estrella
Una extensión del uso de subconsultas como una alternativa a una juntura debe habilitar
la estrella
la transformación a menudo necesaria en aplicaciones de depósito de datos. Considere
unas ventas de grabación de comando grandes. Cada venta es marcada como siendo de
un producto particular a un comprador particular por un canal particular. Estos atributos
son identificados por códigos, usados como claves foráneas para dimensionar tablas con
filas que describen cada producto, comprador, y canal. Para identificar todas las ventas
de libros a compradores en Alemania por pedidos de Internet, uno podría ejecutar una
pregunta como esto:
seleccione  de ventas s, productos p, compradores b, c de canales donde
s.prod_code=p.prod_code y s.buy_code=b.buy_code y
s.chan_code=c.chan_code y p.product ='Books' y b.country ='Germany' y
c.channel ='Internet';
Esta pregunta usa el DONDE cláusula para afiliarse a las tablas y luego filtrar los
resultados.
Lo siguiente es una pregunta alternativa que cederá el mismo resultado:
seleccione  de ventas
donde prod_code en (seleccionan prod_code de productos de donde producto
='Books') y buy_code en (seleccionan buy_code compradores donde país
='Germany') y chan_code en (seleccionan chan_code de canales donde canal
='Internet);
Volver a escribir de la primera select al segundo es la transformación de estrella.
Aparte
de ser una estructura intrínsecamente más elegante (la mayor parte de developeres SQL
con cualquiera
362
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas
el sentido de la estética estará de acuerdo con aquel), hay motivos técnicos por qué la
base de datos puede ser capaz de ejecutarlo más eficazmente que la pregunta original.
También, las preguntas de estrella son más fáciles a mantener; es muy simple añadir
más dimensiones a la pregunta o reemplazar los literales solos ('Libros', 'Alemania', y 'Internet')
con listas de valores.

Hay un parámetro de inicialización de instancia, STAR_TRANSFORMATION_


HABILITADO, que (de ser puesto al verdadero) permitirá que el Oracle pregunte
optimizer para volver a escribir el código en preguntas de estrella.

Genere una Comando de la Cual SELECCIONAR


Las subconsultas también pueden ser usadas en el DE la cláusula, donde ellos son a veces
mandados
a como vistas de inline. Considere otro problema basado en el esquema de HORA: los
EMPLOYEES son adjudicados a un departamento, y los DEPARTMENTS tienen una
posición. Cada posición está en un país. ¿Cómo puede usted encontrar el sueldo medio
del personal en un país, aunque ellos trabajen para DEPARTMENTS diferentes? Como
esto:
seleccione el avg (sueldo), country_id de
(seleccione salary,department_id,location_id,country_id de
EMPLOYEES DEPARTMENTS de juntura naturales LOCATIONS de
juntura naturales)
grupo por country_id;
La subpregunta construye una comando con el sueldo de cada empleado y el país en
que su departamento está basado. La pregunta paternal entonces se dirige a esta
comando, haciendo un promedio del SUELDO y agrupándose por COUNTRY_ID.

Genere Valores para Proyección


El tercer lugar una subpregunta puede ir está en la lista SENTENCIA de una pregunta.
Como le puede
¿identifique el sueldo más alto y el precio de comisión más alto y así qué la comisión
máxima pagada sería si el empleado asalariado más alto también tuviera el precio de
comisión más alto? Como esto, con dos subconsultas:
escogido (seleccionan el máximo (sueldo) de EMPLOYEES) * (máximo
escogido (commission_pct) de EMPLOYEES) / 100 del dual;
En este uso, la lista SENTENCIA solía prever que las columnas están siendo
pobladas con
los resultados de las subconsultas. Una subpregunta usada en esta manera debe ser el
escalar, o la pregunta paternal fallará con un error.
Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar

Genere Filas para ser Pasadas a una Select DML


363
Las select de DML son cubiertas detalladamente en el Capítulo 10. Por el momento,
considere estos ejemplos:
el inserción en sales_hist selecciona * de ventas donde fecha> sysdate-
1; actualice el sueldo de SET de EMPLOYEES = (seleccione el avg
(sueldo) de EMPLOYEES); borre de DEPARTMENTS donde department_id no en
(seleccionan department_id de EMPLOYEES);

El primer ejemplo usa una subpregunta para


identificar a
el SET de filas en una comando que será insertada
en el otro. El segundo ejemplo usa una subpregunta
a
Una subpregunta puede ser usada calcule el sueldo medio de todos los
EMPLOYEES y seleccionar filas para la introducción, pero no en a los pases este valor (una
cantidad escalar) a una actualización VALORAN la cláusula de una select de INSERCIÓN. select. El
tercer ejemplo usa una subpregunta a
recupere todos DEPARTMENT_IDs que están en
el uso
y pasa la lista a un BORRAR comando, que borrará todos los DEPARTMENTS que no
están en el uso.
Note que no es legal usar una subpregunta en la cláusula de VALORES de un
inserción
select; esto es fino:
el inserción en fechas selecciona sysdate del dual;
Pero esto no es:

el inserción en fechas (date_col) valores (seleccionan sysdate fom


dual);

EJERZA 8-2 Subconsultas Más complejas


En este ejercicio, usted escribirá algunas subconsultas más complicadas. Use
tampoco
SQL*Plus o Developer SQL. Todas las preguntas deberían ser ejecutadas cuando
conectado al esquema de HORA.

1. Inicio de sesión a su base de datos como HORA de usuario 2. Escriba una


pregunta que identificará a todos los EMPLOYEES que trabajan en
DEPARTMENTS
localizado en el Reino Unido. Esto requerirá tres niveles de subconsultas
anidadas:
seleccione last_name de EMPLOYEES donde department_id en
(seleccione department_id de DEPARTMENTS donde location_id
en
(seleccione location_id de LOCATIONS
364
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas
donde country_id =
(seleccione country_id de COUNTRIES
donde country_name ='United Reino')
));

3. Compruebe que el resultado del paso 2 es correcto ejecutando las subconsultas


inde-
suspendidamente. En primer lugar, encuentre el COUNTRY_ID para el Reino
Unido:
seleccione country_id de COUNTRIES donde country_name ='United Reino';

El resultado será el Reino Unido. Entonces encuentre las LOCATIONS


correspondientes:

seleccione location_id de LOCATIONS donde country_id = 'el Reino


Unido';
El LOCATION_IDs volvió será 2400, 2500, y 2600. Entonces encuentre el
DEPARTMENT_IDs de departamento en estas LOCATIONS:
seleccione department_id de DEPARTMENTS donde location_id en (2400,2500,2600);

El resultado será dos DEPARTMENTS, 40 y 80. Finalmente, encuentre a los


EMPLOYEES relevantes:

seleccione last_name de EMPLOYEES donde department_id en (40,80);

4. Escriba una pregunta para identificar a todos los EMPLOYEES que ganan más
que el promedio
y quiénes trabajan en cualquier de ESTO DEPARTMENTS. Esto requerirá dos
subconsultas, no anidó:
seleccione last_name de EMPLOYEES
donde department_id en (seleccionan department_id de DEPARTMENTS donde
department_name como 'ELLO %') y sueldo> (seleccionan el avg (sueldo) de
EMPLOYEES);

OBJETIVO DE CERTIFICACIÓN 8.03

Liste los Tipos en una lista de Subconsultas


Hay tres amplias divisiones de la subpregunta:

■ la Fila sola subpregunta subconsultas de Fila múltiple ■ ■ subconsultas


Correlacionadas
Solo - y Subconsultas de Fila múltiple
Liste los Tipos en una lista de Subconsultas
365
La subpregunta de fila sola devuelve una fila. Un instancia especial es la subpregunta
escalar, que devuelve una fila sola con una columna. Las subconsultas escalares son
aceptables (y a menudo muy útiles) en prácticamente cualquier situación donde usted
podría usar un valor literal, una constante, o una expresión. La fila múltiple subpregunta
SETs de vuelta de filas. Estas preguntas comúnmente son usadas para generar SETs de
resultado que serán pasados a un DML o select SENTENCIA para el procesamiento
adicional. Tanto la fila sola como las subconsultas de fila múltiple serán evaluadas una
vez, antes de que la pregunta paternal sea ejecutada.
Solo - y subconsultas de fila múltiple puede ser usado en el DONDE y las cláusulas
que TIENEN de la pregunta paternal, pero hay restricciones de los operadores de
comparación legítimos. Si el operador de comparación es alguno de estos en la
comando siguiente, la subpregunta debe ser una subpregunta de fila sola:

Símbolo
= ¡>> = <<= <>! =

Sentido
igual mayor que mayor que o igual menos que menos que o igual no igual no igual

Si alguno de los operadores en la comando precedente es usado con una subpregunta


que vuelve
más de una fila, la pregunta fallará. Los operadores en la comando siguiente pueden
usar subconsultas de fila múltiple:

Símbolo
EN NO EN CUALQUIERA TODOS

Sentido
igual a cualquier miembro en una lista no igual a cualquier miembro en una lista devuelve filas que
emparejan cualquier valor a una lista devuelve filas que emparejan todos los valores en una lista
366
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

Los operadores de comparación válido para subconsultas de fila


múltiple están EN, válido para subconsultas de fila sola son =,>,> =, NO EN,
CUALQUIERA, y TODOS. <<=, y <>. Los operadores de comparación
Subconsultas correlacionadas
Una subpregunta correlacionada tiene un método más complejo de la ejecución que solo
- y subconsultas de fila múltiple y es potencialmente mucho más potente. Si unas
columnas de referencias de subpregunta en la pregunta paternal, entonces su resultado
será dependiente de la pregunta paternal. Esto hace imposible evaluar la subpregunta
antes de evaluar la pregunta paternal. Considere esta select, que pone en una lista a
todos los EMPLOYEES que ganan menos que el sueldo medio:
seleccione last_name de EMPLOYEES donde el sueldo <(seleccionan el
avg (sueldo) de EMPLOYEES);
La subpregunta de fila sola sólo tiene que ser ejecutada una vez, y su resultado
substituido
en la pregunta paternal. Pero ahora considere una pregunta que pondrá en una lista a
todos los EMPLOYEES cuyo sueldo es menos que el sueldo medio de su departamento.
En este instancia, la subpregunta debe ser ejecutada para cada empleado para determinar
el sueldo medio para su departamento; es necesario pasar el código de departamento del
empleado a la subpregunta. Esto puede ser hecho como sigue:
seleccione p.last_name, p.department_id de EMPLOYEES p donde
p.salary <(seleccionan avg (s.salary) de EMPLOYEES s donde
s.department_id=p.department_id);
En este ejemplo, la subpregunta se refiere a una columna, p.department_id, de
la lista sentencia de la pregunta paternal. Esto es la señal que, más bien que evaluar la
subpregunta una vez, debe ser evaluado para cada fila en la pregunta paternal. Para
ejecutar la pregunta, el Oracle mirará cada fila en EMPLOYEES y, como esto hace así,
ejecute la subpregunta usando el DEPARTMENT_ID de la fila de empleado corriente.
El flujo de ejecución es como sigue:

1. Comience en la primera fila de la comando de EMPLOYEES. 2. Lea el


DEPARTMENT_ID y el SUELDO de la fila corriente. 3. Ejecute la subpregunta
usando el DEPARTMENT_ID del paso 2.
Liste los Tipos en una lista de
Subconsultas
367

4. Compare el resultado del paso 3 con el SUELDO del paso 2, y vuelva el


la fila si el SUELDO es menos que el resultado. 5. Avance a la siguiente fila en
la comando de EMPLOYEES. 6. Repita del paso 2.

Una subpregunta de fila múltiple o fila sola es evaluada una vez, antes de evaluar la
pregunta externa; una subpregunta correlacionada debe ser evaluada una vez para cada
fila en la pregunta externa. Una subpregunta correlacionada puede ser sola - o la fila
múltiple, si el operador de comparación es apropiado.

Las subconsultas correlacionadas pueden ser una construcción muy ineficaz,


debido a la necesidad de la ejecución repetida de la subpregunta. Siempre trate
de encontrar un enfoque alternativo.
EJERCICIO 8-3 Investiga los Tipos diferentes de Subconsultas
En este ejercicio, usted demostrará problemas que pueden ocurrir con tipos diferentes
de subconsultas. Use SQL*Plus o Developer SQL. Todas las preguntas deberían ser
ejecutadas cuando conectado al esquema de HORA: se supone que la comando de
EMPLOYEES tiene los conjuntos estándares de filas.

1. Inicio de sesión a su base de datos como HORA de usuario 2. Escriba una


pregunta para determinar quién gana más que el Sr. Tobias:
seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el
sueldo de EMPLOYEES donde last_name =' Tobias) piden por last_name;
Esto devolverá 86 nombres, en comando alfabético.
3. Escriba una pregunta para determinar quién gana más que el Sr. Taylor:

seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el


sueldo de EMPLOYEES donde last_name =' Taylor') piden por last_name;
Esto fallará con el error "ORA-01427: la subpregunta de fila sola vuelve más que
una fila." La ilustración siguiente muestra las pocas últimas líneas de salida del paso 2
seguido del paso 3 y el error, ejecutado con SQL*Plus.
368
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

4. Determine por qué la pregunta en el paso 2 tuvo éxito, pero fallado en el paso 3.
La respuesta
está en el estado de los datos:
seleccione a la cuenta (last_name) de EMPLOYEES donde last_name ='
Tobias; seleccione a la cuenta (last_name) de EMPLOYEES donde
last_name =' Taylor';
El uso del "mayor que" el operador en las preguntas para los pasos 2 y 3 requiere
una subpregunta de fila sola, pero la subpregunta usada puede devolver cualquier número
de filas, según el predicado de búsqueda usado.
5. Fije el código en los pasos 2 y 3 de modo que las select tengan éxito no importa
que LAST_NAME es usado. Hay dos soluciones posibles: uno usa a un operador
de comparación diferente que puede manejarse una subpregunta de fila múltiple;
los otros usos una subpregunta que siempre será la fila sola.

La primera solución:
seleccione last_name de EMPLOYEES donde
el sueldo> todos (seleccionan el sueldo de EMPLOYEES donde last_name ='
Taylor') piden por last_name;
La segunda solución:
seleccione last_name de EMPLOYEES donde
el sueldo> (seleccionan el máximo (sueldo) de EMPLOYEES donde last_name
=' Taylor') piden por last_name;
Escriba Subconsultas de Fila múltiple y Fila sola

GUIÓN & SOLUCIÓN


369
Como le puede mejor diseñar subconsultas tales que ellos no fallarán con "ORA-01427: ¿la subpregunta de fila sola
devuelve más de una fila" errores?

A veces hay una opción entre utilización de una subpregunta o utilización de un poco de otra técnica: la
transformación de estrella es un ejemplo. ¿Cuál es mejor?

OBJETIVO DE CERTIFICACIÓN 8.04


Hay dos técnicas comunes: use una agregación de modo que si usted realmente consigue filas múltiples ellos sean
reducidos a uno, o usar uno del EN, CUALQUIERA, o TODOS los operadores de modo que no importe si filas
múltiples son devueltas. Pero éstos son ambos las soluciones del hacker; la verdadera respuesta siempre debe usar la clave
primaria identificando la fila para ser devuelta, no una llave no única. Esto depende de las circunstancias. Es bastante
común para las técnicas diferentes causar un método de ejecución diferente dentro de la base de datos. Según como
el instancia, la base de datos, y las estructuras de datos dentro de ella son configurados, uno puede ser mucho más
eficiente que el otro. Siempre que tal opción se levante, las select deberían ser sujetadas a un análisis de afinación.
Su DBA será capaz de aconsejar sobre esto.

Escriba Subconsultas de Fila múltiple y Fila sola


Lo siguiente es ejemplos del solo - y subconsultas de fila múltiple. Ellos están basados
en
el esquema de pruebas de HORA.
¿Cómo entendería usted qué EMPLOYEES tienen un gerente que trabaja para un
departamento basado en el Reino Unido? Esto es una solución posible, usando
subconsultas de fila múltiple:
seleccione last_name de EMPLOYEES donde manager_id en (seleccionan
employee_id de EMPLOYEES de donde department_id en (seleccionan
department_id DEPARTMENTS donde location_id en (seleccionan
location_id de LOCATIONS donde country_id ='UK')));
En el ejemplo precedente, las subconsultas son anidadas tres niveles
profundamente. Note que el
las subconsultas usan el EN el operador porque es posible que las preguntas pudieran
devolver varias filas.
370
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

Le han pedido encontrar el trabajo con el sueldo medio más alto. Esto puede ser
hecho con una subpregunta de fila sola:
seleccione job_title de JOBS grupo de EMPLOYEES de juntura natural por
job_title que tiene avg (sueldo) = (máximo escogido (avg (sueldo)) del
grupo de EMPLOYEES por job_id);
La subpregunta devuelve un valor solo: el sueldo medio del departamento con el
el sueldo medio más alto. Está seguro usar al operador de igualdad para esta subpregunta
porque la función de MAX garantiza que sólo una fila será devuelta.
CUALQUIER y TODOS los operadores son la sintaxis apoyada, pero su función
puede ser duplicada con otros operadores más comúnmente usados combinados con
agregaciones. Por ejemplo, estas dos select, que recuperan a todos los EMPLOYEES
cuyo sueldo está encima de aquel de cualquiera en la oficina 80, devolverán SETs de
resultado idénticos:
seleccione last_name de EMPLOYEES donde el sueldo> todos
(seleccionan el sueldo de EMPLOYEES donde department_id=80);
seleccione last_name de EMPLOYEES donde el sueldo> (seleccionan el
máximo (sueldo) de EMPLOYEES donde department_id=80);
La comando siguiente resume los equivalentes para CUALQUIERA y TODOS:

Operador
<CUALQUIERA> CUALQUIERA = CUALQUIERA> TODOS <TODOS

Sentido
menos que el más alto más que el equivalente más bajo con EN más que el más alto menos
que el más bajo
EJERCICIO 8-4 Escribe una Pregunta Que es Confiable y Usuario Simpático
En este ejercicio, desarrolle una subpregunta de multifila que apremio para la
introducción de datos por el usuario. Usar
SQL*Plus o Developer SQL. Todas las preguntas deberían ser ejecutadas cuando
conectado al esquema de HORA; se supone que las tablas tienen los conjuntos
estándares de filas.

1. Inicio de sesión a su base de datos como HORA de usuario 2. Diseñe una


pregunta que apremio para un departamento llaman y ponen el apellido en una
lista
de cada empleado en aquel departamento:
Escriba Subconsultas de Fila múltiple y Fila sola

seleccione last_name de EMPLOYEES donde department_id = (seleccionan


department_id de DEPARTMENTS donde department_name = '&Department_name');
371
3. Ejecute la pregunta en el paso 2 tres veces, cuándo apremio suministrando estos valores:
la primera vez, Ejecutivo segunda vez, la tercera vez ejecutiva, Executiv

La ilustración siguiente muestra el resultado, usando SQL*Plus:

4. Note los resultados del paso 3. La primera carrera tuvo éxito porque el valor
entrado era un partido exacto, pero otro fracasado. Ajuste la pregunta para hacerlo más usuario
amistoso, de modo que esto pueda manejarse variaciones menores por si u ortografía:
seleccione last_name de EMPLOYEES donde department_id =
(seleccione department_id de DEPARTMENTS donde superior (department_name) como el
superior ('%&Department_name%'));

5. Ejecute la pregunta en el paso 4 tres veces, usando los mismos valores que usado en el paso 3.
Esta vez, la pregunta ejecutará con éxito.
6. Ejecute la pregunta en el paso 4 otra vez, y esta vez escriba el valor Pu. La pregunta
fallará, con "ORA-01427: la subpregunta de fila sola devuelve más de una fila" error, porque la
tentativa de hacerlo más fácil de usar significa que la subpregunta ya no es garantizada para ser
una subpregunta de fila sola. La cuerda Pu empareja dos DEPARTMENTS.
372
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

7. Ajuste la pregunta para hacerlo resistente contra el error ORA-01427, y adaptarse


salida para prevenir cualquier confusión posible:
seleccione last_name, department_name de EMPLOYEES se afilian a DEPARTMENTS
en EMPLOYEES department_id = DEPARTMENTS department_id donde los DEPARTMENTS
department_id en (seleccionan department_id de DEPARTMENTS donde superior
(department_name) como el superior ('%&Department_name%'));
La ilustración siguiente muestra este paso final: el código que se acerca al ideal de
ser tanto prueba de disco como usuario simpático:

DENTRO DEL
EXAMEN
Uso de Subconsultas
Las subconsultas vienen a tres formas generales: la fila sola, la fila múltiple, y correlacionado. Un
instancia especial de la subpregunta de fila sola es la subpregunta escalar, una subpregunta que devuelve
exactamente un valor. Esto es una fila sola sola - subpregunta de columna. Para primer SQL OCP
examen, el conocimiento detallado sólo es esperado de subconsultas escalares y la columna sola
subconsultas de fila múltiple. Las subconsultas correlacionadas y subconsultas de columna múltiples con
poca probabilidad serán examinadas a este nivel, pero un conocimiento general de ellos puede ser
probado.
Usando subconsultas en un DONDE cláusula, usted debe ser consciente de que los operadores tendrán
éxito con subconsultas de fila sola y que tendrá éxito con subconsultas de fila múltiple.
RESUMEN DE CERTIFICACIÓN
Resumen de certificación
373
Una subpregunta es una pregunta empotrada dentro de otra select SQL. Esta select
puede
esté otra pregunta o una select DML. Las subconsultas pueden ser anidadas el uno
dentro del otro sin límites prácticos.
Las subconsultas pueden ser usadas para generar valores para la lista sentencia de una
pregunta para generar una vista de inline para ser usada en el DE la cláusula, en el
DONDE cláusula, y en la cláusula que TIENE. Cuando usado en el DONDE o
cláusulas que TIENEN, las subconsultas de fila sola pueden ser usadas con estos
operadores de comparación: =,>,> =, <<=, <>; las subconsultas de fila múltiple pueden
ser usadas con estos operadores de comparación: EN, NO EN, CUALQUIERA, TODOS.
374
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas


TALADRADORA DE DOS MINUTOS
Defina Subconsultas
❑ Una subpregunta es una select sentencia empotrada dentro de otra select SQL. ❑
Subconsultas puede ser anidado el uno dentro del otro. ❑ a Excepción de la subpregunta
correlacionada, las subconsultas son ejecutadas antes
la pregunta externa dentro de la cual ellos son empotrados.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar


❑ Seleccionar filas de una comando con una condición que depende de los datos dentro de
la comando puede ser puesta en práctica con una subpregunta. ❑ junturas Complejas puede
ser a veces reemplazado con subconsultas. ❑ Subconsultas puede valores agregados a la
pregunta externa salida lo que no está disponible en
las tablas las direcciones de pregunta externas.

Liste los Tipos en una lista de Subconsultas


❑ subconsultas de Fila múltiple puede devolver varias filas, posiblemente con varias columnas. ❑
subconsultas de Fila sola devuelven una fila, posiblemente con varias columnas. ❑ Una
subpregunta escalar devuelve un valor solo; es una fila sola, la columna sola
subpregunta.
❑ Una subpregunta correlacionada es ejecutado una vez para cada fila en la pregunta externa.

Escriba Subconsultas de Fila múltiple y Fila sola


❑ subconsultas de Fila sola debería ser usado con operadores de comparación de fila sola. ❑
subconsultas de Fila múltiple debería ser usado con operadores de comparación de fila múltiple. el
 TODOS y CUALQUIER operador puede ser alternativas al uso de agregaciones.

MÍ PRUEBA
Defina Subconsultas
1. Considere esta descripción genérica de una select SENTENCIA:
SELECCIONE select_list DE la comando DONDE EL GRUPO de condición POR expression_1 que
TIENE expression_2 PIDE POR expression_3; ¿Dónde podría subconsultas ser usado? (Elija todas las
respuestas correctas.) A. select_list B. comando condición de C. D. expression_1 E. expression_2
F. expression_3
Mí Prueba
375
2. Una pregunta puede tener una subpregunta empotrada dentro de ello. Bajo que circunstancias
podría estar allí
¿más de una subpregunta? (Elija la mejor respuesta.) A. La pregunta externa puede incluir una
pregunta interior. No es posible tener otra pregunta dentro de
la pregunta interior.
B. Es posible empotrar una subpregunta de fila sola dentro de una subpregunta de fila múltiple,
pero no el
al revés.
C. La pregunta externa puede tener preguntas interiores múltiples, pero ellos no deben ser
empotrados dentro de
el uno al otro.
D. Las subconsultas pueden ser empotradas el uno dentro del otro sin limitaciones prácticas de la
profundidad. 3. Considere esta select:
seleccione employee_id, last_name de EMPLOYEES donde
el sueldo> (seleccionan el avg (sueldo) de EMPLOYEES);
¿Cuándo será ejecutada la subpregunta? (Elija la mejor respuesta.)
A. Será ejecutado antes de la pregunta externa. B. Será ejecutado después de la pregunta externa.
376
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

C. Será ejecutado simultáneamente con la pregunta externa. D. Será ejecutado una vez para cada
fila en la comando de EMPLOYEES.
4. Considere esta select:
seleccione o.employee_id, o.last_name de EMPLOYEES o donde
el o.salary> (seleccionan avg (i.salary) de EMPLOYEES i donde yo
department_id=o.department_id);
¿Cuándo será ejecutada la subpregunta? (Elija la mejor respuesta.)
A. Será ejecutado antes de la pregunta externa. B. Será ejecutado después de la pregunta externa.
C. Será ejecutado simultáneamente con la pregunta externa. D. Será ejecutado una vez para cada
fila en la comando de EMPLOYEES.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar


5. Considere la select siguiente:
seleccione last_name de DEPARTMENTS de juntura de EMPLOYEES
en EMPLOYEES department_id = DEPARTMENTS department_id donde department_name
='Executive';
y esta select:
seleccione last_name de EMPLOYEES donde department_id en
(seleccione department_id de DEPARTMENTS donde department_name ='Executive');
¿Qué puede ser dicho sobre las dos select? (Elija dos respuestas correctas.)
A. Las dos select deberían generar el mismo resultado. B. Las dos select podrían generar
resultados diferentes. C. La primera select siempre se ejecutará con éxito; la segunda select va el
error si hay
dos DEPARTMENTS con 'Ejecutivo' DEPARTMENT_NAME.
D. Ambas select siempre se ejecutarán con éxito, aun si hay dos DEPARTMENTS con
DEPARTMENT_NAME 'Ejecutivo'.

Liste los Tipos en una lista de Subconsultas


6. ¿Cuáles son las características discernidoras de una subpregunta escalar? (Elija dos respuestas
correctas.)
A. Una subpregunta escalar devuelve una fila. B. Una subpregunta escalar devuelve una columna.
Mí Prueba
377

C. Una subpregunta escalar no puede ser usada en la LISTA SENTENCIA de la pregunta


paternal. D. Una subpregunta escalar no puede ser usada como una subpregunta correlacionada.
7. ¿Qué operador de comparación no puede ser usado con subconsultas de fila múltiple?
(Elija la mejor respuesta.) A. TODO B. CUALQUIER C. EN D. NO EN E. Todo el susodicho
puede ser usado.
Escriba Subconsultas de Fila múltiple y Fila sola
8. Considere esta select:
seleccione last_name, (cuenta sentencia (*) de DEPARTMENTS) de EMPLOYEES
donde el sueldo = (seleccionan el sueldo de EMPLOYEES);
¿Qué pasa con ello? (Elija la mejor respuesta.)
A. Nada es incorrecto - la select debería ejecutarse sin el error. B. La select fallará porque la
subpregunta en la lista SENTENCIA se refiere a una comando que es
no puesto en una lista en el DE cláusula. C. La select fallará si la segunda pregunta devuelve
más de una fila. D. La select se ejecutará, pero es muy ineficaz debido a la necesidad de ejecutar
el segundo
subpregunte una vez para cada fila en EMPLOYEES.
9. ¿Cuáles de las select siguientes es equivalente? (Elija dos respuestas.)
A. seleccione employee_id de EMPLOYEES donde el sueldo <todos (seleccionan el sueldo de
EMPLOYEES donde
department_id=10);
B. seleccione employee_id de EMPLOYEES donde el sueldo <(seleccionan el minuto (sueldo) de
EMPLOYEES
donde department_id=10);
C. seleccione employee_id de EMPLOYEES donde el sueldo no> = cualquiera (seleccionan el
sueldo de EMPLOYEES
donde department_id=10);
D. seleccione employee_id de EMPLOYEES e DEPARTMENTS de juntura d en
e.department_id =
d.department_id donde e.salary <(seleccionan el minuto (sueldo) de EMPLOYEES) y
d.department_id=10;
378
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

10. Considere esta select, que es querida para apremio para el nombre de un empleado y luego encontrar
todos
los EMPLOYEES que tienen el mismo trabajo que el primer empleado:
seleccione last_name, employee_id de EMPLOYEES donde job_id =
(seleccione job_id de EMPLOYEES donde last_name = '&Name');
Lo que pasaría si dieran un valor para &Name que no emparejó con ninguna fila en
¿EMPLOYEES? (Elija la mejor respuesta.) A. La select fallaría con un error. B. La select devolvería
cada fila en la comando. C. La select no devolvería ningunas filas. D. La select devolvería todas
las filas donde JOB_ID es NULO.

PREGUNTA DE LABORATORIO
Entrénese 8-3 incluyó esta pregunta que intentó encontrar a todos los EMPLOYEES cuyo sueldo es más
alto que esto
de un empleado denominado:
seleccione last_name de EMPLOYEES donde
el sueldo> (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor') piden por
last_name;
La pregunta se ejecuta con éxito si last_name es único. Dieron dos variaciones que se ejecutarán
sin el error pase lo que pase valoran es proporcionado.
La primera solución era como sigue:
seleccione last_name de EMPLOYEES donde
el sueldo> todos (seleccionan el sueldo de EMPLOYEES donde last_name =' Taylor')
piden por last_name;
La segunda solución era como sigue:
seleccione last_name de EMPLOYEES donde
el sueldo> (seleccionan el máximo (sueldo) de EMPLOYEES donde last_name =' Taylor')
piden por last_name;
Hay otras preguntas que se ejecutarán con éxito; construya otras dos soluciones, una utilización el
CUALQUIER operador de comparación, la otra utilización de la función de agregación de MINUTO.
¿Ahora que usted tiene cuatro soluciones, dan todos ellos el mismo resultado?
Todas estas "soluciones" son de hecho sólo modos de evitar el error. Ellos no necesariamente dan el
resultado que el usuario quiere, y ellos pueden no ser consecuentes. ¿Qué el cambio tiene que ser hecho
dar a un consecuente, inequívoco, resultado?

MÍ PRUEBAN RESPUESTAS
Defina Subconsultas
Mí Respuestas de Prueba
379
1. ® A, B, C, D, E. Subqueries puede ser usado a todos estos puntos. ✓
® F. Una subpregunta no puede ser usada en el PEDIDO POR la cláusula
de una pregunta. ˚
2. ® D. Subquery que anida puede ser hecho a muchos niveles.

® A, B, y C. A y C son incorrectos porque las subconsultas pueden ser anidadas. El B es
incorrecto porque el ˚
el número de filas volvió no es relevante para subconsultas que anidan, sólo para los operadores
usados.
3. ® A. El SET de resultado de la pregunta interior es necesario antes de que la pregunta
externa puede ejecutarse. ✓
® B, C, y D. Los B y C no son posibles porque el resultado de la subpregunta es necesario
antes ˚
la pregunta paternal puede comenzar. El D es incorrecto porque la subpregunta sólo es ejecutada
una vez.
4. ® D. Esto es una subpregunta correlacionada, que debe ser ejecutada para cada fila en
la comando. ✓
® A, B, y C. El resultado de la pregunta interior es dependiente de un valor de la pregunta
externa; esto ˚
debe ser por lo tanto ejecutado una vez para cada fila.

Describa los Tipos de problemas Que las Subconsultas Pueden Solucionar


5. ® A, D. Las dos select entregarán el mismo resultado, y ninguno fallará si el nombre ✓
es duplicado.
® B, C. El B es incorrecto porque las select son funcionalmente idénticas, aunque sintácticamente
˚
diferente. El C es incorrecto porque el operador de comparación usado, EN, puede manejarse una
subpregunta de fila múltiple.

Liste los Tipos en una lista de Subconsultas


6. ® A, B. Una subpregunta escalar puede ser definida como una pregunta que devuelve
un valor solo. ✓
® C, D. El C es incorrecto porque una subpregunta escalar es la única subpregunta que puede
ser usada en el ˚
LISTA SENTENCIA. El D es incorrecto porque las subconsultas escalares pueden ser
correlacionadas.
7. ® E. TODOS, CUALQUIERA, EN, y NO EN es los operadores de comparación de
fila múltiple. ✓
® A, B, C, D. Todos éstos pueden ser usados. ˚

Escriba Subconsultas de Fila múltiple y Fila sola


8. ® C. El operador de igualdad requiere una subpregunta de fila sola, y la segunda subpregunta
podría ✓
devuelva varias filas.
® A, B, D. A es incorrecto porque la select fallará en todas las circunstancias excepto ˚ improbable
el instancia donde hay cero o EMPLOYEES. El B es incorrecto porque esto no es un problema;
tiene que no haber ninguna relación entre la fuente de datos para las preguntas interiores y externas.
El D es incorrecto porque la subpregunta sólo se ejecutará una vez; no es una subpregunta
correlacionada.
380
Capítulo 8:
La utilización de Subconsultas para Solucionar problemas

9. los ® A y B son idénticos. ✓


® el C es lógicamente el mismo como A y B, pero sintácticamente no es posible; esto dará un error.
˚
El D siempre no devolverá ningunas filas, porque pide a todos los EMPLOYEES que tienen un
sueldo más abajo que todos los EMPLOYEES. Esto no es un error, pero nunca puede devolver
ninguna fila. El filtro en DEPARTMENTS no es relevante.
10. ® C. Si una subpregunta vuelve NULO, entonces la comparación también volverá NULO,
significando esto ✓
ningunas filas serán recuperadas.
® A, B, D. A es incorrecto porque esto no causaría un error. El B es incorrecto porque una
comparación ˚
con el NULO no devolverá nada, no todo. El D es incorrecto porque una comparación con el
NULO nunca puede devolver nada, no hasta otro NULLs.

RESPUESTA DE LABORATORIO
Lo siguiente es dos soluciones posibles usando a CUALQUIERA y MINUTO:
seleccione last_name de EMPLOYEES donde
el sueldo> cualquiera (seleccionan el sueldo de EMPLOYEES donde last_name ='
Taylor') piden por last_name;

seleccione last_name de EMPLOYEES donde el sueldo no <(seleccionan el minuto


(sueldo) de EMPLOYEES donde last_name =' Taylor') piden por last_name;
Éstos son tan válidos como las soluciones presentaron antes que usó TODOS y MAX, pero ellos no
hacen
dé el mismo resultado. No hay ninguna manera de decir que éstos son mejores o peores que las
soluciones más tempranas. El problema consiste en que la subpregunta está basada en una columna que
no es la clave primaria. No sería irrazonable decir que todas estas soluciones son incorrectas, y la
pregunta original es la mejor; esto da un resultado que es inequívocamente correcto si el LAST_NAME
es único, y si LAST_NAME no es único, esto lanza un error más bien que dar una respuesta
cuestionable. La verdadera respuesta es que la pregunta debería estar basada en EMPLOYEE_ID, no
LAST_NAME.

9
La utilización de
los
Operadores
de SET

OBJETIVOS DE CERTIFICACIÓN
9.01 Describa a los Operadores de SET
9.02 Use a un Operador de SET para Combinarse Múltiple
Preguntas en una Pregunta Sola

9.03

Q&A

Controle el Pedido de Filas Devueltas


Taladradora de dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

382
Capítulo 9:
La utilización de los Operadores de SET

Cualquier pregunta de SQL puede ser

descrita matemáticamente (el álgebra relacional es el término usado para esto), pero el uso de

operadores de SET consiste en que matemáticas de escuela de memorias a muchos

programadores. Como su plan de estudios de matemáticas puede no haber incluido la


teoría de conjuntos, lo siguiente es
un resumen corto.

Todas las select SENTENCIAS devuelven un SET de filas. Los operadores de SET
toman como su ingreso los resultados de dos o más select SENTENCIAS y de éstos
generan un SET de resultado solo. Esto es conocido como una pregunta compuesta. El
oracle provee a tres operadores de SET: UNIÓN, CRÚCESE, y MENOS. LA UNIÓN
Puede ser calificada con TODOS. Hay una desviación significativa del estándar de
organización internacional para la normalización para SQL aquí, en aquella
organización internacional para la normalización usos de SQL EXCEPTO donde usos
de Oracle MENOS, pero la funcionalidad es idéntica. La diferencia puede ser
importante virando aplicaciones a babor (o habilidades) desarrollado para una base de
datos de tercero al entorno de Oracle.

OBJETIVO DE CERTIFICACIÓN 9.01

Describa a los Operadores de SET


Los operadores de SET usados en preguntas compuestas son como sigue:

■ UNIÓN Devuelve las filas combinadas de dos preguntas, clasificándolos y


borrar duplicados. ■ UNIÓN TODOS Devuelve las filas combinadas de
dos preguntas sin la comandoación
o borrar duplicados.
Los  SE CRUZAN Las vueltas sólo las filas que ocurren en los SETs de resultado
de las ambas preguntas,
la comandoación de ellos y borrando duplicados.
■ MENOS Las vueltas sólo las filas en el primer SET de resultado que no
aparecen en
el segundo resultado se puso, clasificándolos y borrando duplicados.

Estos comandos son equivalentes a los operadores estándares usados en la teoría de


conjuntos de matemáticas, a menudo representada gráficamente como diagramas de
Venn.

SETs y Diagramas de Venn


Describa a los Operadores de SET
383
Considere agrupaciones de criaturas vivas, clasificadas como
sigue:

■ Criaturas con dos piernas La gente, los loros,


murciélagos ■ Criaturas que pueden volar Loros,
murciélagos, abejas
■ Criaturas con pielOsos, murciélagos

Cada comandoación es conocida como un SET, y cada miembro del SET es un


elemento.
La unión de los tres SETs es gente, loros, murciélagos, abejas, y osos. Esto es todos los
elementos en todos los SETs, sin las copias. La intersección de los SETs es todos los
elementos que son comunes a tres SETs, otra vez borrando los duplicados. En este
ejemplo simple, la intersección tiene sólo un elemento: murciélagos. La intersección
del SET de dos piernas y el SET de vuelo tiene dos elementos: loros y murciélagos. El
menos de los SETs es los elementos de un SET sin los elementos del otro, entonces el
SET de criaturas de dos piernas, menos el SET de criaturas volante, menos el SET de
criaturas peludo, causa un elemento solo: gente.
Estos SETs pueden ser representados gráficamente como el diagrama de Venn mostrado
en la Figura 9-1. (Los diagramas de Venn son nombrados por John Venn, que formalizó la
teoría en la universidad de Cambridge en el siglo diecinueve.)
El círculo en la cumbre dejada de la cifra representa el SET de criaturas de dos piernas;
el derecho de cumbre de círculo es criaturas que pueden volar; el círculo de fondo es
animales peludos. Las uniones, las intersecciones, y minuses de los SETs son
inmediatamente aparentes observando los elementos en varias partes de los círculos que
hacen o no se superponen. El diagrama

FIGURA 9-1

Un diagrama de Venn, pruebas tres SETs y el SET universal


GENTE

LOROS

MURCIÉLAGOS

ABEJAS

OSOSDE
PESCADO
384
Capítulo 9:
La utilización de los Operadores de SET

en la cifra también incluye el SET universal, representado por el rectángulo. El SET


universal es todos los elementos que existen, pero no son miembros de los SETs
definidos. En este instancia, el SET universal sería definido como todas las criaturas vivas
que evolucionaron sin desarrollar la piel, dos piernas, o la capacidad de volar (como el
pescado).
Esto es bastante escuela maths; ahora siga a la realización dentro de SQL.

Principios generales de Operador de SET


Todos los operadores de SET hacen preguntas compuestas combinando los SETs de
resultado de dos
o más preguntas. Si una select SENTENCIA incluye a más de un operador de SET (y
por lo tanto más de dos preguntas), ellos serán aplicados en el pedido que el
programador especifica: cumbre para profundizar y dejado a derecho. Aunque los
realces pendientes a la organización internacional para la normalización que SQL dará
CRUCEN una prioridad más alta que los demás, no hay actualmente ninguna prioridad
de un operador sobre el otro. Para anular esta precedencia, basada en el pedido en el
cual los operadores aparecen, usted puede usar paréntesis: los operadores dentro de
soportes serán evaluados antes de pasar los resultados a operadores fuera de los soportes.

Considerando el cambio pendiente de la prioridad de operador, puede ser la


práctica buena siempre para usar paréntesis. Esto asegurará que la función del
código no cambiará cuando ejecutado contra una versión posterior de la base de
datos.

Cada pregunta en una pregunta compuesta proyectará su propia lista de columnas


seleccionadas. Estas listas deben tener el mismo número de elementos, ser denominadas
en la misma secuencia, y ser del tipo de datos ampliamente similar. Ellos no tienen que
tener los mismos nombres (o aliases de columna), tampoco ellos tienen que venir de las
mismas tablas (o subconsultas). Si la columna llama (o aliases) son diferentes, el SET
de resultado de la pregunta compuesta hará llamar columnas como ellos estaban en la
primera pregunta.
Mientras las listas de columna seleccionadas no
tienen que ser exactamente el mismo tipo de datos,
ellos deben ser del mismo grupo de tipo de datos. Por
ejemplo,
Las columnas en las preguntas las columnas seleccionadas por una pregunta
podrían ser de
esto arregla una pregunta compuesta puede tener FECHA de tipos de datos y NÚMERO, y
aquellos nombres diferentes, pero el SET de resultado salida de la segunda pregunta podría ser
TIMESTAMP usará los títulos de las columnas en el y NÚMERO ENTERO. El SET de resultado
del compuesto primero pregunta. la pregunta tendrá columnas con el más alto
nivel de precisión: en este instancia, ellos serían
TIMESTAMP y NÚMERO. Además de
Describa a los Operadores de SET
385

aceptando tipos de datos del mismo grupo, los


operadores de SET no harán ningún reparto de tipo
implícito. Si la segunda pregunta recuperara
columnas del tipo
Las columnas correspondientes en las preguntas que arreglan una pregunta
compuesta deben ser del mismo grupo de tipo de datos.
VARCHAR2, la pregunta compuesta lanzaría un error aun si las variables de cuerda pudieran ser resueltas a
fecha legítima y valores numéricos.
LA UNIÓN, MENOS, y SE CRUZA siempre combinará los SETs de resultados del ingreso
preguntas, luego clasifique los resultados de borrar filas duplicadas. La comandoación
está basada en todas las columnas, de la izquierda a la derecha. Si todas las columnas en
dos filas tienen el mismo
valor, entonces sólo la primera fila es devuelta en
el SET de resultado compuesto. Un efecto
secundario de esto es que salida de una pregunta
compuesta será clasificada.
Una pregunta compuesta va Si el pedido de clase (que sube, basado por filas de
vuelta por defecto clasificadas a través de todos a la comando en la cual las columnas
pasan a las columnas, de la izquierda a la derecha. El único aparezca en las listas sentencias)
no es el pedido usted la excepción es la UNIÓN TODOS, donde las filas quiero, es posible ahorrar
un PEDIDO solo no será clasificado. El único lugar donde cláusula al final de pregunta
compuesta. Es un PEDIDO POR la cláusula es permitido está en no posible usar PEDIDO
POR en cualquier del final de la pregunta compuesta. las preguntas que arreglan el compuesto
entero
la pregunta, ya que esto interrumpiría la
comandoación que es
necesario para borrar duplicados.
UNIÓN TODO es la excepción a la regla "no que clasifica ningunos duplicados": los
SETs de resultado de las dos preguntas de ingreso serán concadenados para formar el
resultado de la pregunta compuesta. Pero usted todavía no puede usar el PEDIDO POR en
las preguntas individuales; sólo puede aparecer al final de pregunta compuesta donde será
aplicado al SET de resultado completo.

EJERCICIO 9-1 Describe a los Operadores de SET


En este ejercicio, usted verá el efecto de los operadores de SET. SQL*Plus o SQL
El developer puede ser usado.

1. Conecte a su base de datos como la HORA de usuario 2. Ejecute esta pregunta:


seleccione region_name de REGIONS;
Note el resultado, en particular el pedido de las filas. Si la comando es tan al
principio
creado, habrá cuatro filas devueltas. El pedido será Europa, América, Asia,
Oriente Medio.
386
Capítulo 9:
La utilización de los Operadores de SET

3. Pregunte la comando de REGIONS dos veces, usando la UNIÓN:


seleccione region_name de region_name escogido de la unión de REGIONS de REGIONS;
Las filas volvieron será en cuanto al paso 1, pero clasificado por comando alfabético.
4. Esta vez, use la UNIÓN TODOS:

seleccione region_name de la unión de REGIONS todos seleccionan region_name de


REGIONS;
Allí será doble el número de filas, y ellos no serán clasificados.
5. Una intersección recuperará filas comunes para dos preguntas:

region_name escogidos de REGIONS cruzan region_name escogido de REGIONS;


Cuatro filas son comunes, y el resultado es clasificado.
6. Un MENOS borrará filas comunes:
seleccione region_name de REGIONS menos region_name escogido de REGIONS;
La segunda pregunta borrará todas las filas en la primera pregunta. Resultado: ningunas filas se marcharon.

OBJETIVO DE CERTIFICACIÓN 9.02

Use a un Operador de SET para Combinar


Preguntas Múltiples en una Pregunta Sola
Las preguntas compuestas son dos o más preguntas, conectadas con uno o varios
operadores de SET.
El resultado final es un SET de resultado solo.
Los ejemplos que siguen están basados en dos tablas, OLD_DEPT y NEW_DEPT. La
comando OLD_DEPT es querido para representar una comando creada con una versión
más temprana del Oracle, cuando el único tipo de datos disponible para representar fecha
y datos de tiempo era la FECHA, la única opción para datos numéricos era el NÚMERO,
y los datos de carácter eran el TRABAJO POR HORAS de longitud fija. NEW_DEPT de
comando usa el NÚMERO ENTERO más estrechamente definido tipo de datos numérico
(que el Oracle pone en práctica como VARIOS hasta 38 dígitos significativos, pero
ningunos sitios decimales), VARCHAR2 más espacial y eficiente para el carácter
Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta
Sola
387

los datos, y el tipo de datos TIMESTAMP, que puede por fecha de tienda por defecto y
valores de tiempo con seis decimales de la precisión durante los segundos. Hay dos filas en
cada comando.

La UNIÓN TODO el Operador


Una UNIÓN TODO toma dos SETs de resultado y los concadena juntos en un single
el resultado se puso. Los SETs de resultado vienen de dos preguntas que deben
seleccionar el mismo número de columnas, y las columnas correspondientes de las dos
preguntas (en el pedido en el cual ellos son especificados) debe ser del mismo grupo de
tipo de datos. Las columnas no tienen que tener los mismos nombres.
La figura 9-2 demuestra una UNIÓN TODA la operación de dos tablas. La UNIÓN
TODAS las dos tablas converte todos los valores al nivel más alto de la precisión: las
fechas son devueltas como timestamps (las FECHAS menos precisas rellenadas de
ceros), los datos de carácter son VARCHAR2 más eficiente con la longitud de la
columna de ingreso más larga, y los números (aunque esto no sea obvio debido a la
naturaleza de los datos) aceptará decimales. El pedido de las filas es las filas de la
primera comando, en cualquier pedido ellos resultan ser almacenados, seguidos de las
filas de la segunda comando en cualquier pedido ellos resultan ser almacenados.
El Operador de UNIÓN
Una UNIÓN realiza una UNIÓN TODOS y luego clasifica el resultado a través de todas
las columnas
y borra duplicados. La primera pregunta en la Figura 9-3 devuelve cuatro filas porque no
hay ningunos duplicados. Sin embargo, las filas están ahora en el pedido. Puede parecer
que las dos primeras filas no están en el pedido debido a los valores en el FECHADO, pero
ellos son: el DNAME

FIGURA 9-2

Una UNIÓN TODOS con conversiones de tipo de datos


388
Capítulo 9:
La utilización de los Operadores de SET

Una UNIÓN TODOS volverán

en la comando OLD_DEPTS es 20 bytes de largo (rellenado de espacios), mientras que el DNAME en


NEW_DEPTS, donde es un VARCHAR2, sólo es mientras el nombre sí mismo. Los espacios dan el
las filas se agruparon de cada pregunta en su pedido natural. Este comportamiento puede
ser modificado colocando un PEDIDO solo POR la cláusula al final.
la fila de OLD_DEPT un valor de clase más alto, aunque el valor de fecha sea menos.
La segunda pregunta en la Figura 9-3 borra cualquier conducción o rastreo de espacios de las columnas
DNAME y corta los elementos tiempo de
FECHADO y COMENZADO. Dos de las filas así se hacen idénticas, y entonces sólo un
aparece en salida.
A causa de la clase, el pedido de las preguntas en una pregunta de compuesto de
UNIÓN no hace ninguna diferencia del pedido de las filas devuelta.

Si usted sabe que no pueden haber ningunos duplicados entre dos tablas,
entonces siempre usan la UNIÓN TODOS. Esto guarda la base de datos de
hacer mucha comandoación. Su DBA no será contento con usted si usted usa la
UNIÓN innecesariamente.

El Operador CRUZAR
La intersección de dos SETs es las filas que son comunes a ambos SETs, como
mostrado en
Figura 9-4.
La primera pregunta mostrada en la Figura 9-4 no devuelve ningunas filas, porque
cada fila en las dos tablas es diferente. Después, la aplicación de funciones para eliminar
algunas diferencias devuelve una fila común. En este instancia, sólo una fila es devuelta;
hubo varias filas comunes, ellos estarían en el pedido. El pedido en el cual las preguntas
aparecen en la pregunta compuesta no tiene ningún efecto en esto.

FIGURA 9-3

Preguntas de compuesto de UNIÓN


Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta
Sola
389

FIGURA 9-4

CRÚCESE y MENOS

EL MENOS Operador
UN MENOS carreras tanto preguntas, clasifica los resultados, como sólo devuelve
las filas del
primero resulte el SET que no aparecen en el segundo SET de resultado.
La tercera pregunta en la Figura 9-4 devuelve todas las filas en OLD_DEPT
porque no hay ningunas filas correspondientes en NEW_DEPT. La última pregunta
fuerza alguna concordancia, causando una de las filas al borrado. A causa de la clase,
las filas estarán en el pedido independientemente del pedido en el cual las preguntas
aparecen en la pregunta compuesta.

DENTRO DEL EXAMEN


La utilización de los Operadores de SET
Una pregunta compuesta es una pregunta arreglada de varias preguntas, pero ellas no son
subconsultas. Una subpregunta genera un SET de resultado que es usado por otra pregunta; las
preguntas en una pregunta compuesta se ejecutan independientemente, y una etapa separada de la
ejecución combina los SETs de resultado.
Esta operación de combinación es llevada a cabo clasificando los SETs de resultado y
fusionándolos juntos. Hay una excepción a esto: UNIÓN TODO no hace ningún procesamiento
después de ejecutar las dos preguntas; esto simplemente pone los resultados en una lista de cada uno.
390
Capítulo 9:
La utilización de los Operadores de SET

Ejemplos Más complejos


Si dos preguntas no devuelven el mismo número de columnas, todavía puede ser posible
a
ejecútelos en una pregunta compuesta generando columnas adicionales con valores
NULOS. Por ejemplo, considere un sistema de comandoación para animales: todos los
animales tienen un nombre y un peso, pero las aves tienen una envergadura mientras que
los gatos tienen una longitud de cola. Una pregunta para poner en una lista todas las aves
y gatos podría ser:
seleccione el nombre, tail_length, to_char (nulo) de la unión de
gatos todo el nombre escogido, to_char (nulo), wing_span de aves;
Note el uso de TO_CHAR (NULO) para generar los valores ausentes.
Una pregunta compuesta puede consistir en más de dos preguntas, en cuyo instancia
operador
la precedencia puede ser controlada con paréntesis. Sin paréntesis, los operadores de
SET serán aplicados en la secuencia en la cual ellos son especificados. Considere la
situación donde hay una comando PERMSTAFF con un listado de todos los
EMPLOYEES permanentes y unos CONSULTORES de comando con un listado del
personal de consultor. También hay una LISTA NEGRA de comando de la gente puesta
en el índice por un motivos o el otro. La pregunta siguiente pondrá a todo el personal
permanente y consultor en una lista en un cierto geográfico, borrando a aquellos en la
lista negra:
seleccione el nombre de permstaff donde posición = unión 'de Alemania'
todo el nombre escogido de consultores donde work_area = 'Europa
Occidental' menos el nombre escogido de la lista negra;
Note el uso de UNIÓN TODOS, porque es asumido que nadie estará en ambos
el PERMSTAFF y las tablas de CONSULTORES; una UNIÓN forzaría una clase
innecesaria. El pedido de precedencia para operadores de SET es el pedido especificado
por el programador, entonces el MENOS la operación comparará la LISTA NEGRA
con el resultado de la UNIÓN TODOS. El resultado será todo el personal (permanente
y consultor) quiénes no aparecen en la lista negra. Si poner en el índice sólo pudiera ser
aplicado al personal consultor y no al personal permanente, habría dos posibilidades. En
primer lugar, las preguntas podrían ser puestas en una lista en un pedido diferente:
seleccione el nombre de consultores donde work_area = 'Europa
Occidental' menos el nombre escogido de la unión de lista negra todo el
nombre escogido de permstaff donde posición = 'Alemania';
Use a un Operador de SET para Combinar Preguntas Múltiples en una Pregunta
Sola

Esto devolvería a consultores que no son puestos en el índice y luego añaden todos
391
personal permanente. O bien, los paréntesis podrían controlar la precedencia
explícitamente:
seleccione el nombre de permstaff donde la posición = unión 'de
Alemania' todos (seleccionan el nombre de consultores donde work_area
= 'Europa Occidental' menos el nombre escogido de la lista negra);
Esta pregunta pondrá a todo el personal permanente en una lista y luego añadirá a todo
el personal de consultor quien
no son puestos en el índice.
Estas dos preguntas devolverán las mismas filas, pero el pedido será diferente porque la
UNIÓN TODAS las operaciones pone en una lista el PERMSTAFF y tablas de
CONSULTORES en una secuencia diferente. Para asegurar que las preguntas devuelven
SETs de resultado idénticos, tendría que haber un PEDIDO POR la cláusula en el pie de
las preguntas compuestas.

Las dos preguntas precedentes devolverán las mismas filas, pero la segunda
versión podría ser considerada el mejor código porque los paréntesis lo hacen
más auto - documentación. Además, confiar en la precedencia implícita basada en
el pedido de los trabajos de preguntas en este momento, pero las futuras
liberaciones del SQL puede incluir la precedencia de operador de SET.

GUIÓN & SOLUCIÓN


Como le puede presentar varias tablas ¿Esto es un problema común, a menudo causado por el análisis de sistemas
malo con datos similares como una comando? o quizás por tentativas de integrar sistemas juntos. Compuesto
las preguntas a menudo son la respuesta. Usando el reparto de tipo
funciona para obligar columnas al mismo tipo de datos y TO_CHAR
(NULO) a generar columnas ausentes, usted puede presentar los datos
como si fuera de una comando.
Hay allí cuestiones de rendimiento con Quizás. ¿A excepción de la UNIÓN TODOS, comliste preguntas de
compuesto de preguntas? tienen que clasificar datos, a través de la anchura llena de las filas. Esto puede ser
caro tanto en memoria como en unidad central de proceso. También, si
las dos preguntas ambos se dirigen a la misma comando, habrá dos pasa
por los datos ya que cada pregunta es ejecutada independientemente; si el
mismo resultado pudiera ser conseguido con un (aunque probablemente
más complicado) pregunta, esto sería por lo general una solución más
rápida. Las preguntas compuestas son un instrumento potente, pero
deberían ser usadas con la precaución.
392
Capítulo 9:
La utilización de los Operadores de SET
EJERZA 9-2 Utilización de los Operadores de SET
En este ejercicio, usted ejecutará preguntas compuestas más complejas.

1. Conecte a su base de datos como la HORA de usuario 2. Ejecute esta pregunta


para contar a los EMPLOYEES en tres DEPARTMENTS:
seleccione department_id, la cuenta (1) de EMPLOYEES donde
department_id en (20,30,40) grupo por department_id;

3. Obtenga el mismo resultado con una pregunta compuesta:


seleccione 20, la cuenta (1) de EMPLOYEES donde unión
department_id=20 todos los 30 escogidos, la cuenta (1) de EMPLOYEES
donde unión department_id=30 todos los 40 escogidos, la cuenta (1)
de EMPLOYEES donde department_id=40;

4. Averigüe si cualquier gerente maneja al personal en las ambas oficinas 20 y 30, y


excluya a cualquier gerente con el personal en la oficina 40:
seleccione manager_id de EMPLOYEES donde department_id=20 cruzan
manager_id escogido de EMPLOYEES donde department_id=30 menos
manager_id escogido de EMPLOYEES donde department_id=40;

5. Use una pregunta compuesta para relatar sueldos subsumados por el departamento,
por el gerente,
y el total total:
seleccione department_id, to_number (nulo), sume (sueldo) del
grupo de EMPLOYEES por la unión department_id seleccionan el
to_number (nulo), manager_id, suman (sueldo) del grupo de
EMPLOYEES por la unión manager_id todos seleccionan el to_number
(nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

OBJETIVO DE CERTIFICACIÓN 9.03


Controle el Pedido de Filas Devueltas
393

Controle el Pedido de Filas Devueltas


En ausencia, salida de una UNIÓN TODA la pregunta compuesta no es clasificada en
absoluto: el
las filas serán devueltas en grupos en el pedido del cual la pregunta fue puesta en una
lista primero y dentro de los grupos en el pedido que ellos resultan ser almacenados.
Salida de cualquier otro operador de SET será clasificada en comando ascendente de
todas las columnas, que comienzan con la primera columna llamada.
No es sintácticamente posible usar un PEDIDO POR la cláusula en las preguntas
individuales que arreglan una pregunta compuesta. Esto es porque la ejecución de la
mayor parte de preguntas compuestas tiene que clasificar las filas, que entrarían en
conflicto con el PEDIDO POR. Podría parecer teóricamente posible que una UNIÓN
por la cual TODOS (que no clasifica las filas) podrían tomar un PEDIDO para cada
pregunta, pero la realización de Oracle de la UNIÓN que TODO no permite a esto.
No hay ningún problema con la colocación de un PEDIDO POR la cláusula al final
de pregunta compuesta, sin embargo. Esto clasificará el entero salida de la pregunta
compuesta. La comandoación por defecto de filas está basada en todas las columnas en
la secuencia ellos aparecen. Un PEDIDO especificado POR la cláusula no tiene ningunas
restricciones: puede estar basado en cualquier columna (y funciones aplicadas a
columnas) en cualquier pedido. Por ejemplo:
SQL> seleccione deptno, recorte (dname) el nombre de
old_dept
2 unión 3 seleccione dept_id, dname de new_dept 4
pedido de nombre;
NOMBRE DE DEPTNO
---------- --------------------
10 Cuentas 30 Admin 20 Apoyo
Note que los nombres de columna en el PEDIDO POR la cláusula deben ser el
nombre (s) (o,
en este instancia, el alias) de las columnas en la primera pregunta de la pregunta
compuesta.
394
Capítulo 9:
La utilización de los Operadores de SET

EJERZA 9-3 Control que el Pedido de Filas Devolvió


En este ejercicio, usted comandoará el resultado del paso final en el Ejercicio 2. Este
paso
producido un listado de sueldos sumados por el departamento y luego por el gerente,
pero los resultados no fue muy bien formateado.

1. Conecte a su base de datos como la HORA de usuario 2. Genere mejores títulos


de columna para la pregunta:
seleccione el departamento department_id, to_number mgr (nulo),
sume (sueldo)
del grupo de EMPLOYEES por la unión department_id todos seleccionan
el to_number (nulo), manager_id, suman (sueldo) del grupo de
EMPLOYEES por la unión manager_id todos seleccionan el to_number
(nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

3. Intente clasificar los resultados de las preguntas que total parcial usando la
UNIÓN
en vez de UNIÓN TODOS:
seleccione el departamento department_id, to_number mgr (nulo),
sume (sueldo)
del grupo de EMPLOYEES por la unión department_id seleccionan el
to_number (nulo), manager_id, suman (sueldo) del grupo de
EMPLOYEES por la unión manager_id todos seleccionan el to_number
(nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;
Esto sería fino, salvo que los totales parciales para el personal sin un
departamento o
un gerente es colocado en el fondo de salida encima del magnífico total, no en
las secciones para DEPARTMENTS y gerentes.
4. Genere un valor para reemplazar el NULLs para códigos de gerente y
departamento
y para el total total:
seleccione 20, la cuenta (1) de EMPLOYEES donde department_id=20
unión todos los 30 escogidos, la cuenta (1) de EMPLOYEES donde
unión department_id=30 todos los 40 escogidos, la cuenta (1) de
EMPLOYEES donde department_id=40;
Resumen de certificación
395

5. Averigüe si cualquier gerente maneja al personal en las ambas oficinas 20 y 30, y


excluya a cualquier gerente con el personal en la oficina 40:
seleccione manager_id de EMPLOYEES donde department_id=20
cruce manager_id escogido de EMPLOYEES donde department_id=30
menos manager_id escogido de EMPLOYEES donde department_id=40;

6. Use una pregunta compuesta para relatar sueldos subsumados por el departamento,
por el gerente,
y el total total:
seleccione el departamento department_id, to_number mgr (nulo),
sume (sueldo)
del grupo de EMPLOYEES por la unión department_id seleccionan el
to_number (nulo), manager_id, suman (sueldo) del grupo de
EMPLOYEES por la unión manager_id todos seleccionan el to_number
(nulo), to_number (nulo), suman (sueldo) de EMPLOYEES;

RESUMEN DE CERTIFICACIÓN
Los operadores de SET combinan los SETs de resultado de dos o más preguntas en un
resultado
SET. Una pregunta que usa a un operador de SET es una pregunta compuesta. Los
operadores de SET son la UNIÓN, UNIÓN TODOS, SE CRUZAN, y MENOS. Ellos
tienen la precedencia igual, y si más de un es incluido en una pregunta compuesta ellos
serán ejecutados en el pedido en el cual ellos ocurren - aunque esto pueda ser
controlado usando paréntesis. Todos los operadores de SET excepto la UNIÓN
TODOS confían en la comandoación para fusionar SETs de resultado y borrar filas
duplicadas.
Las preguntas en una pregunta compuesta deben devolver el mismo número de
columnas. Las columnas correspondientes en cada pregunta deben ser de tipos de datos
compatibles. Las preguntas pueden usar aspectos de la select SENTENCIA a excepción
del PEDIDO POR; es, sin embargo, permisible colocar un PEDIDO solo POR la cláusula
al final de pregunta compuesta.
396
Capítulo 9:
La utilización de los Operadores de SET


TALADRADORA DE DOS MINUTOS
Describa a los Operadores de SET
❑ UNIÓN TODO concadena los resultados de dos preguntas. ❑ UNIÓN clasifica los
resultados de dos preguntas y borra duplicados. los  CRUZAN vueltas sólo las filas comunes
para el resultado de dos preguntas. ❑ MENOS vueltas las filas de la primera pregunta que no
existen en el segundo
pregunta.

Use a un Operador de SET para Combinar Preguntas Múltiples en una


Pregunta Sola
❑ Las preguntas en la pregunta compuesta debe devolver el mismo número de columnas. ❑ Las
columnas correspondientes debe ser del tipo de datos compatible. ❑ Los operadores de SET
tienen la precedencia igual y será aplicado en el pedido ellos
son especificados.

Controle el Pedido de Filas Devueltas


❑ no es posible usar el PEDIDO POR en las preguntas individuales que hacen a
pregunta compuesta. ❑ Un PEDIDO POR la cláusula puede ser añadido al final de una
pregunta compuesta. ❑ Las filas devueltas por una UNIÓN TODOS estarán en el pedido ellos
ocurren en el
dos preguntas de la fuente.
❑ Las filas devueltas por una UNIÓN será clasificado a través de todas sus columnas, dejadas
a derecho.
MÍ PRUEBA
Describa a los Operadores de SET
1. ¿Cuál de estos operadores de SET no clasificará las filas? (Elija la mejor respuesta.)
A. CRUCE B. MENOS C. UNIÓN D. UNIÓN TODOS
Mí Prueba
397
2. ¿Cuál de estos operadores borrará filas duplicadas del resultado final? (Elija todo que se aplican.)
A. CRUCE B. MENOS C. UNIÓN D. UNIÓN TODOS

Use a un Operador de SET para Combinar Preguntas Múltiples en una


Pregunta Sola
3. Si una pregunta compuesta contiene tanto un MENOS como un operador CRUZAR, que será
¿aplicado primero? (Elija la mejor respuesta.) A. CRUZAR, porque SE CRUZAN tiene la
precedencia más alta que MENOS. B. El MENOS, porque MENOS tiene una precedencia más
alta que SE CRUZAN. C. La precedencia es determinada por el pedido en el cual ellos son
especificados. D. No es posible para una pregunta compuesta incluir tanto MENOS como
CRUZARSE.
4. Hay cuatro filas en la comando de REGIONS. Considere las select siguientes y elija como
muchas filas serán devueltas para cada uno: 0, 4, 8, o 16.
A. seleccione * de la unión de REGIONS sentencia * de REGIONS B. escogido * de la
unión de REGIONS que todos seleccionan * de REGIONS C. escogido * de REGIONS menos el
escogido * de REGIONS que D. escogidos * de REGIONS cruzan escogido * de REGIONS
5. Considere esta pregunta compuesta:
seleccione empno, alquilado de emp
unión todos seleccionan emp_id, alquilado, disparado de ex_emp;
398
Capítulo 9:
La utilización de los Operadores de SET

Las columnas EMP.EMPNO y EX_EMP.EMP_ID son el número entero; la columna EMP.HIRED es


timestamp; las columnas EX_EMP.HIRED y EX_EMP.FIRED son la fecha. ¿Por qué va el estado -
ment falla? (Elija la mejor respuesta.) A. Como las columnas EMPNO y EMP_ID tienen nombres
diferentes B. Como las columnas EMP.HIRED y EX_EMP.HIRED son tipos de datos diferentes C.
Como hay dos columnas en la primera pregunta y tres columnas en la segunda consulta D. Por
todos los motivos encima de E. La pregunta tendrá éxito.

Controle el Pedido de Filas Devueltas


6. ¿Qué línea de esta select hará que esto falle? (Elija la mejor respuesta.)
A. seleccione ename, alquilado de current_staff B. pedido por ename C. menos D.
seleccionan ename, alquilado del personal corriente E. donde deptno=10 F. piden por
ename;
7. Estudie esta select:

seleccione ename de la unión emp todos seleccionan ename de ex_emp;


¿En que pedido serán devueltas las filas? (Elija la mejor respuesta.)
A. Las filas de cada comando serán agrupadas y dentro de cada grupo será clasificado en ENAME.
B. Las filas de cada comando serán agrupadas, pero no clasificadas. C. Las filas no serán
agrupadas, pero serán todos clasificadas en ENAME. D. Las filas serán ni agrupadas, ni
clasificadas.

PREGUNTA DE LABORATORIO
Trabajando en el esquema de HORA, diseñe algunas preguntas que generarán informes usando a los
operadores de SET.
Los informes requeridos son como sigue:
1. Los EMPLOYEES tienen su trabajo corriente (identificado por JOB_ID) registrado en su fila de
EMPLOYEES.
Los JOBS que ellos han sostenido antes (pero no su trabajo corriente) son registrados en
JOB_HISTORY. ¿Qué EMPLOYEES nunca han cambiado JOBS? El listado debería incluir
EMPLOYEE_ID de los EMPLOYEES y LAST_NAME.
Pregunta de laboratorio
399

2. Qué EMPLOYEES fueron reclutados en un trabajo, luego cambiaron a un trabajo diferente, pero son
ahora
¿atrás en un trabajo ellos sostuvieron antes? Otra vez, usted tendrá que construir una pregunta que
compara a EMPLOYEES con JOB_HISTORY. El informe debería mostrar los nombres de los
EMPLOYEES y los títulos de trabajo. Los títulos de trabajo son almacenados en los JOBS de
comando.
3. ¿Qué JOBS tiene cualquier empleado sostuvo? Esto será el JOB_ID para la corriente del empleado
trabajo (en EMPLOYEES) y todos los JOBS anteriores (en JOB_HISTORY). Si el empleado ha
sostenido un trabajo más que una vez, no hay ninguna necesidad de ponerlo en una lista más que
una vez. Use una variable de reemplazo para apremio para el EMPLOYEE_ID y mostrar el título (s)
de trabajo. Los EMPLOYEES 101 y 200 serán EMPLOYEES convenientes para pruebas.
400
Capítulo 9:
La utilización de los Operadores de SET

MÍ PRUEBAN
RESPUESTAS
Describa a los Operadores de SET
1. ® D. La UNIÓN TODAS las filas de vueltas en el pedido que ellos son entregados por las dos
preguntas de ✓
que la pregunta compuesta es arreglada.
® A, B, C. CRÚCESE, MENOS, y UNIÓN todo el uso que clasifica como la parte de su
ejecución. ˚
2. ® A, B, C. CRÚCESE, MENOS, y UNIÓN todos borran filas duplicadas. ✓
® D. UNIÓN TODAS las vueltas todas las filas, los duplicados incluidos. ˚

Use a un Operador de SET para Combinar Preguntas Múltiples en una


Pregunta Sola
3. ® C. Todos los operadores de SET tienen la precedencia igual, entonces la precedencia es
determinada por el ✓
la secuencia en la cual ellos ocurren.
® A, B, D. A y B son incorrectos porque los operadores puestos tienen la precedencia igual -
aunque esto pueda ˚
cambio de futuras liberaciones. El D es incorrecto porque muchos operadores de SET pueden ser
usados en una pregunta compuesta.
4. ® UN = 4; B = 8; C = 0; D = 4 ✓
® Nota que 16 no es usado; sería el resultado de una pregunta de producto Cartesiano.
˚
5. ® C. Cada pregunta en una pregunta compuesta debe devolver el mismo número de
columnas. ✓
® A, B, D, E. A es incorrecto porque las columnas pueden tener nombres diferentes. El B es
incorrecto porque ˚
las dos columnas son del mismo grupo de tipo de datos, que es todo que fue requerido. Esto por lo
tanto sigue esto D y E también son incorrectos.

Controle el Pedido de Filas Devueltas


6. ® B. Usted no puede usar el PEDIDO POR para una pregunta de una pregunta compuesta; usted
sólo puede colocar un ✓
PEDIDO solo POR cláusula al final.
® A, C, D, E, F. Todas estas líneas son legales. ˚
7. ® B. Las filas de cada pregunta estarán juntos, pero no habrá ninguna
comandoación. ✓
® A, C, D. A no es posible con ninguna sintaxis. El C es incorrecto porque sería el resultado de
un ˚
UNIÓN, no una UNIÓN TODOS. El D es incorrecto porque UNIÓN TODOS devolverán las filas
de cada pregunta agrupada juntos.

RESPUESTA DE LABORATORIO
Respuesta de laboratorio
401
1. Para identificar a todos los EMPLOYEES que no han cambiado el trabajo, pregunte la comando de
EMPLOYEES y borre
todos aquellos que se pelean en JOB_HISTORY:
seleccione employee_id, last_name de EMPLOYEES
menos employee_id escogido, last_name de job_history acompañan a EMPLOYEES que
usan (employee_id);

2. Todos los EMPLOYEES que han cambiado el trabajo al menos una vez se pelearán en
JOB_HISTORY; para aquellos
quiénes están de vuelta ahora en un trabajo que ellos han sostenido antes, el JOB_ID en
EMPLOYEES será el mismo como el JOB_ID en una de sus filas en JOB_HISTORY:
seleccione last_name, job_title de EMPLOYEES se afilian a JOBS usando (job_id)
cruce last_name escogido, job_title de job_history h JOBS de juntura j en
(h.job_id=j.job_id) acompañan a EMPLOYEES e en (h.employee_id=e.employee_id);

3. Esta pregunta compuesta apremio para un EMPLOYEE_ID y luego pondrá la corriente del empleado
en una lista
trabajo y JOBS anteriores,
seleccione job_title de EMPLOYEES de juntura de JOBS que usan (job_id)
donde employee_id=&&Who unión seleccionan job_title de la juntura de JOBS
job_history usando (job_id) donde employee_id=&&Who;
La figura 9-5 muestra la pregunta y su resultado en el Developer SQL, después de dar 101 como el
EMPLOYEE_ID.

FIGURA 9-5

Una pregunta compuesta y el resultado

Esta página intencionadamente se dejó en blanco

10
Manipulación de
Datos
OBJETIVOS DE CERTIFICACIÓN

10.01

10.02
10.03

Describa Cada Lenguaje de Manipulación de Datos (DML) Select


Filas de inserción en unas Filas de Actualización de Comando en una Comando

10.04
10.05

Q&A

Borre Filas de una Comando


Transacciones de control Taladradora De dos minutos Mí Prueba

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

404
Capítulo 10:
Manipulación de Datos

Este capítulo es todo sobre los comandos aquellos datos de cambio.


Sintácticamente, los comandos de DML son mucho más simples que el comando ESCOGIDO que ha

sido estudiado hasta ahora. Sin embargo, hay una cantidad grande de la teoría de base de datos

relacional que viene junto con

DML. Así como entendiendo los comandos que hacen los cambios, es esencial entender
la teoría de la dirección de transacción, que es la parte del paradigma de base de datos relacional. Los
mecanismos de dirección de transacción proporcionados por la base de datos de Oracle garantizan la
conformidad a los estándares relacionales para transacciones: ellos ponen en práctica lo que es
comúnmente referido como el ÁCIDO (atomicity, consecuencia, aislamiento, y durabilidad) prueba.

Detalle siguiente de los comandos de DML, este capítulo incluye un tratamiento


lleno de
la teoría necesaria: la integridad transaccional, el cierre de registro, y leen el
consecuencia.

OBJETIVO DE CERTIFICACIÓN 10.01

Describa Cada Lenguaje de Manipulación de Datos


(DML) Select
En sentido estricto, hay cinco comandos de DML:

■ SELECCIONAN INSERCIÓN DE  ■ ACTUALIZAN ■ BORRAR ■


FUSIÓN

En la práctica, la mayor parte de profesionales de base de datos nunca incluyen


ESCOGIDO como la parte de DML.
Se considera que esto es una lenguaje separada en su propio derecho, que es bastante
razonable cuando usted considera que se han necesitado los ocho capítulos precedentes
para describirlo. El comando de FUSIÓN a menudo es dejado caer también, no porque no
es claramente un comando de manipulación de datos, pero porque esto no hace nada que
no pueda ser hecho con otros comandos. Pueden pensar de la FUSIÓN como un atajo
para ejecutar un INSERCIÓN o una ACTUALIZACIÓN o un BORRAR, según un
poco de condición. Un comando a menudo considerado con DML es TRUNCADO. Esto
es realmente un DDL (Lenguaje de Definición de Datos) comando, pero como el efecto
para usuarios finales es el mismo como
Describa Cada Lenguaje de Manipulación de Datos (DML) Select
405

BORRAR (aunque su realización sea totalmente diferente), esto realmente


corresponde con DML. De este modo, los comandos siguientes son descritos en las
siguientes secciones, con sintaxis y ejemplos:

■ INSERTAN ACTUALIZACIÓN DE  ■ BORRAR ■ TRUNCADO

Además, hablaremos, para el completo:

■ FUSIÓN

Éstos son los comandos que manipulan datos.

INSERCIÓN

El oracle almacena datos en la forma de filas en tablas. Las tablas son pobladas con filas (como un país es
poblado con la gente) de varios modos, pero la mayor parte de método común es con la select de
INSERCIÓN. SQL es una lenguaje orientada al SET, entonces cualquier comando puede afectar una fila
o un SET de filas. Resulta que una select de INSERCIÓN puede insertar una fila individual en una
comando o muchas filas en muchas tablas. Las versiones básicas de la select realmente insertan sólo una
fila, pero las variaciones más complejas, con un comando, pueden insertar filas múltiples en tablas
múltiples.

Hay técnicas mucho más rápidas que el INSERCIÓN para poblar una comando con grandes
números de filas. Éstos son la herramienta SQL*Loader, que puede ascenso de archivos datos
de archivos producidos por un sistema de alimentador externo, y Datapump, que puede
transferir datos al por mayor de una base de datos de Oracle al otro - vía archivos de disco o
por un enlace de red.

Las tablas tienen reglas definió aquel control las filas que pueden ser insertadas. Estas reglas son
coacciones. Una coacción es una realización de una regla comercial. Los analistas comerciales que modelan
los procesos de negocio de una organización diseñarán un conjunto de reglas para los datos de la
organización. Los ejemplos de tales reglas podrían ser que cada empleado debe tener un número de
empleado único, o que cada empleado debe ser adjudicado a un departamento válido. La creación de
coacciones es descrita en el Capítulo 11 - por el momento, recuerde que no hay ningún modo que un
comando de INSERCIÓN pueda insertar una fila esto
406
Capítulo 10:
Manipulación de Datos

viola una coacción. Tan si usted intenta insertar una fila en EMPLOYEES con un
EMPLOYEE_ID que ya existe en otra fila, o con un DEPARTMENT_ID que no
empareja una fila en la comando de DEPARTMENTS, el inserción fallará. Las
coacciones garantizan que los datos en la base de datos se conforman con las reglas
que definen los procedimientos comerciales.
Hay muchas fuentes posibles para la fila (o filas) insertadas por una select de
INSERCIÓN. Una fila sola puede ser insertada proporcionando los valores a las columnas
de la fila individualmente. Tal select puede ser construida tecleándolo en SQL*Plus o
Developer SQL, o por un proceso de usuario más sofisticado que presenta una forma que
apremio para valores. Esto es la técnica usada para generar las filas insertadas
interactivamente por usuarios finales. Para insercións de filas múltiples, la fuente de las
filas puede ser una select SENTENCIA. Salida de cualquiera y todas las select
SENTENCIAS habladas en preceder a ocho capítulos pueden ser usadas como el
ingreso a una select de INSERCIÓN.
Pueden pensar del resultado final de cualquier select SENTENCIA como una
comando: unos dos - SET dimensional de filas. Esta "comando" puede ser mostrada a un
usuario (quizás en un instrumento simple como SQL*Plus), o puede ser pasado a un
comando de INSERCIÓN para poblar otra comando, definida dentro de la base de
datos. La utilización de una select SENTENCIA a construcción
las filas para una select de INSERCIÓN son una
técnica muy común. El ESCOGIDO puede
realizar muchas tareas. Éstos típicamente incluyen
la conexión

Un comando de INSERCIÓN las filas insertadas en la comando objetivo


contienen
puede insertar una fila, con valores de columna la información que es mucho más
inmediatamente especificada en el comando, o un SET de filas comprensible a los usuarios
finales que la materia prima creado por una select SENTENCIA. datos en las tablas de la fuente.

ACTUALIZACIÓN
tablas y agregaciones, de modo que resultar

El comando de ACTUALIZACIÓN es usado para cambiar filas que ya las existir-filas


que han sido creadas por un comando de INSERCIÓN, o posiblemente por un
instrumento, como Datapump. Como con cualquier otro comando de SQL, una
ACTUALIZACIÓN puede afectar una fila o un SET de filas. La talla del SET afectado
por una ACTUALIZACIÓN es determinada por un DONDE la cláusula, de exactamente
el mismo modo que el SET de filas recuperadas por una select SENTENCIA es definido
por un DONDE cláusula. La sintaxis es idéntica. Todas las filas actualizadas estarán en
una comando; no es posible para un comando de actualización solo de afectar filas en
tablas múltiples.
Actualizando una fila o un SET de filas, el comando de ACTUALIZACIÓN
especifica que
columnas de la fila (s) para actualizar. No es necesario (o en efecto común) actualizar
Describa Cada Lenguaje de Manipulación de Datos (DML) Select
407

cada columna de la fila. Si la columna actualizada ya tiene un valor, entonces este valor
es reemplazado con el nuevo valor especificado por el comando de ACTUALIZACIÓN.
Si la columna no fuera poblada antes - que debe decir, su valor era NULO ENTONCES
será poblada después de la ACTUALIZACIÓN con el nuevo valor.
Un uso típico de la ACTUALIZACIÓN debe recuperar una fila y actualizar una o
varias columnas de la fila. La recuperación será hecha usando un DONDE la cláusula
que selecciona una fila por su clave primaria, el identificador único que asegurará que
sólo una fila es recuperada. Entonces las columnas que son actualizadas serán
cualquier columna además de la columna de clave primaria. Es muy extraño cambiar el
valor de la clave primaria. La vida de una fila comienza cuando es insertada, luego
puede seguir a través de varias actualizaciones, hasta que ella sea borrada. En todas
partes de esta vida, esto no cambiará por lo general su clave primaria.
Para actualizar un SET de filas, use un menos
restrictivo DONDE cláusula que la clave primaria.
Para actualizar cada fila en una comando, no use a
ninguno DONDE cláusula en absoluto. Este
comportamiento de SET puede
Una select de ACTUALIZACIÓN esté desconcertante cuando esto pasa por
casualidad. puede cambiar filas en sólo una comando, pero esto Si usted selecciona las filas
para ser actualizadas con alguno puede cambiar cualquier número de filas en aquel columna
además de la clave primaria, usted puede tabular.actualice varias filas, no sólo un. Si usted omite
EL DONDE cláusula completamente, usted
actualizará
los millones de comando quizás enteros de filas actualizaron con sólo una select -
cuando usted pensó cambiar sólo un.
Un comando de ACTUALIZACIÓN debe cumplir cualquier coacción definida para
la comando, como el INSERCIÓN original tendría. Por ejemplo, no será posible
actualizar una columna que ha sido marcada como obligatoria a un valor NULO o
actualizar una columna de clave primaria de modo que ya no no sea único.

BORRAR
Las filas antes insertadas pueden ser borradas de una comando con el BORRAR
comando.
El comando borrará una fila o un SET de filas de la comando, según un DONDE
cláusula. Si no hay DONDE cláusula, cada fila en la comando será borrada (que puede
ser un poco desconcertante si usted excluyera el DONDE cláusula por equivocación).
No hay ninguna "advertencia" apremio para cualquier comando de SQL. Si usted
instruye la base de datos de borrar un millón de filas, hará así. Inmediatamente.
No hay nada de eso "¿Está seguro usted?" negocio que algunos entornos ofrecen.
408
Capítulo 10:
Manipulación de Datos

Una eliminación es todo o nada. No es posible denominar columnas. Cuando las


filas son insertadas, usted puede elegir que columnas poblar. Cuando las filas son
actualizadas, usted puede elegir que columnas actualizar. Pero una eliminación se
aplica a la fila entera - la única opción es que filas en cual comando. Esto hace el
BORRAR comando sintácticamente más simple que los otros comandos de DML.

FUSIÓN

Las versiones más tempranas de SQL no tenían un comando de FUSIÓN. LA FUSIÓN Fue introducida
con el estándar SQL1999, puesto en práctica por el Oracle en la liberación 9i de base de datos. La
liberación 10g (conformándose con el estándar SQL2003) proporciona algunos realces. Algunas
realizaciones SQL patentadas tenían un comando llamado UPSERT. Esta palabra de sondeo bastante
desacapable describe el comando de FUSIÓN mejor dicho bien: esto ejecuta una ACTUALIZACIÓN o
un INSERCIÓN, según un poco de condición. Pero el término UPSERT es definitivamente obsoleto
ahora, porque la versión actual de FUSIÓN, según circunstancias, puede hacer un BORRAR también.
Hay muchas ocasiones donde usted quiere tomar un SET de datos (la fuente) e integrarlo en una
comando existente (el objetivo). Si una fila en la fuente de datos ya existe en la comando objetivo, usted
puede querer actualizar la fila objetivo, o usted puede querer reemplazarlo completamente, o usted puede
querer dejar la fila objetivo sin alterar. Si una fila en la fuente no existe en el objetivo, usted querrá
insertarlo. El comando de FUSIÓN le deja hacer esto. Una FUSIÓN pasa por la fuente de datos, para cada
fila que intenta localizar una fila correspondiente en el objetivo. Si ningún partido es encontrado, una
fila puede ser insertada; si un partido es encontrado, la fila correspondiente puede ser actualizada. El
realce de liberación 10g significa que la fila objetivo puede ser hasta borrada, siendo emparejado y
actualizada. El resultado final es una comando objetivo en la cual los datos en la fuente han sido
fusionados.
Una operación de FUSIÓN no hace nada que no pudiera ser hecho con INSERCIÓN,
ACTUALIZACIÓN, y BORRAR select - pero con un pase por la fuente de datos, esto puede hacer todos
los tres. El código alternativo sin una FUSIÓN requeriría tres pasa por los datos, un para cada comando.

LA FUSIÓN puede no ser importante para los exámenes OCP, pero puede ser de la vital
importancia para codificar aplicaciones que funcionan bien y usan la base de datos
eficazmente.

La fuente de datos para una select de FUSIÓN puede ser una comando o cualquier subpregunta. La
condición usada para encontrar filas correspondientes en el objetivo es similar a un DONDE cláusula.
Las cláusulas que actualizan o insertan filas son tan complejas como una ACTUALIZACIÓN o
Describa Cada Lenguaje de Manipulación de Datos (DML) Select
409
un comando de INSERCIÓN. Resulta que la FUSIÓN es la más complicada de los
comandos de DML, que es bastante razonable, ya que es (posiblemente) el más potente.

TRUNCADO
El comando TRUNCADO no es un comando de DML; es el comando de DDL. La
diferencia es enorme. Cuando los comandos de DML afectan datos, ellos insertan,
actualizan, y borran filas como la parte de transacciones. Las transacciones son
definidas más tarde en este capítulo en el artículo 10.05, "Transacciones de Control." Por
el momento, déjele ser dicho que una transacción puede
sea controlado, en el sentido que el usuario tiene
la opción de si hacer el trabajo hecho en una
transacción permanente, o si invertirlo. Esto es
muy útil, pero obliga la base de datos a hacer
Transacciones, consistiendo trabajo adicional entre bastidores que el usuario de
INSERCIÓN, ACTUALIZACIÓN, y BORRAR (o no es consciente de. Los comandos de DDL no son
el usuario hasta FUSIONAN) los comandos pueden ser hechos transacciones (aunque dentro de la
base de datos, ellos permanente (con DESTINAR) o invertido son de hecho puestos en práctica
como transacciones - pero (con un ROLLBACK).A TRUNCADO los developeres no pueden
controlarlos), y allí mande, como cualquier otro comando de DDL, no es ninguna opción de si
hacerlos es inmediatamente permanente: nunca puede ser permanente o invertirlos. Una vez
ejecutado, invertido. ellos son hechos. Sin embargo, en comparación con
DML, ellos son muy rápidos.
Desde el punto de vista del usuario, un truncamiento de una comando es equivalente a
la ejecución un BORRAR de cada fila: BORRAR mandan sin un DONDE cláusula. Pero
mientras que una eliminación puede llevar tiempo (posiblemente horas, si hay muchas
filas en la comando) un truncamiento pasará al instante. Esto no hace ninguna
diferencia si la comando contiene una fila o mil millones; un TRUNCADO será
prácticamente instantáneo. La comando todavía existirá, pero será vacío.

DDL manda, tal como TRUNCADO, fallará si hay cualquier comando de DML
activo en la comando. Una transacción bloqueará el comando de DDL hasta
que el comando de DML sea terminado con DESTINAR o un ROLLBACK.

Frainstancias de Select de DML


Los comandos pueden fallar por muchos motivos, incluso lo siguiente:

■ Errores de sintaxis ■ Referencias a objetos inexistentes o columnas


410
Capítulo 10:
Manipulación de Datos

■ permisos de Acceso ■ violaciones de Coacción ■ cuestiones Espaciales

Como un comando de SQL puede afectar un SET de filas, hay complicación esto a
el comando puede tener éxito parcialmente: el frainstancia podría ocurrir sólo algún
camino en el SET. Las tres primeras clases precedentes del error también se aplican a
select SENTENCIAS.
Un objetivo de leer este libro es prevenir errores de sintaxis. Cuando ellos ocurren (y
ellos van), ellos deberían ser descubiertos por el instrumento que construye el SQL
para ser enviado a la base de datos: SQL*Plus o el Developer SQL si el SQL está
siendo entrado interactivamente, o independientemente de otro instrumento son usados
para generar un interface más sofisticado. Hay cualquier número de errores de sintaxis
posibles, que comienzan con errores de ortografía simples o errores de transposición.

La gente que teclea con sólo un dedo no hace errores de transposición.

Los errores de esta naturaleza no afectarán la base de datos, porque la base de datos
nunca los verá. SQL erróneo es parado en la fuente. El nivel de la ayuda el instrumento
asegura la fijación de tales errores dependerá del esfuerzo que los developeres del
instrumento toman.
Una select SQL puede ser sintácticamente correcta, pero referirse a objetos que no
existen. Los problemas típicos deletrean errores, pero hay cuestiones más complejas: una
select podría referirse a una columna que existió en algún momento, pero ha sido
dejada caer de la comando o renombrada. Una select de esta naturaleza será enviada a
la base de datos y fallará entonces, antes de la ejecución de tentativas de base de datos.
Esto es peor para la base de datos que un error de sintaxis simple, pero la afirmación
todavía es parado antes de que esto consuma cualquier recurso de base de datos
significativo.
Un error relacionado tiene que ver con el reparto de tipo. SQL es una lenguaje
fuertemente tecleada: las columnas son definidas como un cierto tipo de datos, y una
tentativa de escribir un valor de un tipo de datos diferente fallará. Sin embargo, usted
puede llevarse esto porque la realización del Oracle de SQL, en algunas circunstancias,
hará el reparto de tipo automático.
La figura 10-1 muestra varias ejecuciones intentadas de una select con SQL*Plus. En
la Figura 10-1, un usuario conecta como DEMANDAN (contraseña, DEMANDE - no
un ejemplo de bueno
seguridad) y preguntas la comando de EMPLOYEES. La select falla debido a un error de
sintaxis simple, correctamente identificado por SQL*Plus. Note que SQL*Plus nunca
intenta corregir tales errores, aun cuando sabe exactamente lo que usted pensó teclear.
Algunos herramientas de tercero pueden ser más provechosos, ofreciendo la corrección
de errores automática.
Describa Cada Lenguaje de Manipulación de Datos (DML) Select
411

FIGURA 10-1

Algunos ejemplos de
frainstancia de select
La segunda tentativa de ejecutar la select falla con un error declarando que el objeto
no existe. Esto es porque esto no existe en el esquema del usuario corriente; esto existe en
el esquema de HORA. Habiendo corregido esto, la tercera carrera de la select tiene
éxito - pero por poco. El valor pasó en el DONDE la cláusula es una cuerda, '21-APR-
00', pero la columna HIRE_DATE no es definido en la comando como una cuerda, es
definido como una fecha. Para ejecutar la select, la base de datos tuvo que calcular lo
que el usuario realmente quiso decir y dé la cuerda el papel de una fecha. En el último
ejemplo, el reparto de tipo falla. Esto es porque la cuerda pasó es formateado como una
fecha de estilo europeo, pero la base de datos ha sido alistada como el americano: la
tentativa de emparejar "21" a un mes falla. La select habría tenido éxito si la cuerda
hubiera sido '04/21/2007'.
Los developeres nunca deberían confiar en el reparto de tipo automático. Es la
programación muy perezosa. Ellos siempre deberían hacer cualquier reparto de tipo
explícito es necesario, usando funciones apropiadas como hablado en capítulos
anteriores. Si el reparto de tipo automático realmente trabaja, a lo más hay una petición
de rendimiento ya que la base de datos tiene que hacer el trabajo suplementario. Esto
puede ser sustancial si el reparto de tipo impide al Oracle usar índices. En este ejemplo,
si hay un índice en la columna HIRE_DATE, será un índice de fechas; no hay ningún
modo que la base de datos pueda usarlo cuando usted pasa una cuerda. En el peor de los
instancias, el resultado será incorrecto. ¿Si la cuerda de fecha pasara en eran '04/05/2007',
esto tendría éxito - pero sería el cuarto de mayo o el quinto de abril?
412
Capítulo 10:
Manipulación de Datos

El oracle intentará corregir faltas de armonía de tipo de datos en select SQL


(DML y ESCOGIDO) por el reparto de tipo automático, pero los resultados son
imprevisibles y ningún programador debería confiar alguna vez en ello.

Si una select es sintácticamente correcta y no tiene ningunos errores con los objetos a
los cuales se refiere, todavía puede fallar debido a permisos de acceso. Si el usuario que
intenta ejecutar la select no tiene los permisos relevantes en las tablas a las cuales se
refiere, la base de datos devolverá un error idéntico a esto que sería devuelto si el
objeto no existiera. Por lo que el usuario está preocupado, esto no existe.
Los errores causados por permisos de acceso son un instancia donde las select
SENTENCIAS y DML pueden devolver resultados diferentes: es posible para un usuario
tener el permiso de ver las filas en una comando, pero no insertar, actualizar, o
borrarlos. Tal arreglo es bastante común; esto a menudo hace la cabeza para los
negocios. Quizás de una manera más confusa, los permisos pueden ser alistados en tal
manera que es posible insertar filas que no le permiten ver. Y, quizás el peor de todos, es
posible borrar filas que usted puede ver ni, ni actualizar. Sin embargo, tales medidas no
son comunes.
Una coacción es una regla comercial, puesta en práctica dentro de la base de datos.
Las coacciones típicas consisten en que una comando debe tener una clave primaria: un
valor de una columna (o la combinación de columnas) que puede identificar únicamente
cada fila. Un comando de INSERCIÓN puede insertar varias filas en una comando, y
para cada fila la base de datos comprobará si una fila ya existe con la misma clave
primaria. Esto ocurre ya que cada fila es insertada. Podría ser que las pocas primeras filas
(o el poco primer millón de filas) entran sin un problema, y luego la select golpea una
fila con un valor duplicado. A este punto esto devolverá un error, y la select fallará.
Este frainstancia provocará una inversión de todas las introducciones que habían tenido
éxito ya. Esto es la parte del estándar SQL: una select debe tener éxito en total, o en
absoluto. La inversión del trabajo es un rollback. Los mecanismos de un rollback son
descritos en la sección de este capítulo titulado "Controlando Transacciones."
Si una select falla debido a problemas espaciales, el efecto es similar. Una parte de la
select puede haber tenido éxito antes de que la base de datos se quedara sin el espacio.
La parte que realmente tuvo éxito será automáticamente hecha rodar atrás. Rollback de
una select es un asunto serio. Esto obliga la base de datos a hacer mucho trabajo
suplementario y tomará por lo general al menos mientras la select ha tomado ya (a veces
mucho más largo).

OBJETIVO DE CERTIFICACIÓN 10.02

Filas de inserción en una Comando


Filas de inserción en una Comando
413
La forma más simple de la select de INSERCIÓN inserta una fila en una comando,
usando
los valores proveyeron en la línea como la parte del comando. La sintaxis es como
sigue:
INSERCIÓN EN comando [(columna [column])] VALORES (valor [value]); Por
ejemplo:
inserción en hr.regions
inserción en hr.regions ('Australasia', 11); el inserción en
hr.regions inserta en hr.regions
valores (10, 'Gran Bretaña');
(region_name, region_id) valores

(region_id) valores (12); valores (13, nulo);


El primer de los comandos precedentes proporciona valores a ambos las columnas
del
Comando de REGIONS. Si la comando tuviera una tercera columna, la select fallaría
porque esto confía en la nota posicional. La select no dice qué valor debería ser insertado
en cual columna; esto confía en la posición de los valores: su pedido en el comando.
Cuando la base de datos recibe una select usando la nota posicional, emparejará el
pedido de los valores al pedido en el cual las columnas de la comando son definidas.
La select también fallaría si el pedido de columna fuera incorrecto: la base de datos
intentaría la introducción, pero fallaría debido a faltas de armonía de tipo de datos.
El segundo comando denomina las columnas para ser pobladas y los valores con los
cuales poblarlos. Note que el pedido en el cual las columnas son mencionadas ahora se
hace irrelevante mientras el pedido de las columnas es el mismo como el pedido de los
valores.
El tercer ejemplo pone en una lista una columna, y por lo tanto sólo un valor. Todas
otras columnas serán dejadas nulas. Esta select fallaría si la columna REGION_NAME
no fuera nullable. El cuarto ejemplo producirá el mismo resultado, pero porque no hay
ninguna lista de columna, un valor de alguna clase debe ser proporcionado a cada
columna al menos, un NULO.

A menudo se considera la práctica buena para no confiar en la nota posicional y


en cambio siempre poner las columnas en una lista. Esto es más trabajo, pero
hace el código auto - documentando (¡siempre una idea buena!) y también hace el
código más resistente contra cambios de estructura de comando. Por ejemplo,
si una columna es añadida a una comando, todas las select de INSERCIÓN que
confían en la nota posicional fallarán hasta que ellos sean vueltos a escribir
para incluir un NULO para la nueva columna. INSERTE el código que llama las
columnas seguirá ejecutándose.
414
Capítulo 10:
Manipulación de Datos

Muy a menudo, una select de INSERCIÓN incluirá funciones para hacer el lanzamiento
de tipo u otro trabajo de edición. Considere esta select:
inserción en EMPLOYEES (employee_id, last_name, hire_date) valores
(1000, 'WATSON', '03-Nov-07');
en contraste con esto:
inserción en EMPLOYEES (employee_id, last_name, hire_date)
valores (1000, superior ('Watson'), to_date ('03-Nov-07', 'dd-mon-
yy'));
Las filas insertadas con cada select serían idénticas. Pero el primer insertará
exactamente los literales proveyeron. Puede estar bien que la aplicación confía en
apellidos de empleado que están en la mayúscula - sin esto, quizás clasifique pedidos
será incorrecto y las búsquedas en el apellido darán resultados imprevisibles. También,
la introducción del valor de fecha confía en el reparto de tipo automático de una cuerda a
una fecha, que siempre es mala para el rendimiento y puede causar valores incorrectos
entrados. La segunda select fuerza el apellido en la mayúscula si fue entrado así o no, y
especifica exactamente la máscara de formato de la cuerda de fecha antes de convertirlo
explícitamente en una fecha. No hay ninguna pregunta que la segunda select es una
mejor pieza del código que el primer.
Lo siguiente es otro ejemplo de usar funciones:
inserción en EMPLOYEES (employee_id, last_name, hire_date) valores
(1000 + 1, usuario, sysdate - 7);
En la select precedente, la columna EMPLOYEE_ID es poblada con el
el resultado de alguna aritmética, la columna LAST_NAME es poblada con el resultado
del USUARIO de función (que devuelve el nombre de entrada en el sistema de base de
datos del usuario), y la columna HIRE_DATE es poblada con el resultado de una
función y aritmética: la fecha siete días antes de la fecha de sistema actual.
La figura 10-2 muestra la ejecución de las tres introducciones anteriores, seguidas de
una pregunta pruebas los resultados.
La utilización de funciones para pretratar valores antes de insertar filas puede ser
particularmente importante ejecutando escrituras con variables de substitución, ya que
ellos permitirán que el código corrija muchas de las variaciones no deseadas en la
introducción de datos que puede ocurrir cuando los usuarios escriben valores
interactivamente.
Para insertar muchas filas con un comando de INSERCIÓN, los valores para las filas
deben venir de una pregunta. La sintaxis es como sigue:
INSERCIÓN EN comando [(columna [column])] subpregunta; Note que esta sintaxis
no usa la palabra clave de VALORES. Si la lista de columna
es omitido, entonces la subpregunta debe proporcionar valores a cada columna en la
comando.
Filas de inserción en una Comando
415

FIGURA 10-2

La utilización de funciones con


el comando de INSERCIÓN

Para copiar cada fila de una comando al otro, si las tablas tienen la misma estructura de
columna, un comando, como esto es todo que es necesario:
el inserción en regions_copy selecciona * de REGIONS;
Esto presupone que la comando REGIONS_COPY realmente existe (con o sin
cualquier fila). La subpregunta SENTENCIA lee cada fila de la comando de la fuente,
que es REGIONS, y el INSERCIÓN los inserta en la comando objetivo, que es
REGIONS_COPY.
No hay ningunas restricciones de la naturaleza de la subpregunta. Cualquier vuelta
de pregunta (finalmente) una matriz de dos dimensiones de filas; si la comando objetivo
(que también es unos dos - matriz dimensional) tiene columnas para recibirlos, la
introducción trabajará. Un requisito común debe presentar datos a usuarios finales en
una forma que lo hará fácil para ellos a extraer la información e imposible para ellos de
interpretarlo mal. Esto significará por lo general tablas relacionales denormalizing,
haciendo agregaciones, renombrando columnas, y ajustando datos que pueden deformar
resultados si no correctamente tratado.
Considere un instancia simple dentro del esquema de HORA: una necesidad de
informar sobre la cuenta de sueldo para cada departamento. La pregunta tendrá que
realizar una juntura externa llena para asegurar que cualquier empleado sin un
departamento no es echado de menos, y que todos los DEPARTMENTS son puestos en
una lista si ellos tienen EMPLOYEES. Esto también debería asegurar que cualquier
valor nulo no deformará ninguna aritmética substituyendo ceros o cuerdas para nulls.
Esta pregunta es absolutamente franca para cualquier programador SQL, pero cuando los
usuarios finales intentan ejecutar esta clase de la pregunta ellos demasiado
probablemente producirán resultados inexactos omitiendo
416
Capítulo 10:
Manipulación de Datos

los controles. Un trabajo de mantenimiento diario en un depósito de datos que


ensamblaría los datos en una forma conveniente podría ser una escritura, como esto:
comando truncada department_salaries; inserción en
department_salaries (departamento, personal, sueldos) escogido
fúndase (department_name, 'No adjudicado'), cuenta (employee_id),
suma (fúndase (sueldo, 0))
de EMPLOYEES e DEPARTMENTS de juntura externos llenos d en
e.department_id = d.department_id grupo por department_name piden por
department_name;
El comando TRUNCADO vaciará
la comando, que es poblada de nuevo entonces de
la subpregunta. Los usuarios finales pueden ser
dejados sueltos en esta comando, y debería ser
imposible para ellos a
Cualquier select SENTENCIA, interprete mal los contenido-a simples natural
especificado como una subpregunta, puede ser usado como la juntura sin SE FUNDE
funciones, que la fuente de filas pasó a un INSERCIÓN. podría ser todo un usuario final haría, podría
ser Esto habilita la introducción de muchas filas. muy engañoso. Haciendo todo el trabajo
complejo O bien, usando la cláusula de VALORES va en la select de INSERCIÓN, los usuarios
pueden ejecutar entonces el inserción una fila. Los valores pueden ser literales preguntas mucho
más simples contra el denormalized o apremio para como variables de substitución. y datos
agregados en el cuadro resumen.
Sus preguntas serán rápidas, también: todo el
trabajo duro ha sido hecho ya.
Para concluir la descripción del comando de INSERCIÓN, hay que mencionar que es
posible insertar filas en varias tablas con una select. Esto no es la parte del SQL OCP
examen, pero para el completo aquí está un ejemplo:
inserte todos cuando 1=1 entonces
en emp_no_name (department_id,job_id,salary,commission_pct,hire_date)
valores (department_id,job_id,salary,commission_pct,hire_date)
cuando department_id <> 80 entonces
en emp_non_sales (employee_id,department_id,salary,hire_date) valores
(employee_id,department_id,salary,hire_date)
cuando department_id = 80 entonces
en emp_sales (employee_id,salary,commission_pct,hire_date) valores
(employee_id,salary,commission_pct,hire_date)
seleccione employee_id,department_id,job_id,salary,commission_pct,hire_date
de EMPLOYEES donde hire_date> sysdate - 30;
Filas de inserción en una Comando
417

Para leer esta select, comience en el fondo. La subpregunta recupera a todos los
EMPLOYEES reclutados en los 30 días anteriores. Entonces vaya a la cumbre. TODA
la palabra clave significa que cada fila seleccionada será considerada para la
introducción en todas las tablas después, no sólo en la primera comando para la cual la
condición se aplica. La primera condición es 1=1, que siempre es verdad, entonces cada
fila de la fuente creará una fila del NOMBRE de EMP_NO_. Esto es una copia de la
comando de EMPLOYEES con los identificadores personales borrados, un requisito
común en un depósito de datos. La segunda condición es DEPARTMENT_ID <> 80,
que generará una fila en EMP_NON_SALES para cada empleado que no está en el
departamento de ventas; no hay ninguna necesidad de esta comando para tener la
columna COMMISSION_PCT. La tercera condición genera una fila en EMP_SALES
para todos los dependientes; no hay ninguna necesidad de la columna
DEPARTMENT_ID, porque ellos estarán todos en la oficina 80.
Esto es un ejemplo simple de un inserción de multicomando, pero debería ser
aparente que con una select, y por lo tanto sólo un pase por la fuente de datos, es posible
poblar muchas tablas objetivo. Esto puede tomar una cantidad enorme de la tensión de
la base de datos.

EJERZA 10-1 Uso el Comando de INSERCIÓN


En este ejercicio, use varias técnicas para insertar filas en una comando.

1. Conecte al esquema de HORA, con el Developer SQL o con SQL*Plus. 2.


Pregunte la comando de REGIONS, para comprobar que valores están ya en el
uso para el
Columna de REGION_ID:
seleccione * de REGIONS;
Este ejercicio supone que los valores encima 100 no estén en el uso. Si ellos son,
se adaptan
los valores sugeridos abajo para evitar conflictos de clave primaria.
3. Inserte una fila en la comando de REGIONS, proporcionando los valores en la
línea:
inserción en valores de REGIONS (101, 'Gran Bretaña');
4. Inserte una fila en la comando de REGIONS, proporcionando los valores como
la substitución
variables:
inserción en valores de REGIONS (&Region_number,
'&Region_name');
418
Capítulo 10:
Manipulación de Datos

Cuando apremio, dé los valores 102 para el número, Australasia para el nombre. Note el uso de citas
alrededor de la cuerda.
5. Inserte una fila en la comando de REGIONS, calculando el REGION_ID para ser
un más alto que el valor alto corriente. Esto necesitará una subpregunta escalar:
el inserción en valores de REGIONS ((seleccionan el máximo (region_id) +1 de
REGIONS), 'Oceanía');

6. Confirme la introducción de las filas:


seleccione * de REGIONS;

7. Destine las introducciones:


destine;

La ilustración siguiente muestra los resultados del ejercicio, usando SQL*Plus:

OBJETIVO DE CERTIFICACIÓN 10.03

Filas de actualización en una Comando


Filas de actualización en una Comando
419
El comando de ACTUALIZACIÓN cambia valores de columna en una o varias filas
existentes en a
comando sola. La sintaxis básica es lo siguiente:
SET de comando de ACTUALIZACIÓN column=value [column=value] [DONDE
condición]; La forma más compleja del comando usa subconsultas por su parte o más
del
valores de columna y para el DONDE condición. La figura 10-3 muestra actualizaciones
de la complejidad variada, ejecutada de SQL*Plus.
El primer ejemplo es el más simple. Una columna de una fila es puesta a un valor
literal. Como la fila es elegida con un DONDE la cláusula que usa el predicado de
igualdad en la clave primaria de la comando, hay una garantía absoluta que como máximo
sólo una fila será afectada. Ninguna fila será cambiada si el DONDE la cláusula deja de
encontrar cualquier fila en absoluto.
El segundo ejemplo muestra el uso de la aritmética y una columna existente para poner
el nuevo valor, y la selección de fila no es hecha en la columna de clave primaria. Si la
selección no es hecha en la clave primaria, o si un predicado de no igualdad (tal como
ENTRE) es

FIGURA 10-3

Ejemplos de usar la select de


ACTUALIZACIÓN
420
Capítulo 10:
Manipulación de Datos

usado, entonces el número de filas actualizadas puede ser más de un. Si el DONDE la
cláusula es omitida completamente, la actualización será aplicada a cada fila en la
comando.
El tercer ejemplo en la Figura 10-3 introduce el uso de una subpregunta para definir
el SET de filas para ser actualizadas. Una complicación adicional menor es el uso de
una variable de reemplazo para apremio al usuario para un valor para usar en el
DONDE la cláusula de la subpregunta. En este ejemplo, la subpregunta (líneas 3 y 4)
seleccionará a cada empleado que está en un departamento cuyo nombre incluye la
cuerda 'ESTO' e incremente su sueldo corriente en el 10 por ciento (con poca
probabilidad para pasar en la práctica).
También es posible usar subconsultas para determinar el valor al cual una columna
será puesta, como en el cuarto ejemplo. En este instancia, un empleado (identificado por
la clave primaria, en la línea 5) es transferido a la oficina 80 (el departamento de
ventas), y luego la subpregunta en líneas 3 y 4 puso su precio de comisión a lo que el
precio de comisión más bajo en el departamento resulta ser.
La sintaxis de una actualización que usa subconsultas es como sigue:
Columna de SET de comando de ACTUALIZACIÓN = [subpregunta]
[column=subquery] DONDE columna = (subpregunta) [Y column=subquery]; hay
una restricción rígida de las subconsultas usando columnas de actualización en el SET
cláusula: la subpregunta debe devolver un valor escalar. Un valor escalar es un valor solo
de cualquier tipo de datos es necesario: la pregunta debe devolver una fila, con una
columna. Si la pregunta devuelve varios valores, la ACTUALIZACIÓN fallará.
Considere estos dos ejemplos:
actualice el sueldo de SET de EMPLOYEES = (sueldo escogido de
EMPLOYEES donde employee_id=206); actualice el sueldo de SET de
EMPLOYEES = (sueldo escogido de EMPLOYEES donde last_name =' Abel');
El primer ejemplo, usando un predicado de igualdad en la clave primaria, siempre va
tener éxito. Aun si la subpregunta no recupera una fila (como sería el instancia si no
hubiera ningún empleado con el EMPLOYEE_ID igual a 206), la pregunta todavía
devolverá un valor escalar: un nulo. En este instancia, todas las filas en EMPLOYEES
harían poner su SUELDO AL NULO - que no podría ser deseado, pero no es un error
por lo que SQL está referido. El segundo ejemplo usa un predicado de igualdad en el
LAST_NAME, que no es garantizado para ser único. La select tendrá éxito si hay sólo
un empleado con aquel nombre, pero si hubiera más de un esto fallaría con el error
"ORA-01427: la subpregunta de fila sola devuelve más de una fila." Para el código que
trabajará de fuentes fidedignas, pase lo que pase el estado de los datos, es esencial
asegurar que las subconsultas usadas para poner valores de columna son el escalar.
Filas de actualización en una
Comando
421

Un apuro común para asegurarse que las preguntas son el escalar debe usar a
MAX o minuto. Esta versión de la select siempre tendrá éxito:
actualice el sueldo de SET de EMPLOYEES = (máximo escogido (sueldo) de
EMPLOYEES donde last_name =' Abel');

Sin embargo, sólo porque esto trabajará, no necesariamente significa que esto
hace que
es querido.

Las subconsultas en el DONDE la cláusula también debe ser el escalar, si esto usa el
predicado de igualdad (como en los ejemplos precedentes) o el mayor/menos que
predicados. Si esto usa el EN el predicado, entonces la pregunta puede devolver filas
múltiples, como en este ejemplo que usa EN:
actualice salary=10000 de SET de EMPLOYEES donde department_id en
(seleccionan department_id de DEPARTMENTS donde department_name como
'%IT %');
Esto aplicará la actualización a todos los EMPLOYEES en un departamento cuyo
nombre incluye
la cuerda 'ESTO'. Hay varios de éstos. Pero aunque la pregunta pueda devolver varias
filas, todavía debe devolver sólo una columna.

Las subconsultas solían PONERSE los valores de columna deben ser


subconsultas escalares. Las subconsultas solían seleccionar las filas

EJERZA 10-2 Uso el Comando de ACTUALIZACIÓN

también debe ser el escalar, a menos que ellos usen el EN el predicado.


En este ejercicio, use varias técnicas para actualizar filas en una comando. Se supone
que la comando HR.REGIONS es como vista en la ilustración al final de Ejercicio 10-1.
Si no, ajuste los valores si es necesario.

1. Conecte al esquema de HORA usando al Developer de SQL o SQL*Plus. 2.


Actualice una fila sola, identificada por la clave primaria:
las REGIONS de actualización ponen region_name ='Scandinavia' donde
region_id=101;
422
Capítulo 10:
Manipulación de Datos

Esta select debería devolver el mensaje "1 fila actualizada." 3. Actualice un SET de filas, usando un
predicado de no igualdad:
las REGIONS de actualización ponen region_name ='Iberia' donde region_id> 100;

Esta select debería devolver el mensaje "3 filas actualizadas."


4. Actualice un SET de filas, usando subconsultas para seleccionar las filas y proporcionar valores:
REGIONS de actualización
el SET region_id = (region_id + (seleccionan el máximo (region_id) de REGIONS))
donde region_id en (seleccionan region_id de REGIONS donde region_id> 100);
Esta select debería devolver el mensaje "3 filas actualizadas."
5. Confirme el estado de las filas:
seleccione * de REGIONS;

6. Destine los cambios hechos:


destine;

La ilustración siguiente muestra el ejercicio, como hecho de SQL*Plus.

OBJETIVO DE CERTIFICACIÓN 10.04

Borre Filas de una Comando


Borre Filas de una Comando
423
Para borrar filas de una comando, hay dos opciones: BORRAR mandan y el
Comando TRUNCADO. BORRAR es menos drástico, en que puede hacerse rodar una
eliminación atrás mientras que un truncamiento no puede ser. BORRAR también es
más controlable, en que es posible elegir qué filas borrar, mientras que un truncamiento
siempre afecta la comando entera. BORRAR es, sin embargo, mucho más despacio y
puede colocar mucha tensión en la base de datos. TRUNCADO es prácticamente
instantáneo y sin esfuerzo alguno.

Borrar Filas con BORRAR


BORRAR comandos borra filas de una comando sola. La sintaxis es como sigue:
BORRAR DE comando [DONDE condición]; Esto es el más simple de los comandos
de DML, en particular si la condición es omitida.
En este instancia, cada fila en la comando será borrada sin apremio. La única
complicación está en la condición. Esto puede ser un partido simple de una columna a
un literal:
borrar
de
EMPLOYEES
donde
employee_id=206;
borrar
de
EMPLOYEES
donde
last_name como 'S %';
borrar
de
EMPLOYEES
donde
department_id=&Which_department;
borrar
de
EMPLOYEES
donde
el department_id es nulo;
La primera select identifica una fila por la clave primaria. Una fila sólo será borrada - o
ninguna fila en absoluto, si el valor dado no encuentra un partido. La segunda select usa un
predicado de no igualdad que podría causar la eliminación de muchas filas: cada empleado
cuyo apellido comienza con una mayúscula "S". La tercera select usa un predicado de
igualdad, pero no en la clave primaria. Esto apremio para un número de departamento con
una variable de substitución, y todos los EMPLOYEES en aquel departamento irán. La
select final borra a todos los EMPLOYEES que no son adjudicados actualmente a un
departamento.
La condición también puede ser una subpregunta:
borre de EMPLOYEES donde department_id en (seleccionan department_id
de DEPARTMENTS donde location_id en
(seleccione location_id de LOCATIONS donde country_id en
(seleccione country_id de COUNTRIES donde region_id en
(seleccione region_id de REGIONS donde region_name ='Europe')
)
)
)
424
Capítulo 10:
Manipulación de Datos

Este ejemplo usa una subpregunta para la selección de fila que navega la HORA árbol
geográfico (con más subconsultas) para borrar a cada empleado que trabaja para
cualquier departamento que esté basado en Europa. La misma regla para el número de
valores devueltos por la subpregunta se aplica en cuanto a un comando de
ACTUALIZACIÓN: si la selección de fila está basada en un predicado de igualdad
(como en el ejemplo precedente) la subpregunta debe ser el escalar, pero si esto usa EN
la subpregunta puede devolver varias filas.
Si BORRAR el comando no encuentra ningunas filas borrando, esto no es un error. El
comando devolverá el mensaje "0 filas borradas", más bien que un mensaje de error
porque la select completó con éxito - esto sólo no encontró nada haciendo.

EJERZA 10-3 Uso el BORRAR Comando


En este ejercicio, use varias técnicas para borrar filas en una comando. Es asumido
esto
la comando HR.REGIONS es como vista en la ilustración al final de Ejercicio 10-2.
Si no, ajuste los valores si es necesario.

1. Conecte al esquema de HORA usando al Developer de SQL o SQL*Plus. 2.


Borre una fila, usando el predicado de igualdad en la clave primaria:
borre de REGIONS donde region_id=204;

Esto debería devolver el mensaje "1 fila borrada."


3. Tentativa de borrar cada fila en la comando omitiendo un DONDE cláusula:
borre de REGIONS;

Esto fallará, debido a una violación de coacción.


4. Borre filas con la selección de fila basada en una subpregunta:
borre de REGIONS donde
el region_id en (seleccionan region_id de REGIONS donde region_
llaman ='Iberia');
Esto devolverá el mensaje "2 filas borradas."
5. Confirme que la comando de REGIONS ahora contiene sólo las cuatro filas
originales:
seleccione * de REGIONS;

6. Destine la eliminación:
destine;
Borre Filas de una Comando

La ilustración siguiente muestra el ejercicio, como hecho de SQL*Plus:


425
Borrar Filas con TRUNCADO
TRUNCADO es un DDL (Lenguaje de Definición de Datos) comando. Esto funciona
dentro de
el diccionario de datos y afecta la estructura de la comando, no los contenido de la
comando. Sin embargo, el cambio que esto hace a la estructura tiene el efecto
secundario de destruir todas las filas en la comando.
Una parte de la definición de una comando
como almacenado en el diccionario de datos es la
posición física de la comando. Cuando primero
creado, una comando es asignada

TRUNCADO completamente los ficheros de datos de la base de datos. Esto es


conocido ya que un grado vacía la comando. No hay ningún concepto de y será vacío.
Entonces, ya que las filas son insertadas, selección de fila, ya que hay con un BORRAR. el grado
se llena. Una vez que está lleno, más grados
será asignado a la comando automáticamente.
un área sola de espacio, de talla fija, en el

Una comando por lo tanto consiste en uno o varios grados, que sostienen las filas. Así
como rastreando la asignación de grado, el diccionario de datos también rastrea cuanto
del espacio asignado a la comando ha sido usado. Esto es hecho con la señal de pleamar.
La señal de pleamar es la última posición en el último grado que ha sido usado; todo el
espacio abajo
426
Capítulo 10:
Manipulación de Datos
la señal de pleamar ha sido usada para filas en algún momento, y ninguno del espacio
encima de la señal de pleamar aún ha sido usado.
Note que es posible para allí ser mucho espacio debajo de la señal de pleamar que no
está siendo usada en este momento; esto es debido a filas que han sido borradas con un
BORRAR comando. Insertar filas en una comando hace subir la señal de pleamar.
Borrarlos deja la señal de pleamar donde es; el espacio que ellos ocuparon permanece
adjudicado a la comando, pero es liberado para insertar más filas.
El truncamiento de una comando reinicializa la señal de pleamar. Dentro del
diccionario de datos, la posición registrada de la señal de pleamar es movida al principio
del primer grado de la comando. Como el Oracle supone que no puedan haber ningunas
filas encima de la señal de pleamar, esto tiene el efecto de borrar cada fila de la
comando. La comando es vaciada y permanece vacía hasta que las introducciones
subsecuentes comiencen a empujar el apoyo de señal de pleamar otra vez. En esta
manera, un comando de DDL, que realmente hace poco más que una actualización en
el diccionario de datos, puede aniquilar mil millones de filas en una comando.

Un truncamiento es rápido: prácticamente instantáneo, independientemente de


si la comando tiene muchos millones de filas o ninguno. Una eliminación puede
tomar segundos, minutos, horas - y coloca mucho más tensión en la base de
datos que un truncamiento. Pero un truncamiento es todo o nada.

La sintaxis para truncar una comando no podía ser más simple:


Comando de COMANDO TRUNCADA; la Figura 10-4 muestra el acceso al comando
TRUNCADO por el SQL
Árbol de navegación de developer, pero por supuesto también puede ser ejecutado de
SQL*Plus.

FUSIÓN

El comando de FUSIÓN a menudo no es ignorado, porque no hace nada que no pueda ser hecho con
INSERCIÓN, ACTUALIZACIÓN, y BORRAR. Es, sin embargo, muy potente, en esto con un pase por
los datos esto puede realizar tres operaciones. Esto puede mejorar el rendimiento dramáticamente. El
uso de la FUSIÓN no está en el programa de estudios OCP, pero para el completo aquí está un ejemplo
simple:
fusión en EMPLOYEES e usando new_employees n
en (e.employee_id = n.employee_id)
cuando emparejado entonces
actualice pone e.salary=n.salary
cuando no emparejado entonces
inserción (employee_id, last_name, sueldo) valores (n.employee_id, n.last_name,
n.salary);
Transacciones de control
427

FIGURA 10-4
El comando TRUNCADO en
Developer SQL, de la línea de
comandos y de los menús

La select precedente usa los contenido de una comando NEW_EMPLOYEES para


actualizar o insertar filas en EMPLOYEES. La situación podría consistir en que los
EMPLOYEES son una comando de todo el personal, y NEW_EMPLOYEES es una
comando con filas para el nuevo personal y para cambios de sueldo por el personal
existente. El comando pasará por EMPLOYEES NEW_, y para cada fila, intentará
encontrar una fila en EMPLOYEES con mismo EMPLOYEE_ID. Si hay una fila
encontrada, su columna de SUELDO será actualizada con el valor de la fila en
NEW_EMPLOYEES. Si no hay tal fila, uno será insertado. Las variaciones en la
sintaxis permiten que el uso de una subpregunta seleccione las filas de la fuente, y es
hasta posible borrar filas correspondientes.

OBJETIVO DE CERTIFICACIÓN 10.05

Transacciones de control
Los conceptos detrás de una transacción son una parte del paradigma de base de datos
relacional.
Una transacción consiste en una o varias select DML, seguidas de un ROLLBACK o de
un comando DESTINAR. Es el uso posible el SAVEPOINT
428
Capítulo 10:
Manipulación de Datos

comando de dar un nivel de control dentro de la transacción. Antes de entrar en la


sintaxis, es necesario examinar el concepto de una transacción. Los temas relacionados
son el consecuencia leído; esto es automáticamente puesto en práctica por el servidor de
Oracle, pero hasta cierto punto los programadores pueden manejarlo a propósito ellos
usan la select SENTENCIA.
Transacciones de base de datos
Esto no es el lugar para entrar en el detalle de la base de datos relacional transaccional
el paradigma allí es cualquier número de textos académicos en esto, y no hay el espacio
para cubrir este tema en un guía práctico. Lo siguiente es una revisión rápida de algunos
principios de una base de datos relacional con la cual todas las bases de datos (no sólo el
Oracle) deben conformarse. Otros vendedores de base de datos cumplen con los mismos
estándares con sus propios mecanismos, pero con niveles variados de la eficacia. En
resumen, cualquier base de datos relacional debe ser capaz de pasar la Prueba de fuego:
esto debe garantizar atomicity, consecuencia, aislamiento, y durabilidad.

A es para Atomicity El principio de atomicity declara que todas las partes de una
transacción deben completar o ninguno de ellos. (El razonamiento detrás del término
consiste en que un átomo no puede ser partido ahora famoso de ser una asunción falsa).
Por ejemplo, si sus analistas comerciales han dicho que cada vez usted cambia el sueldo de
un empleado usted también debe cambiar el grado del empleado, entonces la transacción
atómica consistirá en dos actualizaciones. La base de datos debe garantizar que ambos
pasan o ninguno. Si sólo una de las actualizaciones debiera tener éxito, usted tendría un
empleado en un sueldo que era incompatible con su grado: una corrupción de datos, en
términos comerciales. Si algo (¡algo en absoluto!) se equivoca antes de que la
transacción sea completa, la base de datos sí mismo debe garantizar que cualquier parte
que realmente pasara es invertida; esto debe pasar automáticamente. Pero aunque una
transacción atómica parezca pequeña (como un átomo), puede ser enorme. Para tomar
otro ejemplo, es lógicamente imposible para una suite de la contabilidad el libro mayor
nominal ser la mitad en agosto y la mitad en septiembre: el aplazamiento de final del
mes es por lo tanto (en términos comerciales) una transacción atómica, que puede
afectar millones de filas en miles de tablas y tomar horas para completar (o rodar atrás,
si algo se equivoca). El rollback de una transacción incompleta puede ser manual (como
cuando usted publica el comando de ROLLBACK), pero debe ser automático e
imparable en instancia de un error.

C es para Consecuencia
Transacciones de control
429
El principio de consecuencia declara que los resultados de una pregunta deben ser consecuentes con el estado
de la base de datos entonces la pregunta comenzó. Imagine una pregunta simple que hace un promedio del
valor de una columna de una comando. Si la comando es grande, se necesitarán muchos minutos para pasar
por la comando. ¿Si otros usuarios actualizan la columna mientras la pregunta está en el progreso, debería la
pregunta incluir el nuevo o los viejos valores? ¿Debería esto incluir filas que fueron insertadas o borradas
después de que la pregunta comenzó? El principio de consecuencia requiere que la base de datos asegure que
los valores cambiados no son vistos por la pregunta; esto le dará un promedio de la columna como era
cuando la pregunta comenzó, no importa cuanto la pregunta toma o lo que otra actividad ocurre en las
tablas referidas. El oracle garantiza que si una pregunta tiene éxito, el resultado será consecuente. Sin
embargo, si el administrador de base de datos no ha configurado la base de datos apropiadamente, la
pregunta puede no tener éxito: hay un error de Oracle famoso, "la foto ORA-1555 demasiado vieja," esto es
levantado. Esto solía ser un problema muy difícil de fijar con liberaciones más tempranas de la base de datos,
pero con versiones recientes el administrador de base de datos siempre debería ser capaz de prevenir esto.

Soy para el Aislamiento El principio de aislamiento declara que un incompleto (es decir no
comprometido) la transacción debe ser invisible para el resto del mundo. Mientras la transacción está en
el progreso, sólo una sesión que ejecuta la transacción es permitida ver los cambios; todas otras sesiones
deben ver los datos sin alterar, no los nuevos valores. La lógica detrás de esto es primera, que la
transacción llena no podría pasar (¿recuerde el principio de atomicity y rollback automático o manual?)
y esto por lo tanto a ningunos otros usuarios deberían permitirles ver cambios que podrían ser invertidos.
Y en segundo lugar, durante el progreso de una transacción los datos son (en términos comerciales)
incoherentes: hay un poco tiempo cuando el empleado ha hecho cambiar su sueldo, pero no su grado. El
aislamiento de transacción requiere que la base de datos debiera ocultar transacciones en el progreso de
otros usuarios: ellos verán la versión de preactualización de los datos hasta que la transacción complete,
cuando ellos verán todos los cambios como un conjunto coherente. El oracle garantiza el aislamiento de
transacción: no hay ningún modo que cualquier sesión (además de aquella fabricación de los cambios)
pueda ver datos no comprometidos. Un leído de datos no comprometidos es conocido como un sucio
leído, qué Oracle no permite (aunque algunas otras bases de datos hagan).

El D es para el Duradero El principio de durabilidad declara que una vez que una transacción
completa, debe ser imposible para la base de datos perderlo. Durante el tiempo que la transacción está en
el progreso, el principio de aislamiento no requiere que nadie (además de la sesión
430
Capítulo 10:
Manipulación de Datos

referido) puede ver los cambios que esto ha hecho hasta ahora. Pero el instante que la
transacción completa, debe ser transmitida al mundo, y la base de datos debe garantizar
que el cambio nunca es perdido; una base de datos relacional no es permitida perder
datos. El oracle realiza este requisito por escribir todos los vectores de cambio que son
aplicados a datos a registros de actividades ya que los cambios son hechos. Aplicando
este registro de cambios en copias de seguridad tomadas antes, es posible repetir
cualquier trabajo hecho en instancia de la base de datos dañada. Por supuesto, los datos
pueden ser perdidos por el error de usuario, como DML inadecuado, o tablas que se caen
o truncan. Pero por lo que el Oracle y el DBA están referidos, tales acontecimientos son
transacciones como cualquiera otro: según el principio de durabilidad, ellos son
absolutamente no reversibles.

El Principio y el Final de una Transacción Una sesión comienza una


transacción el momento esto publica cualquier INSERCIÓN, ACTUALIZACIÓN, o
BORRAR select (pero no un TRUNCADO - que es un comando de DDL, no DML).
La transacción sigue por cualquier número de adelante comandos de DML hasta que la
sesión publique DESTINAR o una select ROLLBACK. Sólo entonces van los cambios
ser hechos permanentes y hacerse visibles a otras sesiones (si es destinado, más bien
que rodara atrás). Es imposible anidar transacciones. El estándar SQL no permite que
un usuario comience una transacción y luego comience al otro antes de terminar el
primer. Esto puede ser hecho con PL/SQL (El tercero patentado del oracle - lenguaje de
generación), pero no con SQL estándar por la industria. Las select de control de
transacción explícitas son DESTINAN, ROLLBACK, y SAVEPOINT. También hay
las circunstancias además de un publicado por el usuario DESTINAN o ROLLBACK
que terminará implícitamente una transacción:

■ Publicación de un DDL o select DCL ■ Saliendo del instrumento de usuario


(SQL*Plus o Developer SQL o algo más) ■ Si la sesión de cliente muere ■ Si el
sistema se estrella

Si un usuario resulta un DDL (CREE, CAMBIE, o GOTA) o DCL (SUBVENCIÓN o


REVOQUE) el comando, la transacción que él tiene en el progreso (si alguno) será
destinado: será hecho permanente y hacerse visible a todos otros usuarios. Esto es
porque el DDL y los comandos de DCL son transacciones. Si fuera posible ver el código
fuente para estos comandos, sería obvio. Ellos ajustan las estructuras de datos realizando
comandos de DML contra las tablas que arreglan el diccionario de datos,
Transacciones de control
431

y estos comandos son terminados con DESTINAR. Si ellos no fueran, los cambios
hechos no podían ser garantizados para ser permanentes. Como no es posible en SQL
anidar transacciones, si el usuario ya tiene una transacción ejecutarse, las select que el
usuario ha ejecutado serán destinadas junto con las select que arreglan el comando de
DCL o el DDL.
Si un usuario comienza una transacción publicando un comando de DML y luego
sale del instrumento él usa sin publicar explícitamente DESTINAR o un ROLLBACK,
la transacción se terminará - pero si esto se termina con DESTINAR o un
ROLLBACK es completamente dependiente de como el instrumento es escrito.
Muchos herramientas tendrán el comportamiento diferente, según como salen del
instrumento. (Por ejemplo, en el entorno de Microsoft Windows, es común ser capaz
de terminar un programa seleccionando el Archivo | opciones de Salida de un menú en
la cumbre dejada de la ventana, o haciendo clic "un X" en la esquina correcta superior.
Los programadores que escribieron el instrumento pueden haber codificado bien la
lógica diferente en estas funciones.) En el uno o el otro instancia, será una salida
controlada, entonces los programadores deberían publicar DESTINAR o un
ROLLBACK, pero la opción es hasta ellos.
Si la sesión de un cliente falla por la razón que sea, la base de datos siempre hará rodar
atrás la transacción. Tal frainstancia podría ser por varias razones: el proceso de usuario
puede morir o ser matado al nivel de sistema operativo, la conexión de red con el
servidor de base de datos puede disminuir, o la máquina donde el instrumento de cliente
se ejecuta puede estrellarse. En cualquier de estos instancias, no hay ninguna cuestión
comandoada de DESTINAR o select ROLLBACK, y es hasta la base de datos para
descubrir lo que ha pasado. El comportamiento consiste en que la sesión es matada, y
se hace rodar una transacción activa atrás. El comportamiento es el mismo si el
frainstancia está en el lado de servidor. Si el servidor de base de datos se estrella por
cualquier motivo, cuando después inicializa todas las transacciones de cualquier sesión
que estuviera en el progreso será hecho rodar atrás.
Las Select de Control de Transacción
Una transacción comienza implícitamente con la primera select DML. No hay ningún
comando
comenzar explícitamente una transacción. La transacción sigue por todas las select
DML subsecuentes publicadas por la sesión. Estas select pueden estar contra cualquier
número de tablas: una transacción no es restringida a una comando. Esto se termina
(excluyendo cualquier de los acontecimientos puestos en una lista en la sección
anterior) cuando las cuestiones a de sesión DESTINAN u comando de ROLLBACK. El
comando de SAVEPOINT puede ser usado para poner marcadores que organizarán la
acción de un ROLLBACK, pero la misma transacción permanece en el progreso
independientemente del uso de SAVEPOINT.
432
Capítulo 10:
Manipulación de Datos

DESTINE Sintácticamente, DESTINE es el comando de SQL más simple. La sintaxis


es como sigue:
DESTINE; Esto terminará la transacción corriente, que tiene el efecto dual de la
fabricación
los cambios tanto permanentes como visibles a otras sesiones. Hasta que una
transacción sea destinada, no puede ser visto por ninguna otra sesión, aun si ellos son
entrados en el sistema a la base de datos con el mismo nombre de usuario que aquella
de la sesión ejecutando las transacciones. Hasta que una transacción sea destinada, es
invisible para otras sesiones y puede ser invertido. Pero una vez que es destinado, es
absolutamente no reversible. El principio de durabilidad se aplica. Todos los
administradores de base de datos temen una llamada telefónica a lo largo de estas
líneas:
Usuario: acabo de borrar un millón de filas en vez de uno. DBA: ¿Cómo? Usuario:
Como olvidé de poner un DONDE cláusula en mi BORRAR select. DBA: ¿usted dice
DESTINAN? Usuario: Por supuesto. DBA: Um El estado de los datos antes de
DESTINAR es que los cambios han sido hechos,
pero todas las sesiones además del que que hizo los cambios son desviadas a copias de
los datos en su forma precambiada. Tan si la sesión ha insertado filas, otras sesiones que
SELECCIONAN de la comando no los verán. Si la transacción ha borrado filas, otras
sesiones seleccionar de la comando todavía los verán. Si la transacción ha hecho
actualizaciones, serán las versiones no actualizadas de las filas que son presentadas a
otras sesiones. Esto es de acuerdo con el principio de aislamiento: ninguna sesión puede
ser de cualquier modo el dependiente en el estado de una transacción no
comprometida.
Después de DESTINAR, todas las sesiones verán inmediatamente los nuevos datos
en cualquier pregunta que ellos publiquen: ellos verán las nuevas filas, ellos no verán las
filas borradas, ellos verán las nuevas versiones de las filas actualizadas. En instancia de
la conversación hipotética sólo hablada, un momento las preguntas de otras sesiones verán
millones de filas en la comando; el siguiente será vacío. Esto es de acuerdo con el
principio de durabilidad.

ROLLBACK
Transacciones de control
433
Mientras una transacción está en el progreso, el Oracle guarda una imagen de los datos
como era antes de la transacción. Esta imagen es presentada a otras sesiones que
preguntan los datos mientras la transacción está en el progreso. Esto también es usado
para rodar apoyan la transacción automáticamente si algo se equivoca, o deliberadamente
si la sesión lo solicita. La sintaxis para solicitar un rollback es como sigue:
ROLLBACK [A SAVEPOINT savepoint]; El uso opcional de savepoints es detallado
en la sección después.
El estado de los datos antes del rollback es que los datos han sido cambiados, pero
la información tenía que poner marcha atrás los cambios está disponible. Esta
información es presentada a todas otras sesiones, a fin de poner en práctica el principio
de aislamiento. El rollback desechará todos los cambios restaurando la imagen de
precambio de los datos; cualquier fila la transacción insertada será borrada, rema la
transacción borrada será insertada atrás en la comando, y cualquier fila que fuera
actualizada será devuelta a su estado original. Otras sesiones no serán conscientes que
algo ha pasado en absoluto; ellos nunca vieron los cambios. La sesión que hizo la
transacción verá ahora los datos como era antes de que la transacción comenzara.

DESTINAR es instantáneo, porque realmente no tiene que hacer nada. El trabajo


ha sido hecho ya. Un ROLLBACK puede ser muy lento: esto tomará por lo
general como mucho tiempo (si no más largo) para invertir una transacción
que esto tomó para hacer los cambios en primer lugar. Rollbacks no están bien
para el rendimiento de base de datos.

EJERZA 10-4 Uso Comandos de ROLLBACK y DESTINAR


En este ejercicio, demuestre el uso de select de control de transacción y transacción
aislamiento. Se supone que la comando HR.REGIONS es como vista en la ilustración
al final de Ejercicio 10-3. Si no, ajuste los valores si es necesario. Conecte al esquema de
HORA con dos sesiones simultáneamente. Éstos pueden ser dos sesiones SQL*Plus o dos
sesiones de Developer SQL o uno de cada uno. Las listas de comando siguientes andan
para seguir en cada sesión.
434
Capítulo 10:
Manipulación de Datos

Paso En su primera sesión En su segunda sesión


1 seleccione * de REGIONS; seleccione * de REGIONS;
Ambas sesiones ven los mismos datos.
2 inserción en REGIONS inserción en REGIONS
valores (100, 'el Reino Unido'); valores (101, 'gigabyte');
3 seleccione * de REGIONS; seleccione * de REGIONS;
Ambas sesiones ven resultados diferentes: los datos originales, más su propio
cambio.
4 destine; 5 seleccione * de REGIONS; seleccione * de
REGIONS;
Una transacción ha sido publicada al mundo, el otro todavía es visible a sólo una sesión.
6 rollback; rollback; 7 seleccione * de REGIONS;
seleccione * de REGIONS;
La transacción comprometida no fue invertida porque ha sido destinada ya, pero el no comprometido
uno es completamente ido ahora, habiendo sido terminado rodando apoya el cambio.
8 borre de REGIONS donde borre de REGIONS donde
region_id=100; region_id=101;
9 seleccione * de REGIONS; seleccione * de REGIONS;
Cada fila borrada todavía es visible en la sesión que no la borró, hasta que usted haga lo siguiente:
10 destine; destine; 11 seleccione * de REGIONS;
seleccione * de REGIONS;
Con todas las transacciones terminadas, ambas sesiones ven una vista consecuente de la comando.

SAVEPOINT El uso de savepoints debe permitir que un programador liste un


marcador en una transacción que puede ser usada para controlar el efecto del comando
de ROLLBACK. Más bien que rodar apoyan la transacción entera y terminación de
ello, se hace posible invertir todos los cambios hechos después de un punto particular,
pero cambios de permiso hechos antes de aquel punto intacto. La transacción sí mismo
permanece en el progreso: todavía no comprometido, todavía rollbackable, y todavía
invisible para otras sesiones.
La sintaxis es como sigue: SAVEPOINT savepoint;
Transacciones de control
435

Esto crea un punto llamado en la transacción que puede ser usada en un comando de
ROLLBACK subsecuente. La comando siguiente ilustra el número de filas en una
comando en varias etapas en una transacción. La comando es una comando muy simple
llamada la PALETA, con una columna.

Comando
paleta de comando truncada; inserción en valores de paleta ('un'); savepoint primero;
inserción en valores de paleta ('dos'); savepoint segundo; inserción en valores de
paleta ('tres'); rollback a segundo savepoint; rollback a savepoint primero; destine;
borre de la paleta; rollback;

Filas Visibles al Usuario


01122321101

Filas Visibles a Otros


00000000111

El ejemplo en la comando muestra dos transacciones: el primer terminado con


DESTINAR, el segundo con un ROLLBACK. Puede verse que el uso de savepoints sólo
es visible dentro de la transacción: otras sesiones no ven nada que no sea destinado.

El comando de SAVEPOINT (aún) no es la parte del estándar SQL oficial,


entonces puede considerarse la práctica buena para evitarlo en sistemas de
producción. Puede ser muy útil en el desarrollo, sin embargo, cuando usted
prueba el efecto de select DML y anda por una transacción compleja paso a paso.

El AUTOCOMMIT en SQL*Plus y Developer SQL El comportamiento


estándar de SQL*Plus y Developer SQL debe seguir el estándar SQL: una transacción
comienza implícitamente con una select DML y se termina explícitamente con
DESTINAR o un ROLLBACK. Es posible cambiar este comportamiento en ambos
herramientas de modo que cada select DML destine inmediatamente, en su propia
transacción. Si esto es hecho, no hay ninguna necesidad de ninguno DESTINAN select, y
el ROLLBACK
436
Capítulo 10:
Manipulación de Datos

la select nunca puede tener ningún efecto: todas las select DML se hacen permanentes y
visibles a otros tan pronto como ellos ejecutan.
En SQL*Plus, habilite el modo autodestinar con el comando:
SET AUTODESTINA EN
Volver a normal:
SET AUTODESTINA LEJOS En Developer SQL, del menú de Herramientas,
seleccione Preferencias. Entonces amplíese
Base de datos y Parámetros de Hoja de cálculo: usted verá la casilla de verificación
Autocommit in SQL Worksheet.

Puede ser difícil justificar la habilitación del modo autodestinar del SQL*Plus e
herramientas de Developer SQL. Quizás la única razón es para la compatibilidad
con algunos productos de tercero que no siguen el estándar SQL. Las
escrituras de SQL escritas para tales productos pueden no tener cualquiera
DESTINA select.

ESCOGIDO PARA LA ACTUALIZACIÓN Una última select de control de


transacción es SENTENCIA PARA LA ACTUALIZACIÓN. El oracle, en ausencia,
proporciona el nivel más alto posible de la coincidencia: los lectores no bloquean a
escritores, y los escritores no bloquean a lectores. O en la lenguaje clara, no hay ningún
problema con datos de interrogatorio de sesión que otra sesión actualiza, o datos de
actualización de sesión que otra sesión pregunta. Sin embargo, hay tiempos cuando
usted puede desear cambiar este comportamiento y prevenir cambios en datos que están
siendo preguntados.
Es bastante habitual para una aplicación recuperar un SET de filas con un comando
ESCOGIDO, presentarlos a un usuario para la lectura, y le apremio para cualquier
cambio. Como el Oracle es una base de datos multiusuaria, no es imposible que otra
sesión también haya recuperado las mismas filas. Si ambas sesiones intentan hacer
cambios, pueden haber algunos efectos bastante raros. La comando siguiente representa
tal situación.

Primer Usuario Segundo Usuario


seleccione * de REGIONS; seleccione * de REGIONS;
borre de REGIONS
donde region_id=5;
destine;
las REGIONS de actualización ponen region_name ='GB' donde
region_id=5;
Transacciones de control
437

Esto es lo que el primer usuario verá, de un SQL*Plus apremio:


SQL> seleccionan * de REGIONS;
REGION_ID REGION_NAME
---------- -------------------------
5 el Reino Unido 1 Europa 2 Américas 3 Asia 4 Oriente Medio y
África
SQL> REGIONS de actualización ponen region_name ='GB' donde
region_id=5; 0 filas actualizadas.
Esto es un poco desconcertante. Un camino alrededor de este problema es cerrar con
llave las filas en
qué está interesado:
seleccione * de REGIONS para la actualización;

DENTRO DEL EXAMEN


Entendimiento de Aislamiento de Transacción
Todas las select DML son privadas a la sesión que los hace, hasta que la transacción destine. La
transacción es comenzada implícitamente con la primera select DML ejecutada. Hasta que sea destinado,
puede ser invertido con un ROLLBACK. Ninguna otra sesión verá alguna vez cambios que no han sido
destinados, pero el instante ellos son destinados ellos serán visibles a todas otras sesiones.
La estructura de transacción es esencial para la programación buena. Una transacción es una unidad
lógica del trabajo: los cambios hechos por la transacción, si es una select que afecta una fila en una
comando, o mucha afectación de select
cualquier número de filas en muchas tablas, debería ser mí contenido. No debería ser de ningún modo el
dependiente en select ejecutadas fuera de la transacción, y no debería ser divisible en transacciones
más pequeñas, autónomas. Una transacción debería ser la medida correcta; esto debería contener
todas las select que no pueden ser separadas en términos de lógica comercial y ningunas select que
puedan ser.
Las decisiones sobre la estructura de transacción pueden ser complejas, pero con algún pensamiento
e investigación, ellos pueden ser hechos para cualquier situación. Los analistas de sistemas y
comerciales pueden y deberían aconsejar.
438
Capítulo 10:
Manipulación de Datos

GUIÓN & SOLUCIÓN


Las transacciones, como coacciones, son reglas comerciales: una técnica por lo cual la base de datos puede hacer
cumplir reglas desarrolladas por analistas comerciales. ¿Si la "unidad lógica del trabajo" es enorme, como un
aplazamiento de período de suite de la contabilidad, debería realmente esto ser puesto en práctica como una
transacción?

Siendo capaz de hacer operaciones DML, mire el resultado, luego ruede atrás e inténtelos otra vez puede ser muy
útil. ¿Pero es realmente una idea buena?

No necesariamente. Tal transacción podría tomar horas, ocupando una cantidad enorme de recursos de base de datos. En
tales instancias, usted debe hablar con sus analistas comerciales y DBA si es posible romper una transacción comercial
en varias transacciones de base de datos. Por supuesto, si algo se equivoca parcialmente por, usted tendrá una suite de
la contabilidad que es en parte en un período y en parte en el otro. Esta aplicación tendrá que ser capaz de clasificar el
lío. No, no realmente. Si la aplicación es diseñada de modo que los usuarios finales puedan hacer esto, el DBA no
será feliz. Él verá muchas transacciones ser hechas rodar atrás, que acentúa la base de datos. Es mucho mejor para la
aplicación hacer todo tal trabajo del lado de cliente y sólo presentar el trabajo a la base de datos cuando está listo y
puede ser destinado inmediatamente.

EL PARA la cláusula de ACTUALIZACIÓN colocará una cerradura en todas las filas


recuperadas. Ningunos cambios pueden ser hechos a ellos por cualquier sesión además
de lo que publicó el comando, y por lo tanto las actualizaciones subsecuentes tendrán
éxito: no es posible para las filas haber sido cambiado. Esto significa que una sesión
tendrá una vista consecuente de los datos (esto no cambiará), pero el precio para ser
pagado es que otras sesiones colgarán si ellos tratan de actualizar alguna de las filas
cerradas con llave (ellos pueden preguntarlos, por supuesto,).
Las cerraduras colocadas por un PARA la cláusula de ACTUALIZACIÓN serán
sostenidas hasta que la sesión publicando las cuestiones a de comando DESTINE o
ROLLBACK. Esto debe ser hecho para soltar las cerraduras, aun si ningunos comandos
de DML han sido ejecutados.

RESUMEN DE CERTIFICACIÓN
Hay cuatro comandos de DML que afectan datos: INSERCIÓN, ACTUALIZACIÓN,
BORRAR,
y (el comando opcional) FUSIÓN. TRUNCADO Es un comando de DDL que es
funcionalmente equivalente a un BORRAR comando sin un DONDE cláusula, pero es
mucho más rápido. Todos los comandos de DML pueden ser hechos rodar atrás,
automáticamente en instancia del error, o a mano con el comando de ROLLBACK - a
menos que ellos hayan sido destinados con DESTINAR. Una vez destinado, los
cambios nunca pueden ser invertidos. TRUNCADO, como todos los comandos de
DDL, tiene un incorporado DESTINAN lo que es imparable.
Taladradora de dos minutos
439


TALADRADORA DE DOS MINUTOS
Describa Cada Lenguaje de Manipulación de Datos (DML) Select
❑ INSERCIÓN escribe filas en una comando. ❑ ACTUALIZACIÓN ajusta los valores en
filas existentes. ❑ BORRAR borra filas. ❑ FUSIÓN puede combinar las funciones de
INSERCIÓN, ACTUALIZACIÓN, y BORRAR. ❑ Aunque TRUNCADO no sea DML, esto
realmente borra todas las filas en una comando.

Filas de inserción en una Comando


❑ INSERCIÓN puede escribir una fila o un SET de filas. ❑ Esto es posible para un
INSERCIÓN escribir filas en tablas múltiples. ❑ Subconsultas puede ser usado para generar
las filas para ser insertadas. el  Subconsultas y funciones puede ser usado para generar
valores de columna. ❑ Un INSERCIÓN no es permanente hasta que sea destinado.

Filas de actualización en una Comando


❑ ACTUALIZACIÓN puede afectar una fila o un SET de filas en una comando. ❑
Subconsultas puede ser usado para seleccionar las filas para ser actualizadas. el 
Subconsultas y funciones puede ser usado para generar valores de columna. ❑ Una
ACTUALIZACIÓN no es permanente hasta que sea destinado.

Borre Filas de una Comando


❑ BORRAR puede borrar una fila o un SET de filas de una comando. ❑ Una subpregunta
puede ser usado para seleccionar las filas para ser borradas. ❑ BORRAR no es permanente
hasta que sea destinado. ❑ TRUNCADO borra cada fila de una comando. ❑ Un
TRUNCADO es inmediatamente permanente: no puede ser hecho rodar atrás.
440
Capítulo 10:
Manipulación de Datos

Transacciones de control
❑ Una transacción es una unidad lógica del trabajo, posiblemente varias select
DML. ❑ Transacciones son invisibles para otras sesiones hasta no destinado. ❑
Hasta no destinado, las transacciones pueden ser hechas rodar atrás. ❑ Una vez
destinado, una transacción no puede ser invertida. ❑ Un SAVEPOINT deja a una
sesión hacer rodar atrás la parte de una transacción.

MÍ PRUEBA
Mí Prueba
441
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.

Describa Cada Lenguaje de Manipulación de Datos (DML) Select


1. ¿Cuál de los comandos siguientes puede ser hecho rodar atrás?
A. DESTINE B. BORRAR C. INSERCIÓN D. FUSIÓN E. F TRUNCADO.
ACTUALIZACIÓN
2. ¿Cómo puede usted cambiar el valor de clave primaria de una fila? (Elija la mejor respuesta.)
A. Usted no puede cambiar el valor de clave primaria. B. Change esto con una select de
ACTUALIZACIÓN simple. C. La fila debe ser borrada con un BORRAR y entrada de nuevo con
un INSERCIÓN. D. Esto sólo es posible si la fila es cerrada con llave primero con un ESCOGIDO
PARA LA ACTUALIZACIÓN.
3. Si una ACTUALIZACIÓN o BORRAR manda tiene un DONDE la cláusula que le da un alcance de
varios
¿las filas, qué pasará si hay una parte de error el camino a través de la ejecución? El comando es
uno de varios en una transacción de multiselect. (Elija la mejor respuesta.) A. El comando saltará
la fila que causó el error y seguir. B. El comando se parará en el error, y las filas que han sido
actualizadas o borradas van
permanezca actualizado o borrado.
C. Independientemente del trabajo el comando había hecho antes de golpear el error será hecho
rodar atrás, pero
el trabajo hecho ya por la transacción permanecerá.
D. La transacción entera será hecha rodar atrás.

Filas de inserción en una Comando


4. Si una tabla T1 tiene cuatro columnas numéricas, C1, C2, C3, y C4, que de estas select va
¿tenga éxito? (Elija la mejor respuesta.) A. insertan en valores de T1 (1,2,3, nulo); B. insertan en
valores de T1 ('1', '2', '3', '4'); C. insertan en T1 escogido * de T1;
442
Capítulo 10:
Manipulación de Datos

D. Todas las select (A, B, y C) tendrán éxito. E. Ninguna de


las select (A, B, o C) tendrá éxito.
5. Estudie el resultado de esta select SENTENCIA:
SQL> seleccionan * de t1;
C1 C2 C3 C4
---------- ---------- ---------- ----------
1 2 3 45 6 7
8
Si usted publica esta select:
el inserción en t1 (c1, c2) valores (seleccionan c1, c2 de t1);

¿por qué fallará esto? (Elija la mejor respuesta.)


A. Como los valores no son proporcionados a las columnas de toda la comando: debería haber
NULLs para C3
y C4.
B. Como la subpregunta devuelve filas múltiples: esto requiere un DONDE cláusula restringir el
el número de filas volvió a uno. C. Como la subpregunta no es el escalar: esto debería usar a
MAX o MINUTO para generar valores escalares. D. Como la palabra clave de VALORES no es
usada con una subpregunta. E. Esto tendrá éxito, insertando dos filas con NULLs para C3 y C4.
6. Considere esta select:
inserción en REGIONS (region_id, region_name)
los valores ((seleccionan el máximo (region_id) +1 de REGIONS), 'Gran
Bretaña');
¿Cuál será el resultado? (Elija la mejor respuesta.)
A. La select no tendrá éxito si el valor generado para REGION_ID no es único,
porque REGION_ID es la clave primaria de la comando de REGIONS.
B. La select tiene un error de sintaxis porque usted no puede usar la palabra clave de VALORES
con
una subpregunta. C. La select ejecutará sin el error. D. La select fallará si la comando de
REGIONS tiene una tercera columna.

Filas de actualización en una Comando


7. Usted quiere insertar una fila y luego actualizarlo. ¿Qué secuencia de pasos debería usted seguir?
(Elija la mejor respuesta.) A. INSERCIÓN, ACTUALIZACIÓN, DESTINA B. INSERTE,
DESTINE, ACTUALICE, DESTINE

C. INSERCIÓN, SELECCIONE PARA ACTUALIZACIÓN, ACTUALIZACIÓN, DESTINE D.


INSERTE, DESTINE, ESCOGIDO PARA ACTUALIZACIÓN, ACTUALIZACIÓN, DESTINE
8. Si usted publica este comando:
actualice salary=salary de SET de EMPLOYEES * 1.1;

¿cuál será el resultado? (Elija la mejor respuesta.)


Mí Prueba
443
A. La select fallará porque no hay DONDE la cláusula para restringir las filas afectó. B. La
primera fila en la comando será actualizada. C. Habrá un error si cualquier fila tiene su columna de
SUELDO NULA. D. Cada fila hará incrementar el SUELDO en el 10 por ciento, a menos que el
SUELDO fuera NULO.

Borre Filas de una Comando


9. ¿Cómo puede usted borrar los valores de una columna de cada fila en una comando? (Elija la mejor
respuesta.)
A. Use el BORRAR comando de COLUMNA. B. Use el comando de COLUMNA TRUNCADO.
C. Use el comando de ACTUALIZACIÓN. D. Use el comando de COLUMNA DE GOTA.
10. ¿Cuál de estos comandos borrará cada fila en una comando? (Elija uno o varios correctos
respuestas.) A. BORRAR mandan sin DONDE la cláusula B. Una COMANDO DE GOTA manda
C. Un comando TRUNCADO D. Un comando de ACTUALIZACIÓN, poniendo cada columna a
NULO y sin DONDE cláusula

Transacciones de control
11. El usuario JOHN actualiza algunas filas y pide al usuario ROOPESH entrar en el sistema y
comprobar los cambios antes
él los destina. ¿Cuál de las select siguientes es verdad? (Elija la mejor respuesta.) A. ROOPESH
puede ver los cambios, pero no puede cambiarlos porque JOHN se habrá cerrado
las filas. B. ROOPESH no será capaz de ver los cambios. C. JOHN debe destinar los cambios
de modo que ROOPESH pueda verlos y, si es necesario, rollo
ellos atrás.
D. JOHN debe destinar los cambios de modo que ROOPESH pueda verlos, pero sólo JOHN
puede rodar
ellos atrás.
444
Capítulo 10:
Manipulación de Datos

12. El usuario JOHN actualiza algunas filas, pero no destina los cambios. El usuario ROOPESH
pregunta el
las filas aquel JOHN actualizadas. ¿Cuál de las select siguientes es verdad? (Elija tres respuestas
correctas.) A. ROOPESH no será capaz de ver las filas porque ellos serán cerrados con llave. B.
ROOPESH será capaz de ver los nuevos valores, pero sólo si él entra en el sistema como JOHN.
C. ROOPESH verá las viejas versiones de las filas. D. ROOPESH verá el estado del estado de los
datos como era cuando JOHN último creó
un SAVEPOINT. 13. ¿Cuál de estos comandos terminará una transacción? (Elija tres
respuestas correctas.)
A. DESTINE B. BORRAR C. ROLLBACK D. ROLLBACK A SAVEPOINT E. SAVEPOINT
F. TRUNCADO

PREGUNTA DE LABORATORIO
Realice este ejercicio en el esquema OE.
1. Inserte a un cliente en CLIENTES, usando una función para generar un número de cliente único:
inserción en clientes
(customer_id,cust_first_name,cust_last_name) valores ((seleccionan el máximo
(customer_id) +1 de clientes), 'John', 'Watson');

2. Déle un límite de crédito igual al límite de crédito medio:


actualice el SET de clientes
el credit_limit = (seleccionan avg (credit_limit) de clientes) donde
cust_last_name =' Watson';

3. Cree a otro cliente que usa al cliente sólo creado, pero asegúrese que el CUSTOMER_ID es
único:
inserción en clientes
(customer_id,cust_first_name,cust_last_name,credit_limit) seleccionan
customer_id+1,cust_first_name,cust_last_name,credit_limit de clientes donde
cust_last_name =' Watson';

4. Cambie el nombre del segundo cliente entrado:


clientes de actualización
SET cust_last_name ='Ramklass', cust_first_name ='Roopesh'
Pregunta de laboratorio
445
donde customer_id = (seleccionan el máximo (customer_id) de clientes);
5. Destine esta transacción:
destine;

6. Determine el CUSTOMER_IDs de los dos nuevos clientes y cierre con llave las filas: 7.
seleccione customer_id, cust_last_name de clientes
donde cust_last_name en ('Watson', 'Ramklass') para actualización; De otra sesión conectada al esquema
OE, intente actualizar una de las filas cerradas con llave:
actualice credit_limit=0 de SET de clientes donde cust_last_name ='Ramklass';

8. Este comando colgará. En la primera sesión, suelte las cerraduras publicando destinar:
destine;

9. La segunda sesión completará ahora su actualización. En la segunda sesión, borre las dos filas:
borre de clientes donde cust_last_name en ('Watson', 'Ramklass');

10. En la primera sesión, intente truncar la comando de CLIENTES:


clientes de comando truncados;

11. Esto fallará porque hay una transacción en el progreso contra la comando, que bloqueará todos
DDL manda. En la segunda sesión, destine la transacción:
destine;

12. La comando de CLIENTES estará de vuelta ahora en el estado en el cual estaba al principio del
ejercicio.
Confirme esto comprobando el valor de CUSTOMER_ID más alto:
máximo escogido (customer_id) de clientes;
446
Capítulo 10:
Manipulación de Datos

MÍ PRUEBAN RESPUESTAS
Describa Cada Lenguaje de Manipulación de Datos (DML) Select
1. ® B, C, D, F. Éstos son los comandos de DML: pueden hacerlos rodar todos
atrás. ✓
® A, E. DESTINE termina una transacción, que nunca puede ser hecha rodar entonces
atrás. ˚
TRUNCADO es un comando de DDL e incluye un incorporado DESTINAN.
2. ® B. Assuming ningunas violaciones de coacción, la clave primaria puede actualizado como
cualquier otra columna. ✓
® A, C, D. A es incorrecto porque no hay ninguna restricción de la actualización de claves
primarias (además de ˚
coacciones). El C es incorrecto porque no hay ninguna necesidad de hacerlo en una manera tan
compleja. El D es incorrecto porque la ACTUALIZACIÓN aplicará su propia cerradura: usted no
tiene que cerrar con llave la fila primero.
3. ® C. Esto es el comportamiento esperado: la select es hecha rodar atrás, y el resto del ✓
la transacción permanece no comprometida.
® A, B, D. A es incorrecto porque, mientras este comportamiento es de hecho configurable, no
es habilitado ˚
en ausencia. El B es incorrecto porque, mientras esto es de hecho posible en instancia de errores
espaciales, no es habilitado en ausencia. El D es incorrecto porque sólo una select será hecha
rodar atrás, no la transacción entera.

Filas de inserción en una Comando


4. ® D. A, B, y C tendrá éxito todo, aunque B obligue la base de datos a hacer algún ✓
reparto de tipo automático.
® A, B, C, E. A, B, y C son incorrectos porque cada uno tendrá éxito. El E es incorrecto porque
A, B, ˚
y C tendrá éxito todo.
5. ® D. La sintaxis es incorrecta: use la palabra clave de VALORES o una subpregunta, pero no a
ambos. ✓
Borre la palabra clave de VALORES, y se ejecutará. C3 y C4 serían poblados con NULLs.
® A, B, C, E. A es incorrecto porque no hay ninguna necesidad de proporcionar valores a
columnas no puestas en una lista. ˚
Los B y C son incorrectos porque un INSERCIÓN puede insertar un SET de filas, así no hay
ninguna necesidad de restringir el número con un DONDE cláusula o usando a MAX o MINUTO
para devolver sólo una fila. El E es incorrecto porque la select no es sintácticamente correcta.
6. ® C. La select es sintácticamente correcta, y el uso de "MAX (REGION_ID) + 1" ✓
garantías que generan un número único para la columna de clave primaria.
® A, B, D. A es incorrecto porque la función generará un valor único para ˚ primario
llave. El B es incorrecto porque no hay ningún problema usando una subpregunta escalar para generar
un valor para una lista de VALORES. Lo que no puede ser hecho debe usar la palabra clave de
VALORES y luego una subpregunta no escalar sola para proporcionar todos los valores. El D es
incorrecto porque si hay una tercera columna, será poblado con un valor NULO.

Filas de actualización en una Comando


Mí Respuestas de Prueba
447
7. ® A. Esto es el más simple (y por lo tanto el mejor) el camino.

® B, C, D. Todos éstos trabajarán, pero ellos son todos innecesariamente complicados: ningún
programador debería ˚
use select innecesarias.
8. ® D. Cualquier operación aritmética de unas vueltas NULAS un NULO, pero todas otras filas será
actualizada. ✓
® A, B, C. A y B son incorrectos porque la carencia de un DONDE la cláusula significa que
cada fila ˚
será tratado. El C es incorrecto porque tratando de hacer la aritmética contra un NULO no es un
error (aunque no sea muy útil, cualquiera).
Borre Filas de una Comando
9. ® C. Una ACTUALIZACIÓN, sin un DONDE cláusula, es el único
camino. ✓
® A, B, D. A es incorrecto porque no hay ninguna tal sintaxis: BORRAR afecta la fila entera. ˚
El B es incorrecto porque no hay ninguna tal sintaxis: un TRUNCADO afecta la comando entera.
El D es incorrecto porque, mientras este comando realmente existe (es la parte del comando de
COMANDO CAMBIAR), borrará la columna completamente, no sólo borrará los valores de ello.
10. ® A, C. El TRUNCADO será más rápido, pero BORRAR se pondrá allí también. ✓
® el B es incorrecto porque esto borrará la comando así como las filas dentro de ella. El D
es ˚ incorrecto
porque las filas todavía estarán allí - aunque ellos sean poblados con NULLs.

Transacciones de control
11. ® B. El principio de aislamiento significa que sólo JOHN puede ver su transacción no
comprometida. ✓
® A, C, D. A es incorrecto porque el aislamiento de transacción significa que ninguna otra sesión
será capaz a ˚
ver los cambios. Los C y D son incorrectos porque nunca puede hacerse rodar una transacción
comprometida atrás.
12. ® aislamiento de C. Transaction significa que ninguna otra sesión será capaz de ver los cambios
hasta ✓
ellos son destinados.
® A, B, D. A es incorrecto porque el cierre no es relevante; los escritores no bloquean a lectores.
El B es ˚
incorrecto porque el aislamiento restringe la visibilidad de transacciones en el progreso a la sesión
que hace los cambios; el esquema al cual los usuarios conectan no importa. El D es incorrecto
porque savepoints sólo son marcadores en una transacción; ellos no afectan cambios de publicación
en otras sesiones.
13. ® A, C, F. DESTINE y ROLLBACK son los comandos de terminar una transacción ✓
explícitamente; TRUNCADO lo hará implícitamente.
® B, D, E. El B es incorrecto porque BORRAR es un comando de DML que puede ser ejecutado
dentro de un ˚
transacción. Los D y E son incorrectos porque la creación savepoints y el balanceo atrás a ellos
dejan la transacción en el progreso.
448
Capítulo 10:
Manipulación de Datos

RESPUESTA DE LABORATORIO
La figura 10-5 muestra los cinco primeros pasos del ejercicio.
La figura 10-6 muestra los siete pasos finales del ejercicio, como visto desde el punto de vista de la
primera sesión.
FIGURA 10-5

Los pasos 1 a 5 del ejercicio de


laboratorio

FIGURA 10-6

Los pasos finales del ejercicio de


laboratorio, incluso el error
TRUNCADO

11
La utilización de Select
de DDL para Crear y
Manejar Tablas

OBJETIVOS DE
CERTIFICACIÓN

11.01
Clasifique los Objetos de Base de datos Principales
11.05
Explique Como Coacciones Son Creadas

en el momento de Creación de Comando


11.02
Examine la Estructura de Comando

Taladradora de dos minutos
11.03
Liste en una lista los Tipos de datos Que están Disponibles

para Columnas
Q&A
Mí Prueba
11.04
Cree una Comando Simple

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

450
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Hay varios tipos de objetos de datos en una base de datos que puede ser dirigida por usuarios con

SQL.El el más comúnmente usaba el tipo del objeto es la comando. Las tablas vienen a varias
formas, pero SQL no es consciente de esto. Una comando también puede tener que ver con otros

objetos tal como

índices o GLOBOS (un objeto grande - una estructura diseñada para almacenar artículos grandes
de la información, tal
como videograbaciones) que son dirigidos implícitamente. La select sólo se dirigirá a la comando con
la cual los otros objetos tienen que ver. Esta creación de comando de detalles de capítulo; el
Capítulo 12 cubrirá algunos otros tipos de objeto.

Creando una comando, hay ciertas reglas que deben ser seguidas en cuanto a la
estructura de la comando: sus columnas sólo pueden ser de ciertos tipos de datos.
También hay las reglas que pueden ser definidas para las filas individuales; éstos son
conocidos como coacciones. Las reglas estructurales y las reglas de coacción juntos
restringen los datos que pueden ser insertados en la comando.

OBJETIVO DE CERTIFICACIÓN 11.01

Clasifique los Objetos de Base de datos Principales


Hay diversos tipos de objetos que pueden existir dentro de una base de datos, muchos más
con el
liberación corriente que con versiones más tempranas. Todos los objetos tienen unos
nombres, y todos los objetos son poseídos por alguien. "Alguien" es un usuario de base de
datos, como la HORA. Los objetos que el usuario posee son su esquema. El nombre de un
objeto debe conformarse con ciertas reglas.

Tipos de objeto
Esta pregunta pone en una lista los tipos de objeto que resultan existir en esta base de
datos particular, con
un cargo de cuántos hay:
SQL> seleccionan object_type, cuenta (object_type) de dba_objects

2 grupo por object_type pide por object_type;


OBJECT_TYPE CONDE (OBJECT_TYPE)
------------------- ------------------
DIRECTORIO DE DIMENSIÓN DE CONTEXTO DE GRUPO DE CONSUMIDOR DE RACIMO
10 12
659

LA PARTICIÓN DE ÍNDICE DE ÍNDICE DE FUNCIÓN DE CONTEXTO DE EVALUACIÓN DE EDICIÓN


INDEXTYPE CLASE DE JAVA DATOS DE JAVA LA PARTICIÓN DE GLOBO DE GLOBO DE BIBLIOTECA DE
CLASE DE TRABAJO DE TRABAJO DE RECURSO DE JAVA MATERIALIZÓ EL TIPO DE GATILLO DE
PARTICIÓN DE COMANDO DE COMANDO DE SINÓNIMO DE SECUENCIA DE HORARIO DE SET DE REGLA DE
REGLA DE PLAN DE RECURSO DE COLA DE PROGRAMA DE PROCEDIMIENTO DE CUERPO DE PAQUETE DE
PAQUETE DE OPERADOR DE VISTA TECLEA EL CUERPO GRUPO DE VENTANA DE VENTANA DE VISTA
INDETERMINADO filas de ESQUEMA 42 de XML seleccionadas.
Clasifique los Objetos de Base de datos Principales

1
13
286
3023
342
12
22018
322820
11 11
177769
73
60 1240 1178
118
17 37
71
21
2
204
26493
2464
199413
2630
231
6
4669
94
93
451
Esta pregunta se dirige a la vista DBA_OBJECTS, que se pelea para cada objeto en
la base de datos. Los números son bajos, porque la base de datos es muy pequeño uno usado sólo para la
enseñanza. Una base de datos usada para una aplicación comercial podría tener cientos de miles de objetos.
Usted no puede ser capaz de ver la vista DBA_OBJECTS, según que permisos su cuenta tiene. Las vistas
alternas son USER_OBJECTS, que mostrará todos los objetos poseídos por usted, y ALL_OBJECTS, que
mostrará todos los objetos a los cuales le han concedido el acceso (incluso su propio). Todos los usuarios tienen
el acceso a éstos.
452
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Los objetos de gran interés para un programador SQL son aquellos que contienen, o
dan el acceso a, datos. Éstos son

■ Tablas ■ Visualiza Sinónimos ■ ■ Índices ■ Secuencias

Este capítulo cubre tablas; los demás son descritos en el Capítulo 12. Brevemente, una
vista
es una select SENTENCIA almacenada que puede ser dirigida como si fuera una
comando. No es nada más que una select SENTENCIA, pero, más bien que ejecutar la
select sí mismo, el usuario publica una select SENTENCIA contra la vista en cambio.
En efecto, el usuario selecciona del resultado de otra selección. Un sinónimo es un
alias para una comando (o una vista). Los usuarios pueden ejecutar select SQL contra
el sinónimo, y la base de datos trazará un mapa de ellos en select contra el objeto al
cual el sinónimo señala. Los índices son un medio de tiempos de acceso que mejoran a
filas en tablas. Si una pregunta requiere sólo una fila, entonces más bien que escanear la
comando entera para encontrar la fila, un índice puede dar un indicador a la posición
exacta de la fila. Por supuesto, el índice sí mismo debe ser buscado, pero esto a menudo
es más rápido que escanear la comando. Una secuencia es una construcción que genera
números únicos. Hay muchos instancias donde los números únicos son necesarios.
Números de publicación de secuencias en pedido, a petición: es absolutamente imposible
para el mismo número ser publicado dos veces.
Los tipos de objeto restantes son menos comúnmente relevantes para un programador
SQL. Su uso se cae más dentro del reino de programadores PL/SQL y administradores de
base de datos.

Usuarios y Esquemas
Muchas personas usan los términos "usuario" y "esquema" de modo intercambiable. En
el entorno de Oracle, usted puede llevarse esto (aunque no necesariamente con otros
sistemas de administración de bases de datos). Un usuario es una persona que puede
conectar a la base de datos. El usuario tendrá un nombre de usuario y una contraseña.
Un esquema es un contenedor para los objetos poseídos por un usuario. Cuando un
usuario es creado, su esquema es creado también. Un esquema es los objetos poseídos
por un usuario; al principio, será vacío.
Algunos esquemas siempre serán vacíos: el usuario nunca creará ningún objeto, porque
ellos no necesitan a y (si el usuario es alistado correctamente) no tendrá los privilegios
necesarios de todos modos. Habrán concedido a usuarios, como esto permisos, por
privilegios directos o por papeles, para usar código y datos de acceso en otros esquemas,
poseídos por otros usuarios. Otros usuarios pueden ser el revés de esto: ellos poseerán
muchos objetos, pero
Clasifique los Objetos de Base de datos Principales
453

nunca realmente entrará en el sistema a la base de datos. No tienen que haberles concedido
hasta el privilegio de SESIÓN CREAR, entonces la cuenta es con eficacia inhibida (o en
efecto puede ser cerrado con llave) - estos esquemas son usados como depósitos para
código y datos tenidos acceso por otros.
Los objetos de esquema son objetos con un dueño. El identificador único para un
objeto de un tipo particular no es su nombre - es su nombre, prefijado con el título del
esquema al cual esto pertenece. Así HR.REGIONS de comando es una comando llamada
REGIONS, que es poseído por la HORA de usuario. Podría haber otra comando
SYSTEM.REGIONS que sería una comando completamente diferente (quizás diferente
tanto en estructura como en contenido) poseído por SISTEMA de usuario y residencia en
su esquema.
Varios usuarios (y sus esquemas asociados) son creados automáticamente en el tiempo
de creación de base de datos. El principal entre éstos es SYS y SISTEMA. El usuario SYS
posee el diccionario de datos: un SET de tablas (en el esquema SYS) que definen la base
de datos y sus contenido. SYS también posee varios cientos de paquetes PL/SQL: el
código que es proporcionado al uso de administradores de base de datos y developeres.
Los objetos en el esquema SYS nunca deberían ser modificados con comandos de DML.
Si usted debiera ejecutar DML contra las tablas de diccionario de datos, usted ejecutaría
el riesgo de corromper el diccionario de datos, con resultados desastrosos. Usted actualiza
el diccionario de datos ejecutando comandos de DDL (tales que CREAN LA
COMANDO), que proporcionan una capa de abstracción entre usted y el diccionario de
datos sí mismo. El esquema de SISTEMA almacena varios objetos adicionales usados
para la administración y supervisar.
Según las opciones seleccionadas durante la creación de base de datos, pueden haber
más usuarios quizás creados hasta 30 en total. Estos otros son usados para almacenar el
código y datos requeridos por varias opciones. Por ejemplo, el usuario MDSYS almacena
los objetos usados por el Oracle Espacial, una opción que amplía las capacidades de la
base de datos de Oracle de manejar la información geográfica.

Nombramiento de Objetos de Esquema


Un objeto de esquema es un objeto que es poseído por un usuario. Todos los nombres
de objeto de esquema deben
confórmese con ciertas reglas:

■ El nombre puede ser de 1 a 30 carácteres mucho tiempo (a excepción


los nombres de enlace de base de datos que pueden ser hasta 128 carácteres
mucho tiempo). ■ palabras Reservadas (tal tan ESCOGIDO) no puede ser usado
como nombres de objeto. ■ Todos los nombres debe comenzar con una carta de
"A" por "Z". ■ Los carácteres de un nombre sólo puede ser cartas, números,
subrayar (_),
el signo de dólar ($), o el símbolo de picadillo (#).
■ Minúsculas será convertido a la mayúscula.
454
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Encerrando el nombre dentro de dobles citas,


todas estas reglas (a excepción de la longitud)
pueden ser rotas, pero ponerse al objeto,
Los nombres de objeto deben ser no más que 30 carácteres. Los carácteres
pueden ser cartas, dígitos, subrayar, dólar, o picadillo.
posteriormente, siempre debe ser especificado con dobles citas, como en los ejemplos en la Figura 11-1. Note
que las mismas restricciones también se aplican a nombres de columna.

Aunque los herramientas, como SQL*Plus y Developer SQL convertan


automáticamente minúsculas a la mayúscula a menos que el nombre sea encerrado
dentro de dobles citas; recuerde que los nombres de objeto siempre son el instancia
sensible. En este ejemplo, las dos tablas son completamente diferentes:
SQL> crean la comando más abajo (c1 fecha); la Comando creada. SQL>
crean la comando "más abajo" (col1 varchar2 (2)); la Comando creada.
SQL> seleccionan table_name de dba_tables donde
2 más abajo (table_name) = 'más abajo'; los
TABLE_NAME------------------------------bajan más ABAJO

FIGURA 11-1

Utilización de dobles citas


para usar nombres no estándar
Clasifique los Objetos de Base de datos Principales
455

Mientras es posible usar nombres minúsculos y carácteres no estándar (hasta


espacios), se considera la práctica mala debido a la confusión que esto puede
causar.

Objeto Namespaces
A menudo se dice que el identificador único para un objeto es el nombre de objeto,
prefijado
con el nombre de esquema. Mientras esto generalmente es verdad, para un
entendimiento lleno del nombramiento, es necesario introducir el concepto de un
namespace. Un namespace define un grupo de tipos de objeto, dentro de los cuales
todos los nombres deben ser únicamente identificados, por esquema y nombre. Los
objetos en namespaces diferente pueden compartir el mismo nombre.
Estos el objeto teclea toda la parte mismo namespace:

■ Tablas ■ Vistas ■ Secuencias ■ sinónimos Privados

Así es imposible crear una vista con el mismo nombre que una comando al menos,
esto
es imposible si ellos están en el mismo esquema. Y una vez creado, las select de SQL
pueden dirigirse a una vista o un sinónimo como si fuera una comando. El hecho que las
tablas, las vistas, y los sinónimos privados comparten mismo namespace significa que
usted puede alistar varias capas de la abstracción entre lo que los usuarios ven y las
tablas actuales, que pueden ser inestimables tanto para la seguridad como para
simplificar el desarrollo de aplicaciones. Índices y coacciones cada uno tiene su propio
namespace. Así es posible para un índice tener el mismo nombre que una comando,
hasta dentro del mismo esquema.

EJERCICIO 11-1 Determina Que Objetos son Accesibles a Su Sesión


En este ejercicio, pregunte varias vistas de diccionario de datos como la HORA de
usuario para determinar que
los objetos están en el esquema de HORA y a que objetos en otros esquemas la HORA
tiene el acceso.

1. Conecte a la base de datos con SQL*Plus o Developer SQL como la HORA de


usuario 2. Determine cuantos objetos de cada tipo están en el esquema de HORA:
seleccione object_type, cuenta (*) del grupo user_objects por

object_type;

La vista de USER_OBJECTS pone en una lista todos los objetos poseídos por el
esquema a cual
la sesión corriente es conectada, en esta HORA de instancia.
456
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

3. Determine en cuantos objetos en la HORA total tiene permisos:


seleccione object_type, cuenta (*) del grupo all_objects por object_type;

La vista de ALL_OBJECTS pone en una lista todos los objetos a los cuales el usuario tiene alguna
clase
de acceso.
4. Determine quién posee la HORA de objetos puede ver:
seleccione al dueño distinto de all_objects;

OBJETIVO DE CERTIFICACIÓN 11.02

Examine la Estructura de Comando


Según el paradigma de base de datos relacional, una comando es un de dos dimensiones
filas de almacenaje de estructura. Una fila es una o varias columnas. Cada fila en la
comando tiene las mismas columnas, que definido por la estructura de la comando. La
base de datos de Oracle realmente permite variaciones en este modelo de dos
dimensiones. Algunas columnas pueden ser definidas como anidó tablas, que ellos
mismos tienen varias columnas. Otras columnas pueden ser de un tipo de datos
ilimitado, como un objeto grande binario, teóricamente terabytes grandes. También es
posible definir columnas como objetos. El objeto tendrá una estructura interna
(posiblemente basado en columnas) que no es visible como la parte de la comando.
La fase de análisis de sistemas del desarrollo de sistema lifecycle habrá modelado las
estructuras de datos tenían que almacenar la información del sistema en la tercera forma
normal, como descrito en el Capítulo 1. El resultado es un SET de tablas de dos
dimensiones, cada uno con una clave primaria y conectado el uno con el otro con claves
foráneas. La fase de diseño de sistema puede haber puesto en peligro esta estructura,
quizás por denormalizing las tablas o aprovechando capacidades específicas para el
Oracle tales que anidaron tablas. Pero el resultado final, por lo que el developer SQL
está preocupado, es un SET de tablas.
Cada comando existe como una definición en el diccionario de datos. En la creación,
la comando habrá sido adjudicada una cantidad limitada del espacio (conocido como un
grado) dentro de la base de datos. Esto puede ser pequeño, quizás sólo unos kilobytes o
megaoctetos. Como las filas son insertadas en la comando, este grado se llenará. Cuando
está lleno, la base de datos adjudicará (automáticamente) otro grado a la comando.
Como las filas son borradas, el espacio dentro de los grados adjudicados se hace
disponible para la reutilización. Aun si cada fila es borrada, los grados permanecen
asignados a la comando. Ellos sólo serán liberados y devueltos a la base de datos para el
uso en otra parte si la comando es dejada caer o truncada (como descrito en el Capítulo
10).

EJERCICIO 11-2 Investiga Estructuras de Comando


Liste en una lista los Tipos de datos Que están Disponibles para Columnas
457
En este ejercicio, pregunte varias vistas de diccionario de datos como la HORA de
usuario para determinar la estructura de una comando.

1. Conecte a la base de datos con SQL*Plus o Developer SQL como la HORA de


usuario 2. Determine los nombres y los tipos de las tablas que existen en el
esquema de HORA:
seleccione table_name, cluster_name, iot_type de user_tables;

Las tablas arracimadas y las tablas organizadas del índice (IOTs) son la
comando avanzada
estructuras. En el esquema de HORA, todas las tablas son tablas de montón
estándares excepto COUNTRIES que es un IOT.
3. Use el comando DESCRIBIR de mostrar la estructura de una comando:
describa REGIONS;

4. Recupere la información similar preguntando una vista de diccionario de datos:


seleccione column_name, data_type, nullable de user_tab_columns
donde table_name ='REGIONS';
OBJETIVO DE CERTIFICACIÓN 11.03

Liste en una lista los Tipos de datos Que están


Disponibles para Columnas
Creando tablas, cada columna debe ser adjudicada un tipo de datos, que determina
la naturaleza de los valores que pueden ser insertados en la columna. Estos tipos de
datos también son usados para especificar la naturaleza de los argumentos para
procedimientos PL/SQL y funciones. Seleccionando un tipo de datos, usted debe
considerar los datos que usted tiene que almacenar y las operaciones que usted querrá
realizar sobre ellos. El espacio también es una consideración: algunos tipos de datos son
la longitud fijada, tomando el mismo número de bytes pase lo que pase los datos están
realmente en ello; los otros son variables. Si una columna no es poblada, entonces el
Oracle no le dará ningún espacio en absoluto. Si usted más tarde actualiza la fila para
poblar la columna, entonces la fila se hará más grande, no importa si el tipo de datos es
la longitud fijada o la variable.
458
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Lo siguiente es los tipos de datos para datos alfanuméricos:

■ VARCHAR2 Datos de carácter de longitud variable, de 1 byte a 4 kilobyte.


Los datos
es almacenado en el SET de caracteres de base de datos.
■ NVARCHAR2 Como VARCHAR2, pero los datos es almacenado en la
alternativa
SET de caracteres de lenguaje nacional, uno de los SETs de caracteres de
Unicode permitidos.
■ TRABAJO POR HORAS Datos de carácter de longitud fija, de 1 byte a 2
kilobyte, en la base de datos
SET de caracteres. Si los datos no son la longitud de la columna, entonces será
rellenado de espacios.

Para la conformidad ISO/ANSI, usted puede especificar un tipo de datos


VARCHAR, pero cualquier columna de este tipo será automáticamente
convertida a VARCHAR2.

Lo siguiente es el tipo de datos para datos binarios:

■ MATERIA PRIMA Datos binarios de longitud variable, de 1 byte a 4


kilobyte. A diferencia del TRABAJO POR HORAS
y tipos de datos de VARCHAR2, los Datos iniciales no son convertidos por Red
de Oracle del SET de caracteres de la base de datos al SET de caracteres del
proceso de usuario en el ESCOGIDO o el otro camino en el INSERCIÓN.
Lo siguiente es los tipos de datos para datos numéricos, toda la longitud variable:

■ NÚMERO Los datos numéricos, para los cuales usted puede especificar la
precisión y la escala.
La precisión puede extenderse de a 1 a 38, la escala puede extenderse de84 a
127.
■ FLOTADOR Esto es un tipo de datos ANSI, número de punto flotante con
la precisión
de 126 binario (o 38 decimal). El oracle también proporciona BINARY_FLOAT
y BINARY_DOUBLE como alternativas.
■ NÚMERO ENTERO Equivalente a NÚMERO, con cero de escala.

Lo siguiente es los tipos de datos para fecha y datos de tiempo, toda la longitud fija:

■ FECHA Esto es el cero de longitud, si la columna es vacía, o 7 bytes. Todos


Los datos de FECHA incluyen el siglo, el año, el mes, el día, la hora, el minuto, y
segundo. La variedad válida es a partir del 1 de enero, 4712 A.C. al 31 de
diciembre, 9999 d. C.
■ TIMESTAMP Esto es el cero de longitud si la columna es vacía, o hasta 11
bytes,
según la precisión especificada. Similar HASTA AHORA, pero con la precisión
de hasta 9 decimal coloca para los segundos, 6 sitios en ausencia.
Liste en una lista los Tipos de datos Que están Disponibles para Columnas
459

■ TIMESTAMP CON TIMEZONE Como TIMESTAMP, pero los datos


es provisto de un registro guardado del huso horario al cual esto se refiere. La longitud puede ser
hasta 13 bytes, según la precisión. Este tipo de datos deja al Oracle determinar la diferencia entre dos
veces normalizándolos a la hora universal coordinada, aun si los tiempos son para husos horarios
diferentes.
■ TIMESTAMP CON TIMEZONE lOCAL Como TIMESTAMP, pero el
los datos son normalizados al huso horario de base de datos en guardar. Cuando recuperado, es
normalizado al huso horario del proceso de usuario que lo selecciona.
■ AÑO DE INTERVALO A MES Usado para registrar un período durante años y
meses entre dos FECHAS o TIMESTAMPs.
■ DÍA DE INTERVALO A SEGUNDO Usado para registrar un período en días y
segundos entre dos FECHAS o TIMESTAMPs.

Lo siguiente es los tipos de datos de objeto grandes:

■ CLOB Datos de carácter almacenados en el SET de caracteres de base de datos, talla con
eficacia
ilimitado: 4 gigabytes se multiplicaron por el tamaño de bloque de base de datos.
■ NCLOB Como CLOB, pero los datos es almacenado en el ciudadano alternativo
SET de caracteres de lenguaje, uno de los SETs de caracteres de Unicode permitidos.
■ GOTA Como CLOB, pero datos binarios que no se someterán al SET de caracteres
conversión por Red de Oracle.
■ BFILE Un localizador que señala a un archivo almacenado en el sistema operativo del
servidor de base de datos. La talla de los archivos es limitada con 4 gigabytes.
■ MUCHO TIEMPO Datos de carácter en el SET de caracteres de base de datos, hasta 2 gigabytes.
Todo el
la funcionalidad del LARGO (y más) es proporcionada por CLOB; LONGs no debería ser usado en
una base de datos moderna, y si su base de datos tiene cualquier columna de este tipo ellos deberían
ser convertidos a CLOB. Sólo puede haber una columna LARGA en una comando.
■ MATERIA PRIMA LARGAComo el LARGO, pero datos binarios que no serán convertidos por
Red de oracle. Cualquier columna CRUDA LARGA debería ser convertida a GOTAS.

Lo siguiente es el tipo de datos ROWID:

■ ROWID Un valor codificó en la base 64 que es el indicador a la posición de a


fila en una comando. Cifrado. Dentro de ello es la dirección física exacta. ROWID es un Oracle tipo
de datos patentado, no visible a menos que expresamente no seleccionado.
460
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Se esperará que todos los examinandos sepan sobre estos tipos de datos:
VARCHAR2, TRABAJO POR HORAS, NÚMERO, FECHA, TIMESTAMP, INTERVALO,
MATERIA PRIMA, MUCHO TIEMPO, MATERIA PRIMA LARGA, CLOB, GOTA, BFILE, y ROWID.
El conocimiento detallado también será necesario para VARCHAR2, NÚMERO, y FECHA.

El tipo de datos VARCHAR2 debe ser calificado con un número que indica la longitud máxima de la
columna. Si un valor es insertado en la columna que es menos que esto, no es un problema: el valor sólo
tomará tanto espacio como esto necesita. Si el valor es más largo que este máximo, el INSERCIÓN fallará
con un error. Si el valor es actualizado a un valor más largo o más corto, la longitud de la columna (y por
lo tanto la fila sí mismo) cambiará en consecuencia. Si no es entrado en absoluto o es actualizado al
NULO, entonces esto no tomará ningún espacio en absoluto.
El tipo de datos de NÚMERO puede ser opcionalmente calificado con una precisión y
una escala. La precisión establece el número máximo de dígitos en el número, y la escala
es cuantos de aquellos dígitos son a la derecha de la coma decimal. Si la escala es
negativa, esto tiene el efecto de reemplazar los últimos dígitos de cualquier número
insertado con ceros, que no cuentan hacia el número de dígitos especificados para la
precisión. Si el número de dígitos excede la precisión, habrá un error; si es dentro de la
precisión, pero fuera de la escala, doblarán sobre el número (o abajo) al valor más
cercano dentro de la escala.
El tipo de datos de FECHA siempre incluye el siglo, el año, el mes, el día, la hora, el
minuto, y segundo - aun si todos estos elementos no son especificados en el tiempo de
inserción. El año, el mes, y la fecha deben ser especificados; si las horas, los minutos, y
los segundos son omitidos ellos van la falta a la medianoche. La utilización de la
función de TRUNC en una fecha también tiene el efecto de poner las horas, minutos, y
segundos a la medianoche.
El oracle proporciona una variedad de funciones de reparto de tipo para convertir
entre tipos de datos y en algunas circunstancias hará el reparto de tipo automático. La
figura 11-2 ilustra la utilización tanto el manual como las técnicas de reparto de tipo
automáticas.
En el ejemplo precedente, el primer INSERCIÓN usa funciones de reparto de tipo
para convertir los datos de carácter entrados a los tipos de datos especificados para las
columnas de comando. El segundo INSERCIÓN intenta insertar cadenas de caracteres
en tres columnas, pero el inserción todavía tiene éxito porque el Oracle puede convertir
tipos de datos automáticamente si es necesario - pero sólo si el formato de los datos es
conveniente. Note que si el valor para la fecha ha sido entrado en cualquier formato
además de DD-MM-YY, como 'el 18-Nov-07', esto habría fallado.

No confíe en el reparto de tipo automático. Esto puede afectar el rendimiento y


no siempre puede trabajar. El entorno de Oracle es fuertemente tecleado, y los
programadores deberían respetar esto.
Liste en una lista los Tipos de datos Que están Disponibles para
Columnas
461

FIGURA 11-2

El uso del reparto de tipo


funciona y reparto de tipo
automático

EJERCICIO 11-3 Investiga los Tipos de datos en el esquema de HORA


En este ejercicio, averigüe que tipos de datos son usados en las tablas en el esquema de
HORA,
utilización de dos técnicas.

1. Conecte a la base de datos como la HORA de usuario con SQL*Plus o


Developer SQL. 2. Use el comando DESCRIBIR de mostrar los tipos de datos en
algunas tablas:
describa a EMPLOYEES;
describa DEPARTMENTS;

3. Use una pregunta contra una vista de diccionario de datos para mostrar lo que las
columnas arreglan
la comando de EMPLOYEES, como el comando DESCRIBIR iba:
escogido column_name,data_type,nullable,data_length,data_
la precisión, data_scale de user_tab_columns donde table_ llaman
='EMPLOYEES';
La vista USER_TAB_COLUMNS muestra el detalle de cada columna en cada
comando
en el esquema del usuario corriente.
462
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

OBJETIVO DE CERTIFICACIÓN 11.04

Cree una Comando Simple


Las tablas pueden ser almacenadas en la base de datos de varios modos. El más simple es
la comando de montón.
Un montón es filas de longitud variables en el pedido arbitrario. Puede haber un poco de
correlación entre el pedido en el cual las filas son entradas y el pedido en el cual ellos
son almacenados, pero esto es un asunto de la suerte. Las estructuras de comando más
avanzadas, tal como el siguiente, pueden imponer el pedido y la agrupación en las filas o
forzar una distribución arbitraria:

■ Índice organizó tablas Filas de tienda en el pedido de una llave de índice. ■


racimos de Índice Pueden las tablas denormalize en relaciones de niño paternal
de modo que
las filas relacionadas de la comando diferente son almacenadas juntos.
■ racimos de Picadillo Fuerce una distribución arbitraria de filas, que se
estropearán
cualquier pedido basado en la secuencia de entrada.
■ tablas Divididas Filas de tienda en estructuras físicas separadas, las particiones,
la asignación de filas según el valor de una columna.

La utilización de las estructuras de comando más avanzadas no tiene ningún efecto en


absoluto en SQL. Cada select SQL ejecutada contra tablas definidas con estas opciones
devolverá exactamente los mismos resultados como si las tablas fueran tablas de
montón estándares, entonces el uso de estos aspectos no afectará el código. Pero
mientras su uso es transparente a programadores, ellos realmente dan ventajas enormes en
el rendimiento.

La creación de Tablas con Especificaciones de Columna


Para crear una comando de montón estándar, use esta sintaxis:

CREE LA COMANDO [esquema]. comando [MONTÓN DE ORGANIZACIÓN] (columna


datatype [expresión POR DEFECTO] [columna datatype [expresión POR
DEFECTO] );
Como mínimo, especifique el nombre de tabla (será creado en su propio esquema, si
usted no especifica de alguien más) y al menos una columna con un tipo de datos. Hay muy
pocos developeres que alguna vez especifican el MONTÓN DE ORGANIZACIÓN, ya
que esto es la falta y es el estándar de industria SQL. La palabra clave POR DEFECTO
en una definición de columna le deja proporcionar una expresión que generará un valor
para la columna cuando una fila es insertada si un valor no es proporcionado por la
select de INSERCIÓN.

Considere esta select:


CREE LA COMANDO SCOTT.EMP (EMPNO NÚMERO (4), ENAME VARCHAR2 (10), FALTA DE FECHA DE
HIREDATE TRUNC (SYSDATE), SAL NÚMERO (7,2), FALTA NÚMERO (7,2) DE COMM 0.03);
Cree una Comando Simple
463
Esto creará una comando llamada EMP en el esquema de SCOTT. El uno o el otro usuario SCOTT
él mismo tiene que publicar la select (en cuyo instancia denominar el esquema realmente no sería
necesario), u otro usuario podría publicarlo si le han concedido el permiso de crear tablas en el esquema
de otro usuario. La toma de las columnas uno tras otro:

■ el EMPNO puede ser 4 dígitos mucho tiempo, sin sitios decimales. Si cualquier decimal es
incluido en una select de INSERCIÓN, doblarán sobre ellos (o abajo) al número entero más
cercano.
■ el ENAME puede almacenar cualquier carácter en absoluto, hasta diez de ellos. ■ el HIREDATE
aceptará cualquier fecha, opcionalmente con el tiempo, pero si un valor es
no a condición de que, la fecha de hoy sea entrada como en la medianoche.
■ SAL, querida para el sueldo del empleado, aceptará valores numéricos con
a 7 dígitos. Si cualquier dígito que más de 7 sean a la derecha de la coma decimal, ellos serán
acabados.
■ COMM (para el porcentaje de comisión) tiene un valor por defecto de 0.03, que va
sea entrado si la select de INSERCIÓN no incluye un valor para esta columna.

La creación siguiente de la comando, estas select insertan una fila y seleccionan el resultado:
SQL> insertan en scott.emp (empno, ename, sal) valores (1000, 'John', 1000.789); 1 fila
creada. SQL> seleccionan * de emp;
EMPNO ENAME HIREDATE SAL COMM
---------- ---------- --------- ---------- ----------
1000 John 19-NOV-07 1000.79 .03

Note que los valores para las columnas no mencionadas en la select de INSERCIÓN tienen
sido generado por las cláusulas POR DEFECTO. A condición de que aquellas cláusulas no habían sido
definidas en la definición de comando, las columnas habrían sido NULAS. También note que el
doblamiento del valor aseguró la SAL.
464
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas
La cláusula POR DEFECTO puede ser útil, pero es de la funcionalidad limitada.
Usted no puede usar una subpregunta para generar el valor por defecto: usted
sólo puede especificar valores literales o funciones.

La creación de Tablas de Subconsultas


Más bien que crear una comando de nada y luego insertar filas en ello (como en
la sección anterior), las tablas pueden ser creadas de otras tablas usando una subpregunta.
Esta técnica le deja crear la definición de comando y poblar la comando con filas con
sólo una select. Cualquier pregunta en absoluto puede ser usada como la fuente tanto
de la estructura de comando como de las filas. La sintaxis es como sigue:

CREE LA COMANDO [esquema]. comando COMO subpregunta;


Todas las preguntas devuelven un SET de dos dimensiones de filas; este resultado es
almacenado como el nuevo
comando. Un ejemplo simple de crear una comando con una subpregunta es:
cree la comando employees_copy como sentencia * de EMPLOYEES;

Esta select creará una comando EMPLOYEES_COPY, que es una copia exacta
de la comando de EMPLOYEES, idéntica tanto en la definición como en las filas esto
contiene. Cualquiera no nulo y coacciones de control en las columnas también será
aplicado a la nueva comando, pero cualquier clave primaria, las coacciones de clave
foránea o únicas no serán. (Hablan de coacciones en el artículo 11.05, "Explique Como
las Coacciones Son Creadas en el momento de la Creación de Comando.") Esto es
porque estos tres tipos de coacciones requieren índices que no podrían estar disponibles
o deseados.
Lo siguiente es un ejemplo más complejo:
cree la comando emp_dept como sentencia

los last_name ename, department_name dname, por ahí (sysdate - hire_date)


servicio de EMPLOYEES DEPARTMENTS de juntura naturales piden por dname,
ename;

Las filas en la nueva comando serán el resultado de afiliarse a las dos tablas de la
fuente,
con dos de las columnas seleccionadas que cambian sus nombres. La nueva columna de
SERVICIO será poblada con el resultado de la aritmética que computa el número de
días ya que el empleado fue contratado. Las filas serán insertadas en el pedido
especificado. Este pedido no será mantenido por DML subsecuente, pero, asumiendo los
datos de esquema de HORA estándares, la nueva comando parecerá a esto:
SQL> seleccionan * de emp_dept donde rownum <10;
ENAMEDNAME SERVICIO----------------------------------------Gietz
Contabilidad 4914

De Haan Kochhar Chen Faviet Popp Sciarra Urman Austin 9 filas seleccionado.
Finanzas de Finanzas de Finanzas de Finanzas Ejecutivas ejecutivas Lo financian
Cree una Comando Simple

5424 6634 3705 4844 2905 3703 3545 3800


465
La subpregunta puede incluir por supuesto un DONDE la cláusula para restringir las
filas insertó
en la nueva comando. Para crear una comando sin filas, use un DONDE la cláusula que
excluirá todas las filas:
cree la comando no_emps como sentencia * de EMPLOYEES donde 1=2;

EL DONDE la cláusula 1=2 nunca puede volver LA VERDAD ES QUE entonces la


estructura de comando será
creado listo para el uso, pero ningunas filas será insertado en el tiempo de creación.

El cambio de Definiciones de Comando después de Creación


Hay muchas modificaciones que pueden ser hechas a una comando después de la
creación. Aquellos que
afecte el almacenamiento físico caen al dominio del administrador de base de datos,
pero muchos cambios son puramente lógicos y serán realizados por los developeres
SQL. Lo siguiente es ejemplos (en su mayor parte que se explica por sí mismo):

■ Adición de columnas:
cambie comando los emp añaden (job_id número);

■ Modificación de columnas:
cambie comando los emp modifican (comm falta número (4,2) 0.05);

■ columnas que se Caen:


cambie la comando emp columna de gota comm;

■ marcar columnas como no usado:


cambie comando los emp ponen la columna no usada job_id;

■ Renombrar columnas:
cambie comando los emp renombran la columna hiredate al
reclutado;

■ marcar la comando como sólo para leer:


cambie comando los emp sólo leen;
466
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Todos estos cambios son comandos de DDL con el incorporado DESTINAN. Ellos
son por lo tanto no reversibles y fallarán si hay una transacción activa contra la
comando. Ellos también son prácticamente instantáneos a excepción de la caída de una
columna. La caída de una columna puede ser un ejercicio entretenido porque ya que
cada columna es dejada caer, cada fila debe ser reestructurada para borrar los datos de
la columna. El SET comando NO USADO, que hace columnas inexistentes por lo que
SQL está referido, a menudo es una mejor alternativa, seguida cuando conveniente de
CAMBIE COMANDO los tablename DEJAN CAER COLUMNAS NO USADAS;

que dejará caer todas las columnas no usadas en un pase por la comando. Marcar una
comando como sólo para leer causará errores para cualquiera intentó comandos de
DML.
Pero la comando todavía puede ser dejada caer. Esto puede ser desconcertante, pero es
absolutamente lógico cuando usted lo estudia detenidamente. Un comando de GOTA
realmente no afecta la comando: esto afecta las tablas en el diccionario de datos que
definen la comando, y éstos no son sólo para leer.

La caída y el Truncamiento de Tablas


El comando de COMANDO TRUNCADO fue descrito en el Capítulo 10: esto tiene el
efecto
de borrar cada fila de una comando, dejando la definición de comando intacta. La
COMANDO DE GOTA es más drástica en esto la definición de comando es borrada
también. La sintaxis es como sigue:

COMANDO DE GOTA [esquema]. tablename;


Si el esquema no es especificado, entonces la comando llamó tablename su

actualmente registrado
en el esquema será dejado caer.
Como con un TRUNCADO, SQL no producirá una advertencia antes de que la
comando sea dejada caer, y además, como con cualquier comando de DDL, esto
incluye DESTINAR. Una GOTA es por lo tanto absolutamente no reversible. Pero hay
algunas restricciones: si cualquier sesión (hasta su propio) tiene una transacción en el
progreso que incluye una fila en la comando, entonces la GOTA fallará, y también es
imposible dejar caer una comando que es mandada a en una coacción de clave foránea
definida para una otra comando. Esta comando (o la coacción) debe ser dejada caer
primero.

EJERCICIO 11-4 Crea Tablas


Cree una Comando Simple
467
En este ejercicio, use al Developer SQL para crear una comando de montón, insertar
algunas filas con una subpregunta, y modificar la comando. Haga algunas
modificaciones más con SQL*Plus, luego deje caer la comando.

1. Conecte a la base de datos como la HORA de usuario con el Developer SQL. 2.


El clic correcto la rama de Tablas del árbol de navegación, y hace clic en el New
Table. 3. Llame la nueva comando EMPS, y use el botón Add Column para
establecerlo como
en la ilustración siguiente:

4. Haga clic en la paleta DDL para ver si la select que ha sido construida.
Esto
debería parecer a esto:
CREE COMANDO EMPS
(
NÚMERO DE EMPNO, ENAME VARCHAR2 (25),
468
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

NÚMERO DE SUELDO, NÚMERO DE DEPTNO (4, 0)


);
Vuelva a la paleta de Comando (como en la ilustración precedente) y haga clic en el OK a
cree la comando.
5. Ejecute esta select:
el inserción en emps selecciona employee_id,last_name,salary,department_id
de EMPLOYEES;

y destine el inserción:
destine;

6. El clic correcto la comando EMPS en el navegante de Developer SQL, haga clic en el Column
y Añada. 7. Defina una nueva columna ALQUILADA, teclee la FECHA, como en la ilustración
siguiente
abajo; y haga clic en el Apply para crear la columna.

8. Conecte a la base de datos como la HORA con


SQL*Plus.
Explique Como Coacciones Son Creadas en el momento de Creación de
Comando

9. Defina una falta para la columna ALQUILADA en la comando EMPS:


cambie comando los emps modifican (falta alquilada sysdate);
469
10. Inserte una fila sin especificar un valor para el ALQUILADO y compruebe que el
nuevo
la fila realmente tiene una fecha ALQUILADA, pero que las otras filas no
hacen:
inserción en emps (empno, ename) valores (99, 'Newman');
escogido alquilado, la cuenta (1) de grupo emps por alquilado;

11. Comandoe dejando caer la nueva comando:


comando de gota emps;
OBJETIVO DE CERTIFICACIÓN 11.05

Explique Como Coacciones Son Creadas en el


momento de Creación de Comando
Las coacciones de comando son un medio por el cual la base de datos puede hacer
cumplir gobiernos comerciales, y
garantice que los datos se conforman con el modelo de relación de la entidad
determinado por el análisis de sistemas que define las estructuras de datos de aplicación.
Por ejemplo, los analistas comerciales de su organización pueden haber decidido que cada
cliente y cada factura deben ser únicamente identificables por el número, que ningunas
facturas pueden ser publicadas a un cliente antes de que aquel cliente haya sido creado, y
que cada factura debe tener una fecha válida y un valor mayor que el cero. Éstos iban
puesto en práctica creando coacciones de clave primaria en la columna
CUSTOMER_NUMBER de la comando de CLIENTES y la columna
INVOICE_NUMBER de la comando de FACTURAS, una coacción de clave foránea en
la comando de FACTURAS que se refiere a la comando de CLIENTES, un no -
coacción nula en la fecha columna de la comando de FACTURAS (el tipo de datos de
FECHA asegurará que esto cualquier fecha es válida automáticamente - esto no
aceptará fechas inválidas), y una coacción de control en la columna de CANTIDAD en
la comando de FACTURAS.
Cuando cualquier DML es ejecutado contra una comando con coacciones definidas,
si el DML viola una coacción, entonces la select entera será hecha rodar atrás
automáticamente. Recuerde que una select DML que afecta muchas filas podría tener
éxito parcialmente antes de que ella golpee un problema de coacción con una fila
particular. Si la select es la parte de una transacción de multiselect, entonces las select
que han tenido éxito ya permanecerán intactas, pero no comprometidas.
470
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Los Tipos de Coacciones


Los tipos de coacción apoyados por la base de datos de Oracle son como sigue:
ÚNICO NO las Coacciones de CONTROL DE CLAVE FORÁNEA DE CLAVE
PRIMARIA NULAS tienen nombres. Es la práctica buena para especificar los
nombres con un estándar
llamando la convención, pero si ellos no son explícitamente llamados, el Oracle generará
nombres.

Las Coacciones únicas Una coacción única denomina una columna (o la


combinación de columnas) para que el valor debe ser diferente para cada fila en la
comando. De ser basado en una columna sola, esto es conocido como la columna clave.
Si la coacción es formada de más de una columna (conocido como una coacción única
clave compuesta) las columnas no tienen que ser el mismo tipo de datos o son
adyacentes en la definición de comando.
Una singularidad de coacciones únicas es que es posible escribir un valor NULO en
la columna (s) clave; en efecto es posible tener cualquier número de filas con valores
NULOS en su columna (s) clave. Tan seleccionar filas en una columna clave garantizará
que sólo una fila es devuelta - a menos que usted busque el NULO, en cuyo instancia
todas las filas donde las columnas claves son NULAS serán devueltas.
Las coacciones únicas son hechas cumplir por un índice. Cuando una coacción única
es definida, el Oracle buscará un índice en la columna (s) clave, y si uno no existe será
creado. Entonces siempre que una fila sea insertada, el Oracle buscará el índice para ver
si los valores de las columnas claves están presentes ya: si ellos son, esto rechazará el
inserción. La estructura de estos índices (conocido como índices de B*Tree) no incluye
valores NULOS, que es por qué muchas filas con el NULO son permitidas: ellos
simplemente no existen en el índice. Mientras el primer objetivo del índice es hacer
cumplir la coacción, esto tiene un efecto secundario: el mejoramiento del rendimiento si
las columnas claves son usadas en el DONDE las cláusulas de las select SQL. Sin
embargo, seleccionar DONDE key_column es NULO no puede usar el índice porque
esto no incluye el NULLs y siempre causará por lo tanto una exploración de la comando
entera.

No Coacciones Nulas el no la coacción nula obliga valores a ser entrados en la


columna clave. No las coacciones nulas son definidas por columna: si el requisito
comercial es que un grupo de
Explique Como Coacciones Son Creadas en el momento de Creación de
Comando
471

las columnas deberían tener todos valores, usted no puede definir un no coacción nula
para el grupo entero, pero en cambio debe definir un no coacción nula para cada columna.
Cualquier tentativa de insertar una fila sin especificar valores para el no columnas
reprimidas nulas causa un error. Es posible evitar la necesidad de especificar un valor por la
inclusión de una cláusula POR DEFECTO en la columna creando la comando, como
hablado en la sección anterior en la creación de tablas.

Las Coacciones de Clave primaria La clave primaria son los medios de localizar
una fila sola en una comando. El paradigma de base de datos relacional incluye un
requisito que cada comando debiera tener una clave primaria, una columna (o la
combinación de columnas) que puede ser usado para distinguir cada fila. La base de datos
de Oracle se desvía del paradigma (como hacen algunas otras realizaciones RDBMS)
permitiendo tablas sin claves primarias.

Las tablas sin claves primarias son posibles, pero no una idea buena. Aun si las
reglas comerciales no requieren la capacidad de identificar cada fila, las claves
primarias a menudo son necesarias para el trabajo de mantenimiento.

La realización de una coacción de clave primaria es, en efecto, la unión de una coacción
única y un no coacción nula. Las columnas claves deben tener valores únicos, y ellos
pueden no ser nulos. Como con coacciones únicas, un índice debe existir en la columna (s)
reprimida. Si uno no existe ya, un índice será creado cuando la coacción es definida. Una
comando puede tener sólo una clave primaria. Trate de crear un segundo, y usted
conseguirá un error. Una comando puede tener, sin embargo, cualquier número de
coacciones únicas y no columnas nulas, tan si hay varias columnas que el
los analistas comerciales se han decidido debe ser
único y poblado, uno de éstos puede ser designado la
clave primaria y los demás hicieron único
Una coacción de clave primaria y no nulo. Un ejemplo podría ser una comando de
es una coacción única combinada con a EMPLOYEES, donde dirección de correo electrónico,
seguridad social no coacción nula. el número, y el número de empleado deberían ser todos
requerido y único.

Coacciones de Clave foránea


Una coacción de clave foránea es definida en la comando de niño en una relación de niño
paternal. La coacción denomina una columna (o columnas) en la comando de niño que
equivale a la columna (s) de clave primaria en la comando paternal. Las columnas no
tienen que tener
472
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

los mismos nombres, pero ellos deben ser del mismo tipo de datos. Las coacciones de
clave foránea definen la estructura relacional de la base de datos: las relaciones
"muchos a un" que conectan la comando, en su tercera forma normal.
Si la comando paternal tiene coacciones únicas así como (o en vez de) una coacción
de clave primaria, estas columnas pueden ser usadas como la base de coacciones de clave
foránea, aun si ellos son nullable.
Como los valores nulos de los permisos de una coacción única en la columna
reprimida, tan hace una coacción de clave foránea. Usted puede insertar filas en la
comando de niño con columnas de clave foránea nulas - aun si no hay una fila en la
comando paternal con un valor nulo. Esto crea filas huérfanas y puede causar la
confusión terrible. Por regla general, todas las columnas en una coacción única y todas
las columnas en una coacción de clave foránea son mejor definidas con no coacciones
nulas también; esto a menudo será un requisito comercial.
El intento de insertar una fila en la comando de niño para la cual no hay ninguna fila
correspondiente en la comando paternal dará un error. Del mismo modo, borrar una fila
en la comando paternal dará un error si hay ya las filas que se refieren a ello en la
comando de niño. Hay dos técnicas para cambiar este comportamiento. En primer lugar,
la coacción puede ser creada como EN BORRAR la CASCADA. Esto significa que si
una fila en la comando paternal es borrada, el Oracle buscará la comando de niño todas
las filas correspondientes y los borrará también. Esto pasará automáticamente. Una
técnica menos drástica debe crear la coacción como EN BORRAR el SET NULO. En
este instancia, si una fila en la comando paternal es borrada, el Oracle buscará la
comando de niño todas las filas correspondientes y pondrá las columnas de clave
foránea al nulo. Esto significa que las filas de niño serán quedadas huérfanas, pero
todavía existirán. Si las columnas en la comando de niño también tienen un no
coacción nula, entonces la eliminación de la comando paternal fallará.
No es posible dejar caer o truncar la comando paternal en una relación de clave
foránea, aun si no hay ningunas filas en la comando de niño. Esto todavía se aplica si el
EN BORRAR el SET NULO o EN cláusulas BORRAR de CASCADA fueron usados.
Una variación en la coacción de clave foránea es la coacción de clave foránea que se
autorefiere. Esto define una condición donde las filas de niño y padre existen en la misma
comando. Un ejemplo sería una comando de EMPLOYEES, que incluye una columna para el
gerente del empleado. El gerente es un empleado y debe existir en la comando. Tan si el
la clave primaria es la columna
EMPLOYEE_NUMBER, y el gerente es identificado
por una columna MANAGER_NUMBER, entonces
el
Una coacción de clave foránea en la coacción de clave foránea declarará que
el valor una comando de niño debe referirse a las columnas de la columna
MANAGER_NUMBER debe de una coacción única o de una primaria refiérase atrás a
EMPLOYEE_NUMBER válido. coacción clave en la comando paternal. Si un empleado es
su propio gerente, entonces la fila
se referiría a sí.
Explique Como Coacciones Son Creadas en el momento de Creación de
Comando

Compruebe Coacciones
473
Una coacción de control puede ser usada para hacer cumplir reglas simples, tal como que
el valor entrado en una columna debe ser dentro de una variedad de valores. La regla
debe ser una expresión que evaluará a VERDADERO o FALSO. Las reglas pueden
referirse a valores absolutos entrados como literales o a otras columnas en la misma fila y
pueden hacer el uso de algunas funciones. Tantas coacciones de control como usted
quiere pueden ser aplicadas a una columna, pero no es posible usar una subpregunta
para evaluar si un valor es permisible o usar funciones, como el SYSDATE.

El no la coacción nula es de hecho puesta en práctica como una coacción de


control preconfigurada.

Definición de Coacciones
Las coacciones pueden ser definidas creando una comando o añadidas a la comando
más tarde. Cuando
definiendo coacciones en el tiempo de creación de comando, la coacción puede ser
definida de acuerdo con la columna a la cual esto se refiere o al final de definición de
comando. Hay más flexibilidad a la utilización de la técnica última. Por ejemplo, es
imposible definir una coacción de clave foránea que se refiere a dos columnas, o una
coacción de control que se refiere a cualquier columna además de aquel reprimido si la
coacción es definida en la línea, pero ambos de éstos son posibles si la coacción es
definida al final de comando.

GUIÓN & SOLUCIÓN


Usted diseña estructuras de comando para una aplicación de recursos humanos. Los analistas comerciales han dicho
que cuando un empleado abandona la compañía, su registro de empleado debería ser movido a una comando de
archivo. ¿Pueden las coacciones ayudar? Las transacciones activas bloquean algunas select DDL contra tablas. Si
usted quiere añadir una coacción o renombrar una columna en una comando ocupada y encontrar que la select
siempre falla con "ORA-00054: ¿el recurso ocupado y adquiere con NOWAIT especificado o el intervalo de espera
expiró," qué puede usted hacer?

Probablemente no. Las coacciones son queridas para hacer cumplir reglas comerciales simples: esto puede ser
demasiado complicado. Puede estar bien necesario usar un gatillo de DML en la comando viva, que insertará
automáticamente una fila en la comando de archivo siempre que un empleado sea borrado de la comando viva. Los
gatillos pueden hacer el procesamiento mucho más complicado que una coacción. Quizás usted no debería hacer esta
clase de la cosa cuando la base de datos está en el uso, pero debería esperar hasta el próximo período del tiempo de
indisponibilidad previsto. Sin embargo, si usted realmente tiene que hacer el cambio de prisa, pregunte al
administrador de base de datos a quiesce la base de datos: esto es un proceso que congelará todas las sesiones de
usuario. Si usted es muy rápido, usted puede hacer el cambio entonces unquiesce la base de datos antes de que los
usuarios finales se quejen.
474
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

Para las coacciones que requieren un índice (las coacciones de clave primaria y
únicas), el índice será creado con la comando si la coacción es definida en el tiempo de
creación de comando.
Considere estas dos select de creación de comando (a que los números de línea han
sido añadidos):
12345678910 11 12 13 14 15 16

cree el departamento de comando (deptno coacción número (2,0) dept_deptno_pk coacción de clave
primaria dept_deptno_ck control (deptno entre 10 y 90), dname varchar2 (20) coacción dept_dname_nn
no nulo); cree la comando emp (empno coacción número (4,0) emp_empno_pk clave primaria, ename
varchar2 (20) coacción emp_ename_nn no nulo, mgr coacción número (4,0) emp_mgr_fk referencias emp
(empno), dob fecha,
fecha de hiredate, deptno coacción número (2,0) emp_deptno_fk departamento de referencias (deptno)
en borran el SET nulo, envían varchar2 por correo electrónico (30) coacción emp_email_uk único,
coacción emp_hiredate_ck control (hiredate> = dob + 365*16), coacción emp_email_ck control
((instr (e-mail,' ')> 0) y (instr (e-mail,'. ')> 0)));

La toma de estas select línea por línea:

1. La primera comando creada es el DEPARTAMENTO, querido para pelearse para


cada departamento. 2. DEPTNO no es numérico, 2 dígitos, ningunos decimales. Esto
es la clave primaria de la comando.
La coacción es llamada DEPT_DEPTNO_PK.
3. Una segunda coacción aplicada a DEPTNO es un control que lo limita con
números en
la variedad 10 a 90. La coacción es llamada DEPT_DEPTNO_CK.
4. La columna DNAME es carácteres de longitud variables, con una coacción
DEPT_
DNAME_NN que lo hace no nullable. 5. La segunda comando creada es EMP,
querido para pelearse para cada empleado. 6. EMPNO es numérico, hasta 4 dígitos
sin decimales. Coacción EMP_
EMPNO_PK marca esto como la clave primaria de la comando.
7. ENAME es carácteres de longitud variables, con una coacción
EMP_ENAME_NN
la fabricación de esto no nullable.
8. MGR es el gerente del empleado, que debe ser un empleado. El Cnel -
el umn es definido del mismo modo como la columna de clave primaria de la
comando de EMPNO. La coacción EMP_MGR_FK define esta columna como
autoreferirse
Explique Como Coacciones Son Creadas en el momento de Creación de Comando
475

la clave foránea, entonces cualquier valor entrado debe referirse a una fila ya existente en EMP
(aunque no sea reprimido no a ser nulo, tan puede ser dejado en blanco).
9. DOB, el cumpleaños del empleado, es una fecha y no reprimido.
10. HIREDATE es la fecha el empleado fue contratado y no es obligado. En
lo menos, todavía no.
11. DEPTNO es el departamento con el cual el empleado tiene que ver. El
la columna es definida del mismo modo como la columna de clave primaria de la comando de
DEPARTAMENTO de DEPTNO, y la coacción EMP_DEPTNO_FK hace cumplir una relación de
clave foránea: no es posible adjudicar a un empleado a un departamento que no existe. Aunque
esto sea nullable.
12. La coacción EMP_DEPTO_FK es definida adelante como EN BORRAR el SET
NULO, tan si la fila paternal en el DEPARTAMENTO es borrada, todas las filas de niño
correspondientes en EMPNO tendrán el SET de DEPTNO al NULO.
13. El E-MAIL es datos de carácter de longitud variables, y debe ser único de ser entrado
(aunque pueda ser dejado vacío).
14. Esto define una coacción de nivel de comando adicional EMP_HIREDATE_CK. El
la coacción comprueba el uso del trabajo de niño rechazando cualquier fila donde la fecha de
alquiler no es al menos 16 años más tarde que el cumpleaños. Esta coacción no podía ser
definida de acuerdo con HIREDATE, porque la sintaxis no permite referencias a otras columnas
a aquel punto.
15. Una coacción adicional EMP_EMAIL_CK es añadida a la columna de E-MAIL,
que realiza dos controles en la dirección de correo electrónico. El INSTR funciona la búsqueda
del en el símbolo (y carácteres de punto (.) (que siempre estará presente en una dirección de
correo electrónico válida); si esto no puede encontrar a ambos, la condición de control volverá
FALSO y la fila será rechazada.

Los ejemplos precedentes muestran varias posibilidades para definir coacciones en el tiempo de
creación de comando. Lo siguiente es posibilidades adicionales no cubiertas:

■ Control de la creación de índice para las coacciones de clave primaria y únicas ■ Definición si la
coacción debería ser comprobada en el tiempo de inserción (que es
en ausencia) o más tarde cuando la transacción es destinada
■ Select si la coacción está siendo de hecho hecha cumplir en absoluto (que es el
la falta) o es inhibido

Es posible crear tablas sin coacciones y luego añadirlos más tarde con un comando de COMANDO
CAMBIAR. El resultado final será el mismo, pero esta técnica
476
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

realmente hace el código menos mí documentación, ya que la definición de comando


completa será extendida entonces sobre varias select más bien que estar en uno.

EJERZA 11-5 Trabajo con


Coacciones
Use SQL*Plus o Developer SQL para crear tablas, añadir coacciones, y demostrar su
uso.

1. Conecte a la base de datos como la HORA de usuario 2. Cree una comando EMP
como una copia de algunas columnas de EMPLOYEES:
cree la comando emp como

seleccione employee_id empno, last_name ename, department_id deptno

de EMPLOYEES;

3. Cree un DEPARTAMENTO de comando como una copia de algunas columnas de


DEPARTMENTS:
cree el departamento de comando como

seleccione department_id deptno, department_name dname de DEPARTMENTS;

4. Use DESCRIBEN para describir la estructura de las nuevas tablas. Note esto
el no la coacción nula en ENAME y DNAME ha sido transmitida de las tablas
de la fuente.
5. Añada una coacción de clave primaria a EMP y al DEPARTAMENTO y una
coacción de clave foránea
conexión de las tablas:
cambie comando los emp añaden la coacción emp_pk clave primaria
(empno);
cambie departamento de comando añaden la coacción dept_pk clave
primaria (deptno); cambie comando los emp añaden la coacción

la clave foránea de dept_fk (deptno) departamento de referencias en


borra el SET nulo;

La última coacción precedente no especifica que columna del DEPARTAMENTO a


referencia; esta falta de voluntad a la columna de clave primaria.
6. Demuestre la eficacia de las coacciones tratando de insertar datos esto
los violará:
inserción en valores de departamento (10, 'Nuevo Departamento');
inserción en valores de emp (9999, 'Nuevo emp', 99); departamento
de comando truncado;

DENTRO DEL EXAMEN


Resumen de certificación
477

La utilización de Select de DDL para Crear y Manejar


Tablas
La select de COMANDO CREAR en efecto puede ser muy compleja. El volumen de Referencia SQL de
la Base de datos de Oracle 11g el SET de documentación dedica 69 páginas a ello, con más 85 páginas
para CAMBIAN LA COMANDO (por el contraste, la COMANDO DE GOTA toma sólo cuatro páginas).
Para examen
objetivos, sólo el conocimiento de la estructura de comando más simple - la comando de montón - se
requiere, con el conocimiento de los tipos de datos más básicos. In - derstanding, definición, y la
utilización de coacciones es necesaria, pero no los métodos para controlar cuando (o si) ellos son
hechos cumplir.

7. Comandoe dejando caer las tablas. Note que esto debe ser hecho en el pedido
correcto:
comando de gota emp;
departamento de comando de gota;

RESUMEN DE CERTIFICACIÓN
Las tablas son estructuras de dos dimensiones que consisten en filas de columnas de datos
definidos
tipos. La base de datos de Oracle realmente permite tipos de datos definidos por el
usuario, pero en su mayor parte usted usará los tipos de datos incorporados.
Las tablas pueden ser creadas desde el principio: definición de cada columna y luego
insertar filas. O bien, las tablas pueden ser creadas usando salida de una pregunta. Esta
técnica última puede definir la comando e insertar filas en un comando, pero hay
limitaciones: será necesario añadir clave primaria y coacciones únicas más tarde,
mientras que ellos pueden ser definidos en el tiempo de creación de comando usando la
antigua técnica.
Para asistir con hacer cumplir reglas comerciales, las coacciones pueden ser definidas
para columnas. Éstos mantendrán la integridad de datos haciéndolo absolutamente
imposible de insertar datos que rompen las reglas.
478
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas


TALADRADORA DE DOS MINUTOS
Clasifique los Objetos de Base de datos Principales
❑ Algunos objetos contienen datos, principalmente tablas e índices. los  objetos de
Programmatic, como procedimientos almacenados y funciones son ejecutables
código.
Los  Vistas y sinónimos son objetos que dan el acceso a otros objetos.

Examine la Estructura de Comando


❑ Tablas son estructuras de dos dimensiones, almacenando filas definidas con columnas. ❑
Tablas existen dentro de un esquema. El nombre de esquema con el nombre de tabla hace
un identificador único.

Liste en una lista los Tipos de datos que están Disponibles para Columnas
❑ Los tipos de datos de carácter más comunes son VARCHAR2, NÚMERO,
y FECHA.
❑ hay muchos otros tipos de datos.

Cree una Comando Simple


❑ Tablas no puede ser creado de nada o con una subpregunta. ❑ Después de la creación, las
definiciones de columna pueden ser añadidas, dejadas caer, o modificadas. ❑ La definición de
comando puede incluir valores por defecto para columnas.

Explique Como Coacciones Son Creadas en el momento de Creación de


Comando
❑ Coacciones puede ser definido en el tiempo de creación de comando o añadido más tarde. ❑
Una coacción puede ser el inline definido con su columna o al nivel de comando después
las columnas. ❑ coacciones de nivel de la Comando puede ser más complejo que aquellos
el inline definido. ❑ Una comando sólo puede tener una clave primaria, pero puede tener
muchas llaves únicas. ❑ Una clave primaria es funcionalmente equivalente al único más no
nulo. ❑ Una coacción única no para la introducción de muchos valores nulos. ❑ coacciones de
Clave foránea definen las relaciones entre tablas.

MÍ PRUEBA
Mí Prueba
479
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.

Clasifique los Objetos de Base de datos Principales


1. ¿Si una comando es creada sin especificar un esquema, en cuál esquema será? (Elija el mejor
respuesta.) A. Será una comando quedada huérfana, sin un esquema. B. La creación fallará. C.
Estará en el esquema SYS. D. Estará en el esquema del usuario que lo crea. E. Estará en el
esquema PÚBLICO.
2. Varios tipos de objeto comparten mismo namespace, y por lo tanto no pueden tener el mismo
nombre en
el mismo esquema. ¿Cuál de los tipos de objeto siguientes no está en mismo namespace que los
demás? (Elija la mejor respuesta.) A. El índice B. PL/SQL almacenó el procedimiento C.
Synonym D. Table E. Ver
3. ¿Cuál de estas select fallará porque el nombre de tabla no es legal? (Elija dos respuestas.)
A. cree la comando "SENTENCIA" (col1 fecha); B. crean la comando "minúscula" (col1 fecha); C.
crean la tabla number1 (col1 fecha); D. crean la tabla 1number (col1 fecha); E. crean la
actualización de comando (col1 fecha);

Examine la Estructura de Comando


4. ¿Qué distingue características de tablas de montón? (Elija dos respuestas.)
A. Un montón puede almacenar filas de longitud variables. B. Más de una comando puede
almacenar filas en un montón solo. C. Rows en un montón está en el pedido arbitrario.
480
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

D. No pueden poner índice a tablas de montón. E. Tables en un montón no tiene una clave
primaria.

Liste en una lista los Tipos de datos que están Disponibles para Columnas
5. ¿Cuáles de los tipos de datos siguientes es la longitud variable? (Elija todas las respuestas
correctas.)
A. GOTA B. TRABAJO POR HORAS C. MUCHO TIEMPO D. EL NÚMERO E. MATERIA
PRIMA F. VARCHAR2
6. Estudie estas select:
cree la tabla tab1 (c1 fecha número (1), c2);
cambie la sesión puso nls_date_format ='dd-mm-yy'; inserción en valores de tab1
(1.1, '31-01-07');
¿Tendrá éxito el inserción? (Elija la mejor respuesta)
A. El inserción fallará porque los 1.1 son demasiado largos. B. El inserción fallará porque 'el 31-01-
07' es una cuerda, no una fecha. C. El inserción fallará por ambos motivos A y B. D. al cual el
inserción sucederá.
7. ¿Cuál de lo siguiente no es apoyado por el Oracle como un tipo de datos interno? (Elija el mejor
respuesta.) A. TRABAJO POR HORAS B. FLOTADOR C. NÚMERO ENTERO D. CUERDA

Cree una Comando Simple


8. Considere esta select:
cree la tabla t1 como sentencia * de REGIONS donde 1=2;

¿Cuál será el resultado? (Elija la mejor respuesta.)

A. B.

Habrá un error debido a la condición imposible. Ninguna comando será creada porque las vueltas de
condición FALSAS.
Mí Prueba
481
C. La tabla T1 será creada pero ningunas filas insertadas porque las vueltas de condición
FALSAS. D. La tabla T1 será creada y cada fila en REGIONS insertada porque la
condición
devuelve un NULO como un filtro de fila.
9. Cuando una comando es creada con una select, como lo siguiente:

cree la comando newtab como sentencia * de la paleta;


¿habrá alguna coacción en la nueva comando? (Elija la mejor respuesta.)
A. La nueva comando no tendrá ningunas coacciones, porque las coacciones no son copiadas
creando
tablas con una subpregunta. B. Todas las coacciones en la PALETA serán copiadas a
NEWTAB. C. Primary key y las coacciones únicas serán copiados, pero no control y no
coacciones nulas. D. Check y no coacciones nulas será copiado, pero no clave primaria o única.
E. Todas las coacciones serán copiadas, excepto coacciones de clave foránea.

Explique Como Coacciones Son Creadas en el momento de Creación de


Comando
10. ¿Qué tipos de la coacción requieren un índice? (Elija todo que se aplican.)
A. COMPRUEBE B. NO C NULO. CLAVE PRIMARIA D. ÚNICO
11. Una transacción consiste en dos select. El primer tiene éxito, pero el segundo (que actualiza
varias filas) falla parcialmente por debido a una violación de coacción. ¿Qué pasará? (Elija la mejor
respuesta.) A. La transacción entera será hecha rodar atrás. B. La segunda select será hecha rodar
atrás completamente, y el primer será destinado. C. La segunda select será hecha rodar atrás
completamente, y el primer permanecerá no comprometido. D. Sólo una actualización que causó la
violación será hecha rodar atrás; todo lo demás será
comprometido.
E. Sólo una actualización que causó la violación será hecha rodar atrás; todo lo demás va
permanezca no comprometido.
482
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

PREGUNTA DE LABORATORIO
Considere este análisis simple de un sistema de facturación telefónico:
Un suscriptor es identificado por un número de cliente y también tiene un nombre y posiblemente uno o
varios teléfonos.
Un teléfono es identificado por su número, que debe ser un número entero de 7 dígitos que comienza
con 2 o 3, y también tiene hacer, una fecha de activación, y una bandera para si es activo. Los teléfonos
inactivos no son adjudicados a un suscriptor; los teléfonos activos son.
Para cada llamada, es necesario registrar el tiempo que esto comenzó y el tiempo que esto terminó.
Cree tablas con coacciones y faltas que pueden ser usadas para poner en práctica este sistema.

MÍ PRUEBAN RESPUESTAS
Clasifique los Objetos de Base de datos Principales
Mí Respuestas de Prueba
483
1. ® D. El esquema va la falta al usuario corriente. ✓
® A, B, C, E. A es incorrecto porque todas las tablas deben estar en un esquema. El B es
incorrecto porque el ˚
la creación tendrá éxito. El C es incorrecto porque el esquema SYS no es un esquema por defecto.
El E es incorrecto porque mientras hay un PÚBLICO de usuario teórico, él no tiene un esquema
en absoluto.
2. ® A. Indexes tienen su propio namespace. ✓
® B, C, D, E. Los procedimientos almacenados, los sinónimos, las tablas, y las vistas existen en
mismo namespace. ˚
3. ® D, E. El D viola la regla que un nombre de tabla debe comenzar con una carta, y E viola la regla

que un nombre de tabla no pueda ser una palabra reservada. Ambas reglas pueden ser evitadas usando
dobles citas. ® A, B, C. Éstos son incorrectos porque todos tendrán éxito (aunque A y B no sean
exactamente prudentes). ˚

Examine la Estructura de Comando


4. ® A, C. Un montón es una comando de filas de longitud variables en el pedido arbitrario. ✓
® B, D, E. El B es incorrecto porque una comando de montón sólo puede ser una comando. Los
D y E son incorrectos porque ˚
una comando de montón puede (y por lo general va) tener índices y una clave primaria.

Liste en una lista los Tipos de datos que están Disponibles para Columnas
5. ® A, C, D, E, F. Todos éstos son tipos de datos de longitud variables. ✓
® B. Las columnas de TRABAJO POR HORAS son la longitud fijada. ˚
6. ® D. Doblarán sobre el número a 1 dígito, y la cuerda dará el papel de una fecha. ✓
® A, B, C. El doblamiento automático y el lanzamiento de tipo corregirán los "errores", aunque
idealmente ellos ˚
no ocurriría.
7. ® D. La CUERDA no es un tipo de datos interno. ✓
® A, B, C. TRABAJO POR HORAS, FLOTADOR, y NÚMERO ENTERO son todos los tipos de
datos internos, aunque no como extensamente ˚
usado como algunos otros.

Cree una Comando Simple


8. ® C. La condición sólo se aplica a las filas seleccionadas para el inserción, no a la creación de
comando. ✓
® A, B, D. A es incorrecto porque la select es sintácticamente correcta. El B es incorrecto porque
el ˚
la condición no se aplica al DDL, sólo al DML. El D es incorrecto porque la condición excluirá
todas las filas de la selección.
484
Capítulo 11:
La utilización de Select de DDL para Crear y Manejar Tablas

9. ® D. Check y no coacciones nulas no son dependientes de ninguna estructura además de la


comando ✓
a que ellos se aplican y tan pueden ser sin peligro copiados a una nueva comando.
® A, B, C, E. A es incorrecto porque no nulo y coacción de control será aplicado a nuevo ˚
comando. Los B, C, y E son incorrectos porque estas coacciones necesitan otros objetos (índices
o una comando paternal) y no copiadas también.

Explique Como Coacciones Son Creadas en el momento de Creación de


Comando
10. ® C, D. Las coacciones de clave primaria y únicas son hechas cumplir con
índices. ✓
® A, B. Check y no coacciones nulas no confía en índices. ˚
11. ® C. Una violación de coacción hará retroceder un rollo de la select corriente, pero nada más. ✓
® A, B, D, E. A es incorrecto porque todas las select que han tenido éxito permanecen intactas. B
yD˚
son incorrectos porque no hay destinan de algo hasta que sea expresamente solicitado. El E es
incorrecto porque la select entera será hecha rodar atrás, no sólo la fila fracasada.

RESPUESTA DE LABORATORIO
Una solución posible:

■ La comando de SUSCRIPTORES:
cree a suscriptores de comando
(número de identificación (4,0) coacción sub_id_pk clave primaria,
coacción de nombre varchar2 (20) sub_name_nn no nulo);
■ La comando de TELÉFONOS:
cree teléfonos de comando
(telno coacción número (7,0) tel_telno_pk coacción de clave primaria
tel_telno_ck control (telno entre 1000000 y 9999999), falta de fecha
activada sysdate, varchar2 activo (1) coacción tel_active_nn no coacción
nula tel_active_ck control (='Y activo' o ='N activo'), coacción número
(4,0) de suscriptor tel_sub_fk suscriptores de referencias, coacción
tel_active_yn control ((='Y activo' y el suscriptor no son nulos) o (='N
activo' y el suscriptor son nulos)));
Respuesta de laboratorio
485

Esta comando tiene una coacción en la columna ACTIVA que sólo permitirá Y o N, según si hay
un valor en la columna de SUSCRIPTOR. Esta coacción es demasiado compleja para definir de
acuerdo con la columna, porque esto se refiere a otras columnas. El SUSCRIPTOR, si no nulo,
debe emparejar una fila en SUSCRIPTORES.
■ La comando de LLAMADAS:
cree llamadas de comando
(telno coacción número (7,0) calls_telno_fk teléfonos de referencias, starttime
coacción de fecha calls_start_nn no nulo, endtime coacción de fecha calls_end_nn
no nulo, coacción calls_pk clave primaria (telno, starttime), coacción
calls_endtime_ck control (endtime> starttime));
Dos coacciones son definidas al nivel de comando, no el nivel de columna. La clave primaria no
puede ser
definido de acuerdo con una columna porque está basado en dos columnas: un teléfono puede hacer
muchas llamadas, pero no dos que comienzan al mismo tiempo (al menos, no con la tecnología
corriente). La coacción final compara el principio y los fines del tiempo de la llamada y tan no puede
ser definida en la línea.
Esta página intencionadamente se dejó en blanco

12
Creación de Otros
Objetos de
Esquema

OBJETIVOS DE CERTIFICACIÓN

12.01
Cree Vistas Simples y Complejas
12.05
Cree y Mantenga Índices
12.02
Recupere Datos de Vistas

Taladradora de dos minutos
12.03
Cree Sinónimos Privados y Públicos
Q&A
Mí Prueba
12.04
Cree, Mantenga, y Use Secuencias
Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

488
Capítulo 12:
Creación de Otros Objetos de Esquema

Hasta ahora , la mayor parte de las

select SQL usadas en este libro se han dirigido a tablas. Esto parece razonable: los comandos de SQL

se relacionan con datos, y los datos son almacenados en tablas. En la práctica, la mayor parte de

usuarios nunca publican SQL que se dirige a tablas: ellos publican SQL que se dirige a vistas o

sinónimos. Las vistas y los sinónimos no almacenan datos; ellos proporcionan una capa de
abstracción
entre los usuarios y los datos. Como tablas, las vistas, y los sinónimos comparten mismo namespace, los
usuarios nunca tienen que ser conscientes de que ellos se dirigen.

Las secuencias son un mecanismo para publicar números únicos. En muchas bases de
datos, los valores de clave primaria son definidos como un número único. Una secuencia
puede publicar tales números a petición, sin programadores que tienen que preocuparse
de si ellos realmente son únicos. La estructura de una secuencia significa que cientos de
números pueden ser, si es necesario, publicados cada segundo sin cualquier cuestión de
rendimiento.
Se dice a veces que la dirección de índice miente en el dominio de administración de
base de datos, no el dominio del developer SQL. Por esta razón, el tratamiento aquí es
muy breve. Pero si la dirección de índice es la parte del trabajo del developer, todos los
developeres deben entender el objetivo y diseño de índices. En muchos instancias la
estrategia de indexación es crucial para el rendimiento adecuado: acierte en ello, y las
ventajas serán enormes; consígalo incorrecto, y los resultados pueden ser desastrosos. El
uso de índices es transparente, pero si los programadores son conscientes de ellos ellos
pueden asegurar que su código será capaz de hacer el mejor uso de que índices están
disponibles y aconsejan sobre que índices deberían ser creados.

OBJETIVO DE CERTIFICACIÓN 12.01

Cree Vistas Simples y Complejas


Al usuario, una vista parece a una comando: una estructura de dos dimensiones de filas de
las columnas, contra las cuales el usuario puede ejecutar select SENTENCIAS y DML.
El programador sabe la verdad: una vista es sólo una select SENTENCIA. Cualquier
select SENTENCIA devuelve un SET de dos dimensiones de filas. Si la select
SENTENCIA es guardada como una vista, entonces siempre que los usuarios pregunten
o actualicen filas en la vista (bajo la impresión que es la comando), las carreras de
select, y el resultado es presentado a usuarios como si fuera una comando. La select
SENTENCIA en la cual una vista está basada puede ser algo. Esto puede afiliarse a
tablas, realizar agregaciones, o hacer clases; absolutamente algo que sea legal en el
comando ESCOGIDO puede ser usado. Sin embargo, si la vista es compleja,
Cree Vistas Simples y Complejas
489

entonces las select sólo SENTENCIAS pueden ser ejecutadas contra ello. Una vista
simple es el que que puede ser dirigido por select DML así como ESCOGIDO. Como
podría ser esperado, las vistas simples están basadas en select SENTENCIAS
relativamente simples; las vistas complejas están basadas en select más complicadas.

Las vistas comparten el mismo sintácticamente correcto. Pero


operaciones de DML namespace como tablas: en todas partes esto a no siempre tendrá
éxito. el tablename puede ser usado, un viewname también es

¿Por qué Vistas de Uso en Absoluto?


No es por lo general una idea buena de dejar a usuarios finales soltar en tablas. Los
motivos posibles incluyen:

■ Seguridad. ■ Simplificación de usuario SQL. ■ Prevención de error. ■


Fabricación de datos comprensibles. La comando y los nombres de columna a
menudo son largos y
bastante sin sentido. La vista y sus columnas pueden ser mucho más obvias. ■
Rendimiento.

Los ejemplos de vistas con cada uno de estos objetivos siguen.

Las vistas para Hacer cumplir la Seguridad que puede ser que los usuarios
sólo deberían ver ciertas filas o columnas de una comando. Hay varios modos de hacer
cumplir esto, pero una vista a menudo es la más simple. Considere la comando
HR.EMPLOYEES. Esto incluye detalles personales que no deberían ser visibles para
proveer de personal fuera del departamento de personal. Pero el personal de finanzas
tendrá que ser capaz de ver la información de presupuesto. Esta vista va depersonalize
los datos:
cree la hora emp_fin de vista como sentencia
hire_date,job_id,salary,commission_pct,department_id de hr.employees;

Note el uso de calificadores de esquema para la comando como la fuente de los datos
(a menudo
referido como la base o la comando de detalle) y la vista: las vistas son objetos de
esquema y pueden dibujar sus datos de tablas en el mismo esquema o en otros
esquemas. Si el esquema no es especificado, estará por supuesto en el esquema
corriente.
490
Capítulo 12:
Creación de Otros Objetos de Esquema

El personal de finanzas puede ser dado entonces el permiso de ver la vista, pero no
la comando y puede publicar select, como esto:
seleccione * de emp_fin donde department_id=50;

Ellos sólo verán las cinco columnas que arreglan la vista, no el restante
columnas de EMPLOYEES con la información personal. La vista puede ser afiliada a
otras tablas o agregada como si fuera una comando:
seleccione department_name, sume (sueldo) de DEPARTMENTS la juntura natural
emp_fin
grupo por department_name;

Un SET bien construido de vistas puede poner en práctica una estructura de


seguridad entera dentro de
la base de datos, dando el acceso de usuarios a datos que ellos tienen que ver ocultando
datos que ellos no tienen que ver.

Las vistas para Simplificar al Usuario SQL será mucho más fácil para
usuarios preguntar datos si el trabajo duro (como junturas o agregaciones) es hecho para
ellos por el código que define la vista. En el último ejemplo, el usuario tuvo que escribir
el código que se afilió a la vista de EMP_FIN a la comando de DEPARTMENTS y
sumó los sueldos por departamento. Esto podría ser todo hecho en una vista:
cree la vista dept_sal como
seleccione d.department_name, sume (e.salary) de DEPARTMENTS d
abandonó a EMPLOYEES de juntura externos e en d.department_
id=e.department_id grupo por la comando de department_name por
department_name;
Entonces los usuarios pueden seleccionar de DEPT_SAL sin tener que saber algo
sobre junturas, o hasta como clasificar los resultados:
seleccione * de dept_sal;

En particular, ellos no tienen que saber como asegurarse que todos los
DEPARTMENTS
son puestos en una lista, hasta aquellos sin EMPLOYEES. El ejemplo en la sección
anterior habría perdido éstos.

Las vistas para Prevenir Errores es imposible impedir a usuarios hacer


errores, pero vistas bien construidas pueden prevenir algunos errores de provenir de una
carencia del entendimiento de como los datos deberían ser interpretados. La sección
anterior ya introdujo este concepto construyendo una vista que pondrá todos los
DEPARTMENTS en una lista, independientemente de si ellos actualmente hacen
adjudicar al personal a ellos.
Cree Vistas Simples y Complejas
491

Una vista puede ayudar a presentar datos en un camino que es inequívoco. Por ejemplo, muchas
aplicaciones nunca realmente borran filas. Considere esta comando:
cree la comando emp (empno coacción de número emp_empno_pk clave primaria,
ename varchar2 (10), deptno número, varchar2 activo (1) 'Y' por defecto);
La columna ACTIVA es una bandera que indica que el empleado es empleado actualmente
y va la falta a 'Y' cuando una fila es insertada. Cuando un usuario, por el interface de usuario, "borra" a un
empleado, la select SQL subyacente será una actualización que se pone ACTIVO a 'N'. Si usuarios que no
son conscientes de esta pregunta la comando, ellos pueden interpretar mal con severidad los resultados. A
menudo será mejor darles el acceso a una vista:
cree la vista current_staff como sentencia * de emp donde activo ='Y';

Las preguntas dirigidas a esta vista no pueden ver posiblemente a EMPLOYEES "borrados".

Las vistas para Hacer Datos Comprensibles Las estructuras de datos en una base de datos
serán tablas normalizadas. No es razonable esperar que usuarios entiendan estructuras normalizadas. Para
tomar un ejemplo de la suite de Negocio electrónico de Oracle, un "cliente" en el módulo de Cuentas por
cobrar es de hecho una entidad que consiste en la información distribuida a través de las tablas
HZ_PARTIES, HZ_PARTY_SITES, HZ_CUST_ACCTS_ALL, y muchos más. Todas estas tablas son
conectadas por relaciones de clave primaria a clave foránea, pero éstos no son definidos en ningún
identificador visible a usuarios (como un número de cliente): ellos están basados en columnas los
usuarios nunca ven que tienen valores generados internamente de secuencias. Las formas y los informes
solían recuperar la información de cliente nunca se dirigen a estas tablas directamente; todos ellos
trabajan a través de vistas.
Así como presentando datos a usuarios en una forma comprensible, el uso de vistas para proporcionar
una capa de abstracción entre los objetos vistos por usuarios y los objetos almacenados dentro de la base
de datos puede ser inestimable para el trabajo de mantenimiento. Se hace posible replantear las
estructuras de datos sin necesidad tener de codificar de nuevo la aplicación. Si las tablas son cambiadas,
entonces el ajuste de las definiciones de vista puede hacer cualquier cambio en el SQL y código de
PL/SQL innecesario. Esto puede ser una técnica potente para hacer aplicaciones portátiles a través de bases
de datos diferentes.

Las vistas para el Rendimiento La select SENTENCIA detrás de una vista puede ser optimizada
por programadores, de modo que los usuarios no tengan que preocuparse de la afinación del código.
Pueden haber muchas posibilidades para conseguir el mismo resultado, pero algunas técnicas pueden ser
mucho más lentas que otros. Por ejemplo, afiliándose a dos tablas hay por lo general una opción entre el
bucle anidado
492
Capítulo 12:
Creación de Otros Objetos de Esquema

únase y la juntura de picadillo. Una juntura de bucle anidada usa un índice para ponerse
a filas individuales; una juntura de picadillo lee la comando entera en la memoria. La
opción entre los dos será dependiente del estado de los datos y los recursos de hardware
disponibles.
Teóricamente, uno siempre puede confiar en el Oracle optimizer para calcular la
mejor manera de ejecutar una select SQL, pero hay instancias donde lo consigue
incorrecto. Si los programadores saben qué técnica es la mejor, ellos pueden instruir el
optimizer. Este ejemplo fuerza el uso de la técnica de picadillo:
cree la vista dept_emp como
seleccione / * + USE_HASH (DEPARTMENTS de EMPLOYEES) */department_name,
last_name de DEPARTMENTS EMPLOYEES de juntura naturales;

Siempre que los usuarios pregunten la vista de DEPT_EMP, la juntura será realizada
por
escanear las tablas de detalle en memoria. Los usuarios no tienen que saber la sintaxis
para forzar el uso de este método de juntura. Usted no tiene que saberlo, tampoco: esto
está más allá del alcance del OCP SQL el examen, pero el concepto de la afinación con
el diseño de vista debería ser conocido.

Vistas simples y Complejas


Con objetivos prácticos, la comandoación de una vista como simple o complejo está
relacionada con
si las select DML pueden ser ejecutadas contra ello: las vistas simples pueden aceptar
select DML, las vistas complejas no pueden. Las definiciones estrictas son como sigue:

■ Una vista simple dibuja datos de una comando de detalle, no usa ningunas
funciones, y hace
ninguna agregación. ■ Una vista compleja puede afiliarse a tablas de detalle, usar
funciones, y realizar agregaciones.

La aplicación de estas definiciones muestra que de las cuatro vistas usadas como
ejemplos en
la sección anterior, el primer y el tercer son simples y los segundos y cuarto son
complejos.
A menudo no es posible ejecutar INSERCIÓN, ACTUALIZACIÓN, o BORRAR
manda contra una vista compleja. Trazar un mapa de las filas en la vista atrás a las filas
en la comando (s) de detalle no siempre puede ser establecido en una base de uno a uno,
que es necesaria para operaciones DML. Es por lo general posible ejecutar DML contra
una vista simple, pero no siempre. Por ejemplo, si la vista no incluye una columna que
tiene un NO coacción NULA, luego un INSERCIÓN a través de la vista no puede tener
éxito (a menos que la columna tenga un valor por defecto). Esto puede producir un
efecto desconcertante porque el mensaje de error se referirá a una comando y una
columna que no son mencionados en la select, como demostrado en el primer ejemplo
en la Figura 12-1.
Cree Vistas Simples y Complejas
493

FIGURA 12-1

DML contra vistas simples y


complejas

La primera vista en la cifra, RNAME_V, realmente se conforma con la definición de


una vista simple, pero un INSERCIÓN no puede ser realizado por ello porque esto pierde
una columna obligatoria. La segunda vista, RUPPERNAME_V, es una vista compleja
porque incluye una función. Esto hace un INSERCIÓN imposible, porque no hay ningún
modo que la base de datos pueda calcular lo que realmente debería ser insertado: esto no
puede invertir al ingeniero el efecto de la función SUPERIOR de una moda
determinista. Pero BORRAR tiene éxito, porque no es dependiente de la función.

Por regla general, las vistas simples aceptan DML, las vistas complejas no hacen.
Pero hay excepciones.
CREE VISTA, CAMBIE VISTA, y VISTA DE GOTA
La sintaxis para crear una vista es como sigue: CREE [O REEMPLACE] [FUERZA |
NOFORCE] VISTA [esquema]. viewname [(alias [alias] )] COMO subpregunta [CON
OPCIÓN DE CONTROL [COACCIÓN constraintname]] [CON LEÍDO SÓLO
[COACCIÓN constraintname]];
Note que las vistas son objetos de esquema. No hay ninguna razón de no hacer
poseer una vista
por un usuario que se refiere al detalle las tablas poseídas por otro usuario. En ausencia,
la vista va
494
Capítulo 12:
Creación de Otros Objetos de Esquema

sea creado en el esquema corriente. Las palabras claves opcionales, ninguna de las
cuales ha sido usada en los ejemplos hasta ahora, son como sigue:

■ O REEMPLAZAN Si la vista ya existe, será dejada caer antes de ser


creado.
■ FUERZA o NOFORCE La palabra clave de FUERZA creará la vista aun si
la comando (s) de detalle en la subpregunta no existe. NOFORCE es la falta y
causará un error si la comando de detalle no existe.
■ CON OPCIÓN DE CONTROL Esto debe hacer con DML. Si la subpregunta
incluye un DONDE cláusula, entonces esta opción prevendrá la introducción de
filas que no serían vistas en la vista o actualizaciones que harían que una fila
desaparezca de la vista. En ausencia, esta opción no es habilitada, que puede dar
resultados desconcertantes.
■ CON LEÍDO SÓLO Previene cualquier DML a través de la vista. ■
COACCIÓN constraintnameEsto puede ser usado para llamar el CON
COMPRUEBE LA OPCIÓN y CON EL LEÍDO SÓLO restricciones de modo que
los mensajes de error cuando las restricciones hacen que select fallen, sean más
comprensibles.

Además, un SET de nombres de alias puede ser proporcionado a los títulos de las
columnas de la vista. Si no a condición de que, las columnas sean nombradas por las
columnas de la comando o con aliases especificados en la subpregunta.
La figura 12-2 primero demuestra el efecto de crear una vista, R1, que permite la
introducción de filas que no pueden ser vistas. La segunda vista, LOC1800, usa CON
LA OPCIÓN DE CONTROL de impedir a esto pasar.

FIGURA 12-2

Uso de CON OPCIÓN DE


CONTROL de prevenir
comportamiento aparentemente
anómalo
Cree Vistas Simples y Complejas
495

El uso principal del comando de VISTA CAMBIAR debe compilar la vista. Una vista
debe ser compilada con éxito antes de que ella pueda ser usada. Cuando una vista es
creada, el Oracle comprobará que las tablas de detalle y las columnas necesarias en las
cuales la vista está basada existen. Si ellos no hacen, la compilación falla y la vista no
será creada - a menos que usted use la opción de FUERZA. En este instancia, la vista
será creada, pero será inservible hasta las tablas o columnas a las cuales se refiere son
creados y la vista es con éxito compilada. Cuando una vista inválida es preguntada, el
Oracle intentará compilarla automáticamente. Si la compilación tiene éxito porque el
problema ha sido fijado, el usuario no sabrá que había alguna vez un problema - salvo
que su pregunta puede tomar un poco más largo que de costumbre. En términos generales,
usted debería compilar a mano vistas para asegurarse que ellos realmente compilan con
éxito, más bien que tener usuarios descubren errores.
La figura 12-3 muestra el ciclo de error y corrección. En la cifra, la primera select crea
una vista EX_STAFF esto se refiere a a
LOS EMPLOYEES LEFT_DATE de columna, que no existe. La select no falla porque
la creación es forzada, pero esto realmente da una advertencia. Una tentativa de
seleccionar de la vista falla. Después de añadir la columna necesaria a la comando de
detalle, el ESCOGIDO tiene éxito. Esto es porque la vista fue compilada con éxito
automáticamente. Finalmente, hay una compilación manual de la vista. Habría sido la
mejor práctica para hacer esto inmediatamente después de añadir la columna ausente.
No es posible ajustar las definiciones de columna de una vista después de la creación
en el modo que las columnas de una comando pueden ser cambiadas. La vista debe ser
dejada caer y recreada. El comando de GOTA es como sigue:
DEJE CAER VISTA [esquema]. viewname; usando el O REEMPLAZAN palabras
claves con el comando de VISTA CREAR, el
la vista será automáticamente dejada caer (si existe en absoluto) antes de ser creado.

FIGURA 12-3

Como corregir errores y


compilar una vista
496
Capítulo 12:
Creación de Otros Objetos de Esquema

EJERCICIO 12-1 Crea


Vistas
En este ejercicio, usted creará algunas vistas simples y complejas, usando datos en el
esquema de HORA. SQL*Plus o el developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Cree vistas en los


EMPLOYEES y tablas de DEPARTAMENTO que borran
toda la información personal:
cree la vista emp_anon_v como
seleccione hire_date, job_id,salary,commission_pct,department_id de
EMPLOYEES; cree la vista dept_anon_v como sentencia
department_id,department_name,location_id de DEPARTMENTS;

3. Cree una vista compleja que se afiliará y agregará las dos vistas simples.
Note que no hay ninguna razón de no tener vistas de vistas.
cree la vista dep_sum_v como
seleccione e.department_id, personal de cuenta (1), sume sueldos
(e.salary), d.department_name de emp_anon_v los e se afilian a
dept_anon_v d en el grupo e.department_id=d.department_id por
e.department_id, d.department_name;
4. Confirme que la vista trabaja preguntándolo, como en la ilustración siguiente:

OBJETIVO DE CERTIFICACIÓN 12.02

Recupere Datos de Vistas


Recupere Datos de Vistas
497
Las preguntas pueden ser dirigidas a vistas exactamente como si a tablas. Vistas y tablas
comparta mismo namespace, tan sintácticamente no hay absolutamente ninguna
diferencia en las select SENTENCIAS. El usuario tiene que no tener ningún
conocimiento de cual tipo del objeto él se dirija.
Considere esta vista:
cree la vista dept_emp como
seleccione department_name, last_name de DEPARTMENTS acompañan a
EMPLOYEES que usan (department_id);
La pregunta siguiente:
seleccione * de dept_emp donde department_name ='Marketing';

cuando analizado por el Oracle para la ejecución se hará:


seleccione * de
(seleccione department_name, last_name de DEPARTMENTS acompañan a
EMPLOYEES que usan (department_id)) donde department_name
='Marketing';
Usted raramente consigue algo para nada (tratando con Oracle Corporation),
y el uso de vistas seguramente no hace de ningún modo reducen el trabajo que la base de
datos tiene que hacer. Las vistas pueden reducir, sin embargo, considerablemente el
trabajo que los usuarios tienen que hacer.

EJERZA 12-2 Vistas de


Uso
En este ejercicio, usted usará las vistas creadas en el Ejercicio 12-1 para select
SENTENCIAS y DML. SQL*Plus o el developer SQL pueden ser usados.
1. Conecte a su base de datos como la HORA de usuario 2. Inserte un nuevo
departamento a través de la vista de DEPT_ANON_V e intente a
inserte a un empleado por EMP_ANON_V:
inserción en valores de DEPT_ANON_V (99, 'Departamento Temp',
1800);
inserción en valores de emp_anon_v (sysdate, 'AC_MGR',
10000,0,99);
498
Capítulo 12:
Creación de Otros Objetos de Esquema

El inserción en EMP_ANON_V fallará debido a la ausencia de valores obligatorios. Usted será, sin
embargo, capaz de hacer esta actualización por ello:
actualice salary=salary*1.1 de SET de emp_anon_v;
Entonces el rollo apoya los cambios:
rollback;

3. Averigüe el sueldo medio del departamento con el sueldo medio más alto,
preguntando la comando de EMPLOYEES:
máximo escogido (avg_sal) de
(seleccione el AVG (SUELDO) avg_sal del grupo de EMPLOYEES por department_id);
y encuentre la misma información de la vista de DEP_SUM_V, que es mucho
pregunta más simple:
máximo escogido (sueldos / personal) de dep_sum_v;

OBJETIVO DE CERTIFICACIÓN 12.03

Cree Sinónimos Privados y Públicos


Un sinónimo es un nombre alternativo para un objeto. Si los sinónimos existen para
objetos,
entonces cualquier select SQL puede dirigirse al objeto por su nombre actual, o por su
sinónimo. Esto puede parecer trivial. No es. El uso de sinónimos significa que una
aplicación puede funcionar para cualquier usuario, independientemente del cual el
esquema posea las vistas y tablas o hasta en cual base de datos las tablas residen.
Considere esta select:
seleccione * de hr.employees@prod;

El usuario que publica la select debe saber que la comando de EMPLOYEES es


poseída por
el esquema de HORA en la base de datos identificada por el GOLPECITO de enlace
de base de datos (no se preocupan de enlaces de base de datos - ellos son un medio de
tener acceso a objetos en una base de datos además de esto en el cual usted es
registrado). Si un sinónimo público ha sido creado con esta select:
cree el sinónimo público emp para hr.employees@prod;

entonces todo el usuario (¡cualquier usuario!) tengo que entrar es lo siguiente:


seleccione * de emp;
Cree Sinónimos Privados y Públicos
499

Esto da tanto la independencia de datos como la transparencia de posición. Las tablas y


las vistas pueden ser renombradas o trasladadas sin necesidad tener alguna vez de cambiar
el código; sólo los sinónimos tienen que ser ajustados.
Así como select SENTENCIAS, las select de DML pueden dirigirse a sinónimos como si
ellos fueran el objeto al cual ellos se refieren.
Los sinónimos privados son objetos de esquema. Ellos deben estar en su propio
esquema, o ellos deben ser calificados con el nombre de esquema. Los sinónimos públicos
existen independientemente de un esquema. Un sinónimo público puede ser mandado a por
cualquier usuario a quien el permiso haya sido concedido verlo sin la necesidad de
calificar a él con un nombre de esquema. Los sinónimos privados deben ser un nombre
único dentro de su esquema. Los sinónimos públicos pueden tener el mismo nombre que
objetos de esquema. Cuando la ejecución de select que objetos de dirección sin un
calificador de esquema, el Oracle buscará primero el objeto en el esquema local, y sólo si
no puede ser encontrado lo va buscar un sinónimo público. Así, en el ejemplo precedente,
si el usuario resultara poseer una comando llamada EMP sería esto que él vería - no la
comando señaló a por el sinónimo público.
La sintaxis para crear un sinónimo es como sigue: CREE el sinónimo de SINÓNIMO
[PÚBLICO] PARA el objeto; tendrán que haber concedido a un usuario el permiso de
crear sinónimos privados
y permiso adicional de crear sinónimos públicos. Por lo general, sólo el administrador de
base de datos puede crear (o gota) sinónimos públicos. Esto es porque su presencia (o
ausencia) afectará a cada usuario.

El "público" en "público con un nombre de esquema. Esto no significa que el


sinónimo" significa que no es un esquema cada uno tiene permisos contra ello. opóngase y
no puede ser por lo tanto prefijado

Dejar caer un sinónimo:


GOTA [PÚBLICO] sinónimo de SINÓNIMO; Si el objeto al cual un sinónimo se refiere
(la comando o vista) es dejado caer, el sinónimo
sigue existiendo. Cualquier tentativa de usarlo devolverá un error. A este respecto, los
sinónimos se comportan del mismo modo como vistas. Si el objeto es recreado, el sinónimo
debe ser compilado de nuevo antes del uso. Como con vistas, esto pasará automáticamente la
próxima vez que el sinónimo es dirigido, o puede ser hecho explícitamente con
CAMBIE sinónimo de SINÓNIMO COMPILAN;
500
Capítulo 12:
Creación de Otros Objetos de Esquema

EJERCICIO 12-3 Crea y Sinónimos de Uso


En este ejercicio, usted creará y usará sinónimos privados, usando objetos en la HORA
esquema. SQL*Plus o el developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Cree sinónimos para las
tres vistas creadas en el Ejercicio 12-1:
cree el sinónimo emp_s para emp_anon_v;
cree el sinónimo dept_s para dept_anon_v; cree el sinónimo dsum_s
para dep_sum_v;
3. Confirme que los sinónimos son idénticos al objeto subyacente:
describa emp_s;
describa emp_anon_v;
4. Confirme que los sinónimos trabajan (hasta hasta el punto de producir el mismo
errores) ejecutando las select en Ejercicios 12-1 y 12-2 contra los sinónimos en
vez de las vistas:
seleccione * de dsum_s;
inserción en valores de dept_s (99, 'Departamento Temp', 1800);
inserción en valores de emp_s (sysdate, 'AC_MGR', 10000,0,99);
actualice salary=salary*1.1 de SET de emp_s; rollback; máximo
escogido (sueldos / personal) de dsum_s;
5. Deje caer dos de las vistas:
cáigase visualizan emp_anon_v;
cáigase visualizan dept_anon_v;
6. Pregunte la vista compleja que está basada en las vistas dejadas caer:
seleccione * de dep_sum_v;
Note que la pregunta falla.
7. Tentativa de compilar de nuevo la vista rota:
cambie vista los dep_sum_v compilan;
Esto fallará también.
8. Deje caer la vista de DEP_SUM_V:
cáigase visualizan dep_sum_v;
Cree, Mantenga, y Use Secuencias
501

9. Pregunte el sinónimo para una vista dejada caer:


seleccione * de emp_s;
Esto fallará.
10. Compile de nuevo el sinónimo roto:
cambie sinónimo los emp_s compilan;
Note que esto no da un error, pero ejecuta de nuevo la pregunta del paso 9. Es
definitivamente todavía roto.
11. Comandoe dejando caer los sinónimos:
sinónimo de gota emp_s;
sinónimo de gota dept_s; sinónimo de gota dsum_s;

OBJETIVO DE CERTIFICACIÓN 12.04

Cree, Mantenga, y Use Secuencias


Una secuencia es una estructura para generar valores enteros únicos. Sólo una sesión
puede
lea el siguiente valor y así oblíguelo a incrementar. Esto es un punto de adaptación,
entonces cada valor generado será único.
Las secuencias son un instrumento inestimable para generar claves primarias. Muchas
aplicaciones necesitarán valores de clave primaria automáticamente generados. Los
ejemplos en el procesamiento de información comercial diario son números de factura o
números de pedido: los analistas comerciales habrán declarado que cada factura y pedido
deben tener un número único, que debería incrementar continuamente. Otras
aplicaciones pueden no tener tal requisito en términos comerciales, pero será necesario
hacer cumplir la integridad relacional. Considere un sistema de facturación telefónico:
en los términos de negocio el identificador único de un teléfono es el número de
teléfono (que es una cuerda) y aquella de una llamada será el número de teléfono de la
fuente y el tiempo que la llamada comenzó (que es un timestamp). Estos tipos de datos
son innecesariamente complejos para usar como claves primarias para los altos
volúmenes que pasan por un sistema de conmutación telefónico. Mientras esta
información será registrada, será mucho más rápido para usar columnas numéricas
simples para definir las claves foráneas y primarias. Los valores en estas columnas
pueden ser la secuencia basada.
502
Capítulo 12:
Creación de Otros Objetos de Esquema

FIGURA 12-4

Uso de una secuencia por dos


sesiones simultáneamente
El mecanismo de secuencia es independiente de tablas, el mecanismo de cierre de
fila, y destine o procesamiento de rollback. Esto significa que una secuencia puede
publicar miles de valores únicos un lejano del minuto más rápido que cualquier
implicación de método que selecciona una columna de una comando, actualizándolo, y
comisión del cambio.
La figura 12-4 muestra dos sesiones que seleccionan valores de una secuencia SEQ1.
Note esto en la cifra cada selección de SEQ1. NEXTVAL genera un único
número. Los números son publicados consecutivamente por comando del tiempo que la
selección fue hecha, y los incrementos de número globalmente, no sólo dentro de una
sesión.

Creación de Secuencias
La sintaxis llena para crear una secuencia es como sigue:

CREE LA SECUENCIA [esquema]. los sequencename


[INCREMENTO POR el número] [COMIENZAN CON el
número] [número de MAXVALUE | NOMAXVALUE]
[número de MINVALUE | NOMINVALUE] [CICLO |
NOCYCLE] [número de CACHE | NOCACHE]
[PEDIDO | NOORDER];
Cree, Mantenga, y Use Secuencias
503

Puede verse que la creación de una secuencia puede ser muy simple. Por ejemplo, la secuencia
usada en la Figura 12-4 fue creada con
cree la secuencia seq1;

Las opciones son mostradas en la comando siguiente.

INCREMENTO POR

COMIENCE CON

MAXVALUE

MINVALUE

CICLO

CACHE
PEDIDO

¿Cuánto más alto (o más abajo) que el último número publicado debería el siguiente número ser? Las faltas a +1
pero pueden ser cualquier número positivo (o número negativo para una secuencia inclinada). El punto de partida
para la secuencia: el número resultó por la primera selección. Las faltas a 1 pero pueden ser algo. El número más
alto una secuencia que sube puede ir a antes de generar un error o volver a su PRINCIPIO CON el valor. La falta
no es ningún máximo. El número más bajo una secuencia inclinada puede ir a antes de generar un error o volver a su
PRINCIPIO CON el valor. La falta no es ningún mínimo. Controla el comportamiento en el alcance de
MAXVALUE o MINVALUE. El comportamiento por defecto es dar un error, pero si el CICLO es especificado la
secuencia volverá a su punto de partida y repetición. Para el rendimiento, el Oracle puede prepublicar valores de
secuencia en lotes y cache ellos para resultar a usuarios. La falta debe generar y cache los 20 siguientes valores.
Sólo relevante para una base de datos arracimada: PIDA obliga todos los instancias en el racimo a coordinar
incrementar la secuencia, de modo que los números publicados siempre estén en el pedido aun cuando publicado a
sesiones contra instancias diferentes.

Configuraciones apropiadas para el INCREMENTO POR, COMIENCE CON, y MAXVALUE o


MINVALUE vendrán de sus analistas comerciales.
Es muy raro para el CICLO ser usado porque esto deja a los valores de duplicado de cuestión de
secuencia. Si la secuencia es usada para generar valores de clave primaria, el CICLO sólo tiene sentido si
hay una rutina en la base de datos que borrará viejas filas más rápido que la secuencia reeditará números.
Esconder valores de secuencia es esencial para el rendimiento. Seleccionar de una secuencia es un
punto de adaptación en el código de la aplicación: sólo una sesión puede hacer esto inmediatamente. El
mecanismo es muy eficiente: es mucho más rápido que cierre de una fila, actualización de la fila, y luego
abrirlo con DESTINAR. Pero aún así, seleccionar de una secuencia puede ser una causa de opinión entre
sesiones. La palabra clave de CACHE instruye el Oracle de pregenerar números de secuencia en lotes.
Esto significa que ellos pueden ser publicados más rápido que si ellos tuvieran que ser generados a
petición.
504
Capítulo 12:
Creación de Otros Objetos de Esquema

El número por defecto de valores al cache es sólo 20. La experiencia muestra que
esto no es bastante. Si su aplicación selecciona de la secuencia 10 veces por
segundo, entonces puesto el valor de cache a 50 mil. No esté tímido por esto.

Utilización de
Secuencias
Para usar una secuencia, una sesión puede seleccionar el siguiente valor con la
columna pseudo NEXTVAL, que obliga la secuencia a incrementar, o el último (o
"corriente") valor publicado a aquella sesión con la columna pseudo CURRVAL. El
NEXTVAL será globalmente único: cada sesión que lo selecciona conseguirá un
diferente, incrementado, el valor para cada uno SELECCIONA. El CURRVAL será
constante para una sesión hasta que esto seleccione NEXTVAL otra vez. No hay
ninguna manera de averiguar cual el último valor publicado por una secuencia era:
usted siempre puede obtener el siguiente valor incrementándolo con NEXTVAL, y
usted siempre puede recordar el último valor publicado a su sesión con CURRVAL,
pero usted no puede encontrar el último valor publicado.

El CURRVAL de una secuencia Usted no puede seleccionar el CURRVAL


hasta que sea el último valor publicado a la corriente seleccionar la sesión NEXTVAL., no
necesariamente el último valor resultó.

Un uso típico de secuencias es para valores de clave primaria. Este ejemplo usa una
secuencia ORDER_SEQ para generar números de pedido únicos y LINE_SEQ para
generar números de línea únicos para los artículos de línea del pedido. Primero cree las
secuencias, que es una operación única:
cree la secuencia order_seq comienzan con 10;
cree la secuencia line_seq comienzan con 10;
Entonces inserte los pedidos con sus líneas como una transacción sola:
inserción en pedidos (order_number, order_date, customer_number)
valores (order_seq.nextval, sysdate, '1000'); inserción en order_lines
(order_number,line_number,item_number,quantity) valores (order_seq.currval,
line_seq.nextval, 'A111', 1); inserción en order_lines
(order_number,line_number,item_number,quantity) valores (order_seq.currval,
line_seq.nextval, 'B111', 1); destine;
Cree, Mantenga, y Use Secuencias
505

La primera select de INSERCIÓN levanta un pedido con un número de pedido único


dibujado de la secuencia ORDER_SEQ para el cliente número 1000. Las segundas y
terceras select insertan las dos líneas del pedido, usando el número de pedido antes
publicado de ORDER_SEQ como la clave foránea para conectar las líneas al pedido, y
los siguientes valores de LINE_SEQ para generar un identificador único para cada línea.
Finalmente, la transacción es destinada.
Una secuencia no es atada a ninguna comando. En el ejemplo precedente, no habría
ninguna razón técnica de no usar una secuencia para generar valores para las claves
primarias del pedido y de las líneas.
DESTINAR no es necesario para hacer el incremento de una secuencia permanente:
es permanente y hecho visible al resto del mundo el momento esto pasa. No puede ser
hecho rodar atrás, tampoco. La figura 12-5 demuestra esto.
En la cifra, el segundo inserción es hecho rodar atrás. Pero ya que la pregunta final
muestra, la secuencia fue incrementada a pesar de esto. Las actualizaciones de secuencia
ocurren independientemente del sistema de gestión de transacción. Por esta razón,
siempre habrá huecos en la serie. Los huecos serán más grandes si la base de datos ha
sido reanudada y la cláusula de CACHE fue usada. Todos los números que han sido
generados y escondidos, pero todavía no publicados serán perdidos cuando la base de
datos es apagada. En el siguiente se reactivan, el valor corriente de la secuencia será el
último número generado, no el último publicado. De este modo, con el CACHE por
defecto de 20, cada cierre/inicializador perderá hasta 20 números.
FIGURA 12-5

No puede hacerse rodar un


incremento de secuencia
atrás.
506
Capítulo 12:
Creación de Otros Objetos de Esquema

Algunos contables se disgustan mucho en la idea de huecos en la enumeración.


Pregúnteles por qué esto importa. Esto por lo general no hace.

Si los analistas comerciales han declarado que no deben haber ningunos huecos en
una secuencia, entonces otro medio de generar números únicos debe ser usado. Para el
ejemplo precedente de levantar pedidos, el número de pedido corriente podría ser
almacenado en esta comando e iniciado a 10:
cree la comando current_on (order_number número);
inserción en valores de current_on (10); destine;
Entonces el código para crear un pedido tendría que hacerse:
actualice order_number=order_number de SET de current_on + 1;
el inserción en pedidos (order_number, order_date, customer_number)
valores ((seleccionan order_number de current_on), sysdate, '1000');
destine;
Esto trabajará seguramente como un medio de generar números de pedido únicos, y
porque el incremento del número de pedido es dentro de la transacción que inserta el
pedido, puede ser hecho rodar atrás con el inserción si es necesario: no habrá ningunos
huecos en números de pedido, a menos que un pedido sea deliberadamente borrado. Pero
es mucho menos eficiente que la utilización de una secuencia, y el código como esto es
famoso de causar problemas de opinión terribles. Si muchas sesiones tratan de cerrar
con llave e incrementar una fila que contiene el número corriente, la aplicación entera
colgará ya que ellos hacen cola para tomar su dirección. Después de crear y usar una
secuencia, puede ser modificado. La sintaxis es como sigue:

CAMBIE LA SECUENCIA sequencename [el INCREMENTO POR el número]


[COMIENZA CON el número] [número de MAXVALUE | NOMAXVALUE] [número
de MINVALUE | NOMINVALUE] [CICLO | NOCYCLE] [número de CACHE |
NOCACHE] [PEDIDO | NOORDER];
Esto CAMBIA el comando es el mismo como el comando CREAR, con una excepción:
no hay ninguna manera de poner el valor inicial. Si usted quiere reanudar la secuencia, el
único
Cree, Mantenga, y Use Secuencias

GUIÓN & SOLUCIÓN


507
Usted está implicado en intentar de una base de datos ser usada para entrada de pedido en línea e informe financiero
fuera de línea. ¿Qué debería usted considerar en cuanto a vistas, sinónimos, e índices?

¿Deberían siempre las secuencias ser usadas para claves primarias?

Los datos deben ser normalizados para el almacenamiento, pero deberían ser denormalized en vistas para la
recuperación. El uso dual de la base de datos será un problema: demasiados índices harán más lentos la entrada de
pedido, demasiado pocos harán impacto negativamente en el obteniendo. Un enfoque alternativo sería crean un SET
separado de tablas (posiblemente denormalized y agregado como las vistas) para el obteniendo y actualizan éstos
con rutinas de lote. La utilización de sinónimos siempre haría más fácil cambiar entre realizaciones con y sin tablas
de obteniendo separadas. En algunos instancias, los analistas comerciales pueden haber definido una clave primaria
basada en atributos de los datos. Por ejemplo, una lista de suscriptores telefónicos podría ser keyed en el número de
teléfono: esto es una cuerda formateada que puede tener la información, como la posición geográfica (para una
línea de tierra) o conectar a la red al operador (para un móvil) empotrado dentro de ello. Pero por lo general una
clave primaria no tiene el sentido, y en estos instancias una secuencia siempre es el mejor camino.

el camino es dejarlo caer y recrearlo. Ajustar el valor de cache de falta para mejorar
rendimiento del ejemplo de entrada de pedido precedente:
cambie la secuencia order_seq cache 1000;

Sin embargo, si usted quiere reinicializar la secuencia a su valor inicial, el único


camino es a
déjelo caer:
secuencia de gota order_seq;

y créelo otra vez.

EJERCICIO 12-4 Crea y Secuencias de Uso


En este ejercicio, usted creará algunas secuencias y los usará. Usted necesitará dos
sesiones concurrentes, Developer SQL o SQL*Plus.

1. Inicio de sesión a su base de datos dos veces, como HORA en sesiones


separadas. Piense que es
su Una sesión y el otro para ser su sesión B.
508
Capítulo 12:
Creación de Otros Objetos de Esquema

2. En su Una sesión, cree una secuencia como sigue:


cree la secuencia seq1 comienzan con 10 nocache maxvalue 15 ciclo;

El uso de NOCACHE es deletéreo para el rendimiento. Si MAXVALUE


es especificado, entonces el CICLO será necesario para prevenir errores cuando MAXVALUE es
alcanzado.
3. Ejecute los comandos siguientes en la sesión apropiada en el correcto
pedido de observar el uso de NEXTVAL y CURRVAL y el ciclismo de la secuencia:

1er 2do 3er 4to 5to 6to 7mo 8vo 9no 10mo

En Su Una Sesión
seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.currval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

En Su Sesión B

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.nextval del dual;

seleccione seq1.currval del dual;

seleccione seq1.nextval del dual;

4. Cree una comando con una clave primaria:


cree la comando seqtest (c1 número, c2 varchar2 (10));
cambie comando los seqtest añaden la coacción seqtest_pk clave
primaria (c1);

5. Cree una secuencia para generar valores de clave primaria:


cree la secuencia seqtest_pk_s;

6. En su Una sesión, inserte una fila en la nueva comando y destine:


inserción en valores de seqtest (seqtest_pk_s.nextval,
'primero');
destine;

7. En su sesión B, inserte una fila en la nueva comando y no lo destine:


inserción en valores de seqtest (seqtest_pk_s.nextval,
'segundo');
Cree y Mantenga Índices
509

8. En su Una sesión, inserte una tercera fila y destine:


inserción en valores de seqtest (seqtest_pk_s.nextval,
'tercero');
destine;

9. En su sesión B, el rollo apoya la segunda introducción:


rollback;

10. En su sesión B, ver los contenido de la comando:


seleccione * de seqtest;

Esto demuestra que las secuencias son incrementadas y el siguiente valor


publicado inmediatamente, fuera del mecanismo de control de transacción.
11. Comandoe:
comando de gota seqtest;
secuencia de gota seqtest_pk_s; secuencia de gota seq1;

OBJETIVO DE CERTIFICACIÓN 12.05

Cree y Mantenga Índices


Los índices tienen dos funciones: hacer cumplir clave primaria y coacciones únicas y a
mejore el rendimiento. La estrategia de indexación de una aplicación es crítica para el
rendimiento. Teóricamente, el developer SQL no tiene que ser consciente de la
existencia (o por otra parte) de índices, pero si el developer realmente sabe que índices
existen y como ellos son estructurados, el developer puede escribir el código diseñado
para explotarlos.
No hay ninguna demarcación clara de cuya dirección de índice de dominio mienta
dentro de. Cuando los analistas comerciales especifican reglas comerciales que serán
puestas en práctica como coacciones, ellos especifican en efecto índices. Los
administradores de base de datos supervisarán la ejecución de código que se ejecuta en
la base de datos y harán recomendaciones para índices. El developer, que debería tener
la mejor idea de lo que continúa en el código y la naturaleza de los datos, también
estará implicado en el desarrollo de la estrategia de indexación.
510
Capítulo 12:
Creación de Otros Objetos de Esquema

Para qué Índices Son


Los índices son la parte del mecanismo de coacción. Si una columna (o un grupo de
columnas)
es marcado como la clave primaria de una comando, entonces cada vez una fila es
insertada en la comando, el Oracle debe comprobar que una fila con el mismo valor en la
clave primaria no existe ya. Si la comando no tiene ningún índice en la columna (s), la
única manera de hacer esto debe escanear directamente por la comando, comprobando
cada fila. Mientras esto podría ser aceptable para una comando de sólo unas filas, para
una comando con miles o millones (o mil millones) de filas, esto no es factible. Un índice
da (cerca) de el acceso inmediato a valores de clave, entonces el control de la existencia
puede ser realizado prácticamente al instante. Cuando una coacción de clave primaria es
definida, el Oracle creará automáticamente un índice en la columna (s) de clave
primaria, si uno no existe ya.
Una coacción única también requiere un índice. La diferencia de una coacción de
clave primaria es que la columna (s) de la coacción única puede ser dejada nula, quizás
en muchas filas. Esto no afecta la creación y el uso del índice: los nulls no entran en los
índices B*Tree, como descrito en la siguiente sección, "Los tipos del Índice."
Las coacciones de clave foránea son hechas cumplir por índices, pero el índice debe
existir en la comando paternal, no necesariamente en la comando para la cual la
coacción es definida. Una coacción de clave foránea relaciona una columna en la
comando de niño a la clave primaria o a un único entran la comando paternal. Cuando
una fila es insertada en la comando de niño, el Oracle hará una consulta en el índice en
la comando paternal para confirmar que hay una fila correspondiente antes de permitir
el inserción. Sin embargo, usted siempre debería crear índices en las columnas de clave
foránea dentro de la comando de niño por motivos de rendimiento: BORRAR en la
comando paternal será mucho más rápido si el Oracle puede usar un índice para
determinar si hay cualquier fila en la comando de niño que se refiere a la fila que está
siendo borrada.
Los índices son críticos para el rendimiento. Ejecutando cualquier select SQL que
incluya un DONDE cláusula, el Oracle tiene que identificarse qué filas de la comando
deben ser seleccionadas o modificadas. Si no hay ningún índice en la columna (s)
referida en el DONDE cláusula, la única manera de hacer esto es con una exploración de
comando llena. Una exploración de comando llena lee cada fila de la comando, a fin de
encontrar las filas relevantes. Si la comando tiene mil millones de filas, esto puede
tomar horas. Si hay un índice en la columna (s) relevante, el Oracle puede buscar el
índice en cambio. Un índice es una lista clasificada de valores de clave, estructurados en
una manera que hace la búsqueda muy eficiente. Con cada valor de clave es un
indicador a la fila en la comando. La localización de filas relevantes vía una consulta de
índice es mucho más rápida que la utilización de una exploración de comando llena, si
la comando es por encima de una cierta talla y la proporción de las filas para ser
recuperadas es debajo de un cierto valor. Para pequeñas tablas, o para un DONDE la
cláusula que recuperará una fracción grande de las filas de la comando, una exploración
de comando llena va
Cree y Mantenga Índices
511

esté más rápido: usted puede confiar (por lo general) en el Oracle para tomar la decisión
correcta, basada en la información que la base de datos junta al lado de las tablas y las
filas dentro de ellos.
Una segunda circunstancia donde los índices pueden ser usados es para la
comandoación. Una select SENTENCIA que incluye el PEDIDO POR, GRUPO POR, o
palabras claves de UNIÓN (y algunos otros) debe clasificar las filas en el pedido - a
menos que haya un índice, que puede devolver las filas en el pedido correcto sin tener
que clasificarlos primero.
Una tercera circunstancia cuando los índices pueden mejorar el rendimiento es
cuando las tablas son afiliadas, pero otra vez el Oracle tiene una opción: según la talla
de las tablas y los recursos de memoria disponibles, puede ser más rápido para escanear
tablas en la memoria y afiliarse a ellos allí, más bien que usar índices. La técnica de
juntura de bucle anidada pasa por una comando usando un índice en la otra comando
para localizar las filas correspondientes: esto es por lo general una operación intensiva
por el disco. Una técnica de juntura de picadillo lee la comando entera en la memoria, lo
converte en una tabla hash, y usa un algoritmo que desmenuza para localizar filas
correspondientes; esto es más memoria y unidad central de proceso intensiva. Una juntura
de fusión de clase clasifica las tablas en la columna de juntura entonces los fusiona
juntos: esto a menudo es un compromiso entre disco, memoria, y recursos de unidad
central de proceso. Si no hay ningunos índices, entonces el Oracle es con severidad
limitado en las técnicas de juntura disponibles.

Tipos de Índice
El oracle apoya varios tipos del índice, que tienen varias variaciones. Los dos tipos de
índice de la preocupación aquí son el índice B*Tree, que es el tipo de índice por defecto,
y el índice de bitmap. La única variación digna de la consideración con objetivos de
examen se aplica a índices B*Tree: éstos pueden ser únicos o no únicos. Un índice único
no permitirá la introducción de dos filas con los mismos valores de clave; un índice no
único permitirá tantas filas como usted quiere con los mismos valores. No único es la
falta.
Por regla general, los índices mejorarán el rendimiento para la extracción de datos,
pero reducirán el rendimiento para operaciones DML. Esto es porque los índices deben
ser mantenidos. Cada vez una fila es insertada en una comando, una nueva llave debe
ser insertada en cada índice en la comando, que coloca una tensión adicional en la base
de datos. Por esta razón, en sistemas de procesamiento de transacción es acostumbrado
para guardar el número de índices tan bajo como sea posible (quizás no más que los
necesarios para las coacciones) y en una pregunta - el sistema intensivo, como un
depósito de datos, para crear tantos como podría ser provechoso.

B*Tree Pone índice A un índice B*Tree (los soportes "de B" para "el equilibrado")
es una estructura de árbol. El nodo de raíz del árbol señala a muchos nodos al segundo
nivel, que puede señalar a muchos nodos en
512
Capítulo 12:
Creación de Otros Objetos de Esquema

el tercer nivel, etcétera. La profundidad necesaria del árbol será en gran parte
determinada por el número de filas en la comando y la longitud de los valores de clave
de índice.

La estructura B*Tree es muy eficiente. Si la profundidad es mayor entonces tres


o cuatro, que las llaves de índice son muy largas o la comando tiene mil millones
de filas. Si ninguno si éstos son el instancia, entonces el índice necesita
reconstruir.

Los nodos de hoja del árbol de índice almacenan las llaves de las filas, en el pedido,
cada uno con un indicador que identifica la posición física de la fila. Entonces recuperar
una fila con una consulta de índice, si el DONDE la cláusula usa un predicado de igualdad
en la columna de clave primaria, el Oracle navega abajo el árbol al nodo de hoja que
contiene el valor de clave deseado, luego usa el indicador para encontrar la fila. Si el
DONDE la cláusula usa un predicado de no igualdad (como alguno de los operadores
COMO, ENTRE,>, o <) entonces el Oracle puede navegar abajo el árbol para encontrar
el primer valor de clave correspondiente y luego navegar a través de los nodos de hoja
del índice para encontrar todos los otros valores correspondientes. Como esto hace así,
esto recuperará las filas de la comando, en el pedido.
El indicador a la fila es el rowid. El rowid es un Oracle pseudocolumna patentada que
cada fila en cada comando tiene. Cifrado dentro de ello es la dirección física de la fila.
Como los rowids no son la parte del estándar SQL, ellos nunca son visibles a una select
SQL normal, pero usted puede verlos y usarlos si usted quiere. Esto es demostrado en la
Figura 12-6.
Rowid de una fila es globalmente único. Cada fila en cada comando en la base de datos
entera tendrá rowid diferente. El cifrado rowid da la dirección física de la fila: de ello, el
Oracle puede contar qué archivo de sistema operativo y donde en el archivo la fila es, y
va directamente a ello.

FIGURA 12-6

La pruebas y la utilización
rowids
Cree y Mantenga Índices
513

Los índices de B*Tree son un modo muy eficiente de recuperar filas si el número de filas necesarias es
bajo en la proporción con el número total de filas en la comando y si la comando es grande. Considere
esta select:
seleccione a la cuenta (*) de EMPLOYEES donde last_name entre 'Un %' y 'Z %';

Esto DONDE la cláusula es suficientemente amplia que incluirá cada fila en el


comando. Sería mucho más lento a tal el índice para encontrar el rowids y luego usar el rowids para
encontrar las filas que escanear la comando entera. Después de todo, es la comando entera que es
necesaria. Otro ejemplo sería si la comando fuera bastante pequeña que un disco leído podría escanearlo
en su totalidad: no habría ninguna razón en la lectura de un índice primero.
A menudo se dice que si la pregunta va a recuperar más del 2 a 4 por ciento de las filas, entonces una
exploración de comando llena será más rápida. Una excepción principal a esto es si el valor especificara
en el DONDE la cláusula es NULA. NULLs no entran en índices B*Tree, entonces una pregunta, como
esto:
seleccione * de EMPLOYEES donde last_name es nulo;

siempre causará una exploración de comando llena. Hay poco valor en la creación de un B*Tree
el índice en una columna con pocos valores únicos, ya que no será selectivo: la proporción de la comando
que será recuperada para cada valor de clave distinto será demasiado alta. En general, los índices de
B*Tree deberían ser usados si:

■ El cardinality (el número de valores distintos) en la columna es alto, y ■ El número de filas en la


comando es alto, y ■ La columna es usada en DONDE condiciones de JUNTURA o cláusulas

Los Índices de bitmap En muchas aplicaciones comerciales, la naturaleza de los datos y las preguntas
son tales que los índices B*Tree no son de mucho uso. Considere la comando de ventas para una cadena de
supermercados, almacenando un año de datos históricos, que pueden ser analizados en varias
dimensiones. La figura 12-7 muestra un diagrama de relación de la entidad simple, con sólo cuatro de las
dimensiones.
El cardinality de cada dimensión podría ser completamente bajo. Haga estas asunciones:

TIENDA Hay cuatro tiendas el PRODUCTO Hay 200 FECHA de productos Hay
CANAL de 365 días Hay dos canales (paseo - en y entrega)
514
Capítulo 12:
Creación de Otros Objetos de Esquema

LA FIGURA 12-7 Tienda

Una comando de hecho con cuatro dimensiones

Canal Ventas Producto

Fecha

Asumiendo hasta la distribución de datos, sólo dos de las dimensiones (PRODUCTO


y FECHA) tienen una selectividad mejor que el criterio comúnmente usado del 2 por
ciento al 4 por ciento que hace un índice que vale la pena. Pero si predicados de
variedad de uso de preguntas (como contar ventas en un mes, o de una clase de diez o
más productos) entonces no hasta éstos se licenciarán. Esto es un simple hecho: los
índices de B*Tree a menudo son inútiles en un entorno de depósito de datos. Una
pregunta típica podría querer comparar ventas entre dos tiendas para andar - en
compradores de una cierta clase del producto en un mes. Pueden haber bien índices
B*Tree en las columnas relevantes, pero el Oracle no hará instancia de ellos como
insuficientemente selectivo. Esto es para qué los índices de bitmap son diseñados.
Un índice de bitmap almacena el rowids asociado con cada valor de clave como un
bitmap. Los bitmaps para el índice de CANAL podrían parecer a esto:
WALKIN 11010111000101011101011101..
ENTREGA 00101000111010100010100010..
Esto indica que las dos primeras filas eran ventas para andar - en clientes, el tercer
la venta era una entrega, la cuarta venta era un paseo - en, etcétera.
Los bitmaps para el índice de TIENDA podrían ser:
LONDRES 11001001001001101001010000..
OXFORD 00100010011000010001001000..
LECTURA 00010001000100000100100010..
GLASGOW 00000100100010000010000101..
Esto indica que las dos primeras ventas estaban en la tienda de Londres, el tercer
estaba en
Oxford, el cuarto en Lectura, etcétera. Ahora si esta pregunta es recibida:
seleccione a la cuenta (*) de ventas donde canal ='WALKIN' y tienda
='OXFORD';
Cree y Mantenga Índices

El oracle puede recuperar los dos bitmaps relevantes y añadirlos juntos con un
Booleano Y operación:
WALKIN 11010111000101011101011101..
OXFORD 00100010011000010001001100.. WALKIN & OXFORD
00000010000000010000000000..
515
El resultado del Y operación muestra que sólo el séptimo y dieciséis
las filas tienen derecho a la selección. Esta combinación de bitmaps es muy rápida y
puede ser usada para poner en práctica operaciones de álgebra Booleanas complejas con
muchas condiciones en muchas columnas usando cualquier combinación de Y, O, y
NO operadores. Una ventaja particular que los índices de bitmap tienen sobre índices
B*Tree consiste en que ellos incluyen NULLs. Por lo que el índice de bitmap está
referido, NULO es sólo otro valor distinto, que tendrá su propio bitmap.
En general, los índices de bitmap deberían ser usados si:

■ El cardinality (el número de valores distintos) en la columna es bajo (tal como


macho/femenino), y ■ El número de filas en la comando es alto, y ■ La
columna es usada en el álgebra Booleana (AND/OR/NOT) operaciones

Si usted supiera de antemano lo que las preguntas serían entonces usted podría
construir índices B*Tree que trabajarían, como un índice compuesto en TIENDA
y CANAL. Pero por lo general usted no sabe, que es donde la fusión dinámica de
bitmaps da la gran flexibilidad.

La creación y la Utilización de Índices


Los índices son creados implícitamente cuando la clave primaria y las coacciones
únicas son definidas,
si un índice en la columna (s) relevante no existe ya. La sintaxis básica para crear un
índice explícitamente es como sigue:
CREE [ÚNICO | EL BITMAP] ÍNDICE [esquema]. indexname EN [esquema].
tablename (columna [column]);
El tipo por defecto del índice es un índice B*Tree no único. No es posible crear
un índice de bitmap único (y usted no querría a si usted pudiera: piense en la cuestión
de cardinality). Los índices son objetos de esquema, y es posible crear un índice en un
esquema en una comando en el otro, pero la mayor parte de personas encontrarían esto
algo confuso. Un índice compuesto es un índice en varias columnas. Los índices
compuestos pueden
516
Capítulo 12:
Creación de Otros Objetos de Esquema

esté en columnas de tipos de datos diferentes, y las columnas no tienen que ser
adyacentes en la comando.

Muchos administradores de base de datos no lo consideran práctica buena para


confiar en la creación de índice implícita. Si los índices son creados
explícitamente, el creador tiene el control total sobre las características del
índice, que puede hacerlo más fácil para el DBA a poder posteriormente.

Considere este ejemplo de crear tablas e índices y luego definir coacciones:


cree el departamento de comando (deptno número, dname varchar2 (10));
cree la comando emp (empno número, apellido varchar2 (10), nombre de pila varchar2
(10), dob fecha, deptno número); cree el índice dept_i1 único en el departamento
(deptno); cree el índice emp_i1 único en emp (empno); cree el índice emp_i2 en emp
(apellido, nombre de pila); cree el índice emp_i3 de bitmap en emp (deptno); cambie
departamento de comando añaden la coacción dept_pk clave primaria (deptno); cambie
comando los emp añaden la coacción emp_pk clave primaria (empno); cambie comando los
emp añaden la coacción emp_fk clave foránea (deptno) departamento de referencias
(deptno);
Los dos primeros índices creados son señalados como ÚNICOS, significando que
esto no va
esté posible insertar valores duplicados. Esto no es definido como una coacción a este
punto, pero es verdad sin embargo. El tercer índice no es definido como ÚNICO y
aceptará por lo tanto valores duplicados; esto es un índice compuesto en dos columnas.
El cuarto índice es definido como un índice de bitmap, porque el cardinality de la
columna probablemente será bajo en la proporción con el número de filas en la
comando.
Cuando las dos coacciones de clave primaria son definidas, el Oracle descubrirá los
índices pre creados y los usará para hacer cumplir las coacciones. Note que el índice en
DEPT.DEPTNO no tiene ningún objetivo para el rendimiento porque la comando va en
toda la probabilidad ser tan pequeña que el índice nunca será usado para recuperar filas
(una exploración será más rápida), pero todavía es esencial tener un índice para hacer
cumplir la coacción de clave primaria.
Una clave primaria y única el instancia último, será una coacción no
única puede ser hecho cumplir por índices el índice que resulta sólo tener único que
son únicos o no únicos: en valores.
Cree y Mantenga Índices
517

Una vez creado, el uso de índices es completamente transparente y automático.


Antes de ejecutar una select SQL, el servidor de Oracle evaluará todos los modos
posibles de ejecutarlo. Algunos de estos caminos pueden implicar usar todo lo que los
índices están disponibles, los otros pueden no. El oracle hará el uso de la información
que esto junta en las tablas y el entorno para tomar una decisión inteligente sobre cual
(si cualquiera) índices de usar.

El servidor de Oracle debería tomar la mejor decisión sobre el uso de índice, pero
si lo consigue incorrecto que es posible para un programador empotrar
instrucciones, conocidas como optimizer indirectas, en el código que forzará el
uso (o no) de ciertos índices.

La modificación y la Caída de Índices


Hay un comando, CAMBIE INDEXbut esto no puede ser usado para cambiar cualquier del
las características descritas en este capítulo: el tipo (B*Tree o bitmap) del índice, las
columnas, o si es único o no único. El comando de ÍNDICE CAMBIAR está en el
dominio de administración de base de datos y sería típicamente usado para ajustar las
propiedades físicas del índice, no las propiedades lógicas que son del interés para
developeres. Si es necesario cambiar alguna de estas propiedades, el índice debe ser
dejado caer y recreado. Seguir el ejemplo en la sección anterior, para cambiar el índice
EMP_I2 para incluir los cumpleaños de los EMPLOYEES:
el índice emp_i2 de gota;
cree el índice emp_i2 en emp (apellido, nombre de pila, dob);
Este índice compuesto ahora incluye columnas con tipos de datos diferentes. Las
columnas
resulte ser puesto en una lista en el mismo pedido que ellos son definidos en la comando,
pero esto no es de ningún modo necesario.
Cuando una comando es dejada caer, todos los índices y las coacciones definidas
para la comando son dejados caer también. Si un índice fuera creado implícitamente
creando una coacción, entonces la caída de la coacción también dejará caer el índice.
Si el índice hubiera sido creado explícitamente y la coacción creada más tarde,
entonces si la coacción es dejada caer el índice sobrevivirá.
518
Capítulo 12:
Creación de Otros Objetos de Esquema
DENTRO DEL EXAMEN
Creación de Otros Objetos de Esquema
En muchas aplicaciones, los usuarios nunca ven tablas.
Los datos de comando son abstraídos en vistas, y las vistas adelante abstraídas por sinónimos. El uso de
vistas y sinónimos es completamente transparente a SQL: todos ellos comparten mismo namespace, y
entonces el código se ejecutará contra cualquier de ellos. Las vistas pueden hacer estructuras relacionales
complejas mucho más fáciles a usar, y los sinónimos proporcionan la propiedad de datos y la
transparencia de posición.
El uso de índices también es transparente. Ellos se requieren hacer cumplir coacciones de clave
primaria y únicas (y fuertemente aconsejados para coacciones de clave foránea) y puede ser
opcionalmente creado para realzar el rendimiento. Los índices vienen a dos formas: B*Tree y bitmap.
Llegar a una estrategia de indexación apropiada, que crea índices del tipo correcto en las columnas
correctas, es crítico para el rendimiento.

EJERZA 12-5 Índices de Creación

Los índices de B*Tree son convenientes para columnas muy selectivas con cardinality alto; los índices de
bitmap son convenientes para columnas con sólo unos valores distintos. El servidor de Oracle determinará en
el tiempo de ejecución de select si usar índices, aunque los programadores puedan controlar esto por
indirectas de fijación en su código.
Las secuencias son una instalación para generar números únicos. Es absolutamente imposible para dos
sesiones leer el mismo valor de una secuencia. Las secuencias y sus valores existen fuera de la estructura de
procesamiento de transacción. Si una secuencia es incrementada, este incremento no puede ser hecho rodar
atrás y es inmediatamente visible a todas otras sesiones sin ninguno destinan. Las secuencias evitan los
mecanismos para transacciones atómicas y aislamiento de transacción.
En este ejercicio, cree índices en una copia de la comando de EMPLOYEES en el
esquema de HORA. SQL*Plus o el Developer SQL pueden ser usados.

1. Conecte a su base de datos como la HORA de usuario 2. Cree una comando


que es una copia de EMPLOYEES:
cree la comando emps como sentencia * de EMPLOYEES;
Cree y Mantenga Índices
519

Esta comando no tendrá ni índices, ni coacciones de clave foránea o primarias, únicas, porque éstos no
son copiados por una COMANDO CREAR COMO el comando. El NO las coacciones NULAS habrán
sido copiadas. Confirme esto describiendo la comando:
describa emps;

3. Cree un índice para ser usado para la coacción de clave primaria:


cree el índice único emps_empid_i en emps (employee_id);
4. Demuestre que un índice único no puede aceptar duplicados, hasta antes a
la coacción es definida:
inserción en emps (employee_id,last_name,email,hire_date,job_id)
valores (198, 'Watson', 'jw@bplc.co.za', sysdate, 'IT_PROG');
Esto devolverá un error porque el índice no puede insertar segundo employee_
id 198. La unicidad de índice es un atributo del índice que puede existir sin una coacción, pero no
debería ser confiado en hacer cumplir la integridad de datos.
5. Cree índices adicionales en columnas que probablemente serán usadas en DONDE
cláusulas, usando B*Tree para columnas de cardinality alto y bitmap para columnas de cardinality bajo:
cree índice emps_name_i en emps (last_name, first_name);
cree índice emps_tel_i en emps (phone_number); cree índice de bitmap
emps_mgr_i en emps (manage_id); cree índice de bitmap emps_dept_i en emps
(department_id);

6. Defina algunas coacciones:


cambie comando los emps añaden la coacción emps_pk clave primaria (employee_id);
cambie comando los emps añaden la coacción emps_email_uk único (e-mail); cambie comando
los emps añaden la coacción emps_tel_uk único (phone_number);

7. Muestre los nombres de índice y su tipo:


seleccione index_name, index_type, unicidad de user_indexes
donde table_name ='EMPS';
La vista USER_INDEXES muestra detalles de todos los índices en su esquema corriente.
Note que además de los cinco índices explícitamente creados en los pasos 3 y 5, también hay un
índice creado implícitamente con el nombre de la coacción definida en el E-MAIL. También note que
la coacción única en PHONE_NUMBER
520
Capítulo 12:
Creación de Otros Objetos de Esquema

está siendo hecho cumplir con un índice no único; esto es absolutamente posible, porque aunque el
mecanismo de coacción use índices, es independiente de la estructura del índice.
8. Comandoe dejando caer la comando EMPS, y confirme que todos los índices tienen
también ido:
comando de gota emps;
seleccione index_name de user_indexes donde table_name ='EMPS';

RESUMEN DE CERTIFICACIÓN
Las vistas son select sentencias, almacenadas en el diccionario de datos. Ellos pueden
ser preguntados
como si ellas fueran tablas, y en algunos instancias ellos pueden ser el objeto de select
DML. Una vista simple es columnas de una comando, sin agregaciones o funciones; una
vista compleja puede afiliarse a tablas, conjunto, y usar funciones. Por regla general, es
posible hacer DML a través de una vista simple, pero no a través de una vista compleja
- pero hay excepciones.
Los sinónimos son aliases que pueden estar acostumbrados a vistas de acceso y tablas.
Los sinónimos pueden simplificar el código haciéndolo innecesario para especificar a
calificadores de esquema o nombres de enlace de base de datos: ellos dejan al código
ejecutado sin tener que saber sobre propiedad de datos o posición. Las tablas, las vistas,
y los sinónimos comparten el nombre namespace: dentro de un esquema, ellos deben
tener todos nombres diferentes y pueden ser usados de modo intercambiable.
Las secuencias generan números únicos, típicamente para el uso como valores de clave
primaria. Los índices tienen un objetivo dual: hacer cumplir coacciones y realzar
rendimiento.
Si un índice está disponible definiendo una coacción, el Oracle lo usará; por otra parte,
un índice será implícitamente creado. Creando índices para el rendimiento, considere
qué columnas son usadas para afiliarse a tablas o en DONDE las cláusulas y crean
índices B*Tree en columnas con cardinality alto e índices de bitmap en columnas con
relativamente pocos valores distintos.
Taladradora de dos minutos
521


TALADRADORA DE DOS MINUTOS
Cree Vistas Simples y Complejas
❑ Una vista simple tiene un detalle (o base) comando y no usa ni funciones, ni
agregación.
❑ Una vista compleja puede estar basado en cualquier select SENTENCIA, no importa como
complicado.
❑ Vistas son objetos de esquema. Usar una vista en otro esquema, el nombre de vista
debe ser calificado con el nombre de esquema.

Recupere Datos de Vistas


❑ Una vista puede ser preguntado exactamente como si fuera una comando. ❑ Vistas puede
ser afiliado a otras vistas o a tablas, ellos pueden ser agregados, y
en algunos instancias ellos pueden aceptar select DML.
❑ Vistas sólo existen como construcciones de diccionario de datos. Siempre que usted pregunte
una vista,
la select SENTENCIA subyacente debe ser ejecutada.

Cree Sinónimos Privados y Públicos


❑ Un sinónimo es un nombre alternativo para una vista o una comando. ❑ sinónimos Privados
son objetos de esquema; los sinónimos públicos existen el usuario exterior
los esquemas y pueden ser usados sin especificar un nombre de esquema como un calificador.
❑ Sinónimos comparten mismo namespace que vistas y tablas y puede ser por lo tanto
usado de modo intercambiable con ellos.

Cree, Mantenga, y Use Secuencias


❑ Una secuencia no genera valores únicos - a menos que MAXVALUE o
MINVALUE y el CICLO han sido especificados. ❑ Incrementar una secuencia no tiene que
ser destinado y no puede ser hecho rodar atrás. ❑ Cualquier sesión puede incrementar la
secuencia leyendo su siguiente valor. Es posible
obtener el último valor publicado a su sesión, pero no el último valor publicado.
522
Capítulo 12:
Creación de Otros Objetos de Esquema

Cree y Mantenga Índices


❑ Índices se requieren para hacer cumplir coacciones de clave primaria y únicas.
❑ los NULLs no son incluidos en índices B*Tree, pero son incluidos en índices de
bitmap. ❑ B*Tree índices puede ser único o no único, que determina si ellos
puede aceptar valores de clave duplicados.
❑ B*Tree índices son convenientes para columnas cardinality altas, índices de
bitmap para
bajo columnas de cardinality.
❑ Índices combinados tienen una llave que consiste en varias columnas, que
pueden ser de
tipos de datos diferentes.

MÍ PRUEBA
Mí Prueba
523
Las preguntas siguientes le ayudarán a medir su entendimiento del material presentado en esto
capítulo. Lea todas las opciones con cuidado porque podría haber más de una respuesta correcta. Elija
todo el correcto responde de cada pregunta.

Cree Vistas Simples y Complejas


1. ¿Cuál de éstos es característica una definición de una vista compleja, más bien que una vista
simple?
(Elija una o varias respuestas correctas.) A. La restricción de la proyección seleccionando sólo
algunas columnas de la comando B. Naming las columnas de la vista con aliases de columna C.
Restricting la selección de filas con un DONDE la cláusula D. La realización de una agregación
E. Joining dos tablas
2. Considere estas tres select:
cree la vista v1 como department_id escogido, department_name, last_name de
los DEPARTMENTS acompañan a EMPLOYEES que usan (department_id); seleccione
department_name, last_name de v1 donde department_id=20; seleccione
d.department_name, e.last_name de DEPARTMENTS d, EMPLOYEES e donde
d.department_id=e.department_id y d.department_id=20;
La primera pregunta será más rápida que el segundo porque (eligen la mejor respuesta):
A. La vista ha hecho ya el trabajo de afiliarse a las tablas. B. La vista usa la sintaxis de juntura de
estándar de organización internacional para la normalización, que es más rápida que la sintaxis de
juntura de Oracle usada en
la segunda pregunta.
C. La vista es precompilada, entonces la primera pregunta requiere la compilación menos dinámica
que el segundo
pregunta.
D. No hay ninguna razón de la primera pregunta para ser más rápida.
3. Estudie esta select de creación de vista:
cree la vista dept30 como
seleccione department_id, employee_id, last_name de EMPLOYEES donde
department_id=30 con la opción de control;
524
Capítulo 12:
Creación de Otros Objetos de Esquema

¿Qué podría hacer la select siguiente fallar? (Elija la mejor respuesta.)


actualice department_id=10 de SET de dept30 donde
employee_id=114;

A. A menos que no especificado por otra parte, las vistas serán creadas como CON EL LEÍDO SÓLO.
B. La vista es demasiado compleja para permitir operaciones DML. C. El CON LA OPCIÓN DE
CONTROL rechazará cualquier select que cambie el DEPARTMENT_ID. D. La select tendrá
éxito.

Recupere Datos de Vistas


4. Hay una vista simple SCOTT.DEPT_VIEW en la comando SCOTT.DEPT. Este inserción falla con
un error:
SQL> insertan en valores de dept_view ('APOYO', 'OXFORD');
inserción en valores de dept_view ('APOYO', 'OXFORD') *ERROR en línea 1: ORA-
01400: no puede insertar NULO en ("SCOTT". "DEPARTAMENTO". "DEPTNO")
¿Cuál podría ser el problema? (Elija la mejor respuesta.)
A. El INSERCIÓN viola una coacción en la comando de detalle. B. El INSERCIÓN viola una
coacción en la vista. C. La vista fue creada como CON EL LEÍDO SÓLO. D. La vista fue creada
como CON LA OPCIÓN DE CONTROL.
Cree Sinónimos Privados y Públicos
5. ¿Qué distingue características de un sinónimo público, más bien que un sinónimo privado?
(Elija dos respuestas correctas.) A. Los sinónimos públicos siempre son visibles a todos los usuarios.
Pueden tener acceso a sinónimos de B. Public de nombre sin un nombre de esquema calificador.
Los sinónimos de C. Public pueden ser seleccionados desde fuera necesitando cualquier permiso.
Los sinónimos de D. Public pueden tener los mismos nombres que tablas o vistas.
6. Considere estas tres select:
cree el sinónimo s1 para EMPLOYEES;
cree el sinónimo público s1 para DEPARTMENTS; seleccione * de s1;

¿Cuál de las select siguientes es correcta? (Elija la mejor respuesta.) A. La segunda select fallará
porque un objeto S1 ya existe. B. La tercera select mostrará los contenido de EMPLOYEES. C. La
tercera select mostrará los contenido de DEPARTMENTS.
Mí Prueba
525
D. La tercera select mostrará los contenido de la tabla S1, si tal comando existe en
el esquema corriente.
7. Una vista y un sinónimo son creados como sigue:
cree la vista dept_v como sentencia * del departamento;
cree el sinónimo dept_s para dept_v;
Posteriormente el DEPARTAMENTO de comando es dejado caer. ¿Qué pasará si usted pregunta el
sinónimo DEPT_S?
(Elija la mejor respuesta.) A. No habrá un error porque el sinónimo se dirige a la vista, que todavía
existe, pero
no habrá ningunas filas devueltas.
B. No habrá un error si usted primero compila de nuevo la vista con el comando CAMBIAN LA
VISTA
DEPT_V COMPILAN LA FUERZA; C. Habrá un error porque el sinónimo será inválido. D.
Habrá un error porque la vista será inválida. E. Habrá un error porque la vista habrá sido dejada
caer implícitamente cuando la comando
fue dejado caer.

Cree, Mantenga, y Use Secuencias


8. Una secuencia es creada como sigue:
cree la secuencia seq1 maxvalue 50;

Si el valor corriente es ya 50, cuando usted intenta seleccionar SEQ1. NEXTVAL lo que va
¿pase? (Elija la mejor respuesta.) A. La secuencia irá en bicicleta y la edición 0. B. La secuencia
irá en bicicleta y la edición 1. C. La secuencia reeditará 50. D. Habrá un error.
9. Usted crea una secuencia como sigue:
cree la secuencia seq1 comienzan con 1;
526
Capítulo 12:
Creación de Otros Objetos de Esquema

Después de seleccionar de ello unas veces, usted quiere iniciarlo de nuevo para reeditar los números
ya generados. ¿Cómo puede usted hacer esto? (Elija la mejor respuesta.) A. Usted debe dejar caer y
recrear la secuencia. B. Usted no puede. De ninguna manera pueden los números de una secuencia
ser reeditados una vez ellos
han sido usados. C. Use el comando CAMBIA LA SECUENCIA PRINCIPIO de SEQ1 CON
1; reinicializar el siguiente valor a 1. D. Use el comando CAMBIA LA SECUENCIA CICLO de
SEQ1; reinicializar la secuencia a su
comienzo de valor. 10. Estudie el objeto expuesto siguiente:

¿Suponer que la secuencia SEQ1 fuera creada con el PEDIDO de opción e INCREMENTO POR el
SET a 1, qué valor será devuelto por la select SENTENCIA final? (Elija la mejor respuesta.) A. 2
B. 3 C. 4 D. Esto dependerá de si cualquier otra sesión selecciona de la secuencia mientras el
las select en el objeto expuesto están siendo ejecutadas.

Cree y Mantenga Índices


11. Una coacción ÚNICA en una columna requiere un índice. Cual de los guiones siguientes es
¿correcto? (Elija una o varias respuestas correctas.) A. Si un índice ÚNICO ya existe en la
columna, será usado. B. Si un índice NONUNIQUE ya existe será usado.
Pregunta de laboratorio
527

C. Si un índice NONUNIQUE ya existe en la columna, un índice ÚNICO será creado


implícitamente.
D. Si cualquier índice existe en la columna, habrá un error ya que el Oracle intenta crear
otro índice implícitamente. 12. Esta select fallará:
cree el índice de bitmap único en EMPLOYEES (department_id, hire_date);

¿Por qué? (Elija la mejor respuesta.)


A. Los índices de bitmap no pueden ser únicos. B. Las dos columnas son de tipos de datos
diferentes. C. Un índice de bitmap puede estar en sólo una columna. D. Hay ya un índice B*Tree
en DEPARTMENT_ID.
13. Usted ha creado un índice con esta select:
cree el índice ename_i en EMPLOYEES (last_name, first_name);

Como le puede ajustar el índice para incluir los cumpleaños de los EMPLOYEES, que es una
columna de tipo de fecha
¿DOB llamado? (Elija la mejor respuesta.) A. Use CAMBIAN EL ÍNDICE ENAME_I AÑADEN
LA COLUMNA DOB;. B. Usted no puede hacer esto debido a la falta de armonía de tipo de datos.
C. Usted debe dejar caer el índice y recrearlo. D. Esto sólo puede ser hecho si la columna DOB es
NULA en todas las filas existentes.

PREGUNTA DE LABORATORIO
La figura 12-7 en este capítulo muestra un diagrama de relación de la entidad para un sistema simple
diseñado para almacenar
y analice ventas. Las columnas para las VENTAS de comando de hecho son como sigue:
■ SALE_ID Clave primaria generada
por el sistema
■ CHANNEL_ID Clave foránea a CANALES ■
PRODUCT_ID Clave foránea a PRODUCTOS
■ SHOP_ID Clave foránea a
TIENDAS ■ DAY_ID Clave
foránea hasta DÍAS
■ CANTIDAD La cantidad del producto se
vendió
528
Capítulo 12:
Creación de Otros Objetos de Esquema

Se espera que habrá varios millones de filas de VENTAS por año. Las tablas de dimensión son como
sigue:
PRODUCTOS Una lista de todos los productos, incluso precio. Cardinality de unos cientos
CANALICE métodos de ventas Posibles, como el paseo - en, Internet, y llame por teléfono Detalles
de TIENDAS de todas las tiendas - no más que un par de docenas de DÍAS Fechas para cuales
ventas están siendo almacenados: 365, identificado por número de día
Escriba el código para crear las tablas; cree índices; cree coacciones. Cree secuencias para ser usadas
para
claves primarias donde necesario. Cree algunas vistas que presentarán los datos de una moda comprensible.
MÍ PRUEBAN RESPUESTAS
Cree Vistas Simples y Complejas
Mí Respuestas de Prueba
529
1. los ® D, E. Aggregations y junturas hacen un complejo de vista y hacen el imposible
DML. ✓
® A, B, C. Selection y proyección o columnas que renombran no hace el complejo de vista. ˚
2. ® D. Triste pero verdadero. Las vistas no ayudan al
rendimiento. ✓
® A es incorrecto porque una vista es sólo una select SENTENCIA; esto no preejecuta la pregunta.
El B es ˚
incorrecto porque el Oracle optimizer clasificará cualquier diferencia en la sintaxis. El C es
incorrecto porque, aunque las vistas sean precompiladas, esto no afecta la velocidad de compilar la
select de un usuario.
3. ® C. El CON LA OPCIÓN DE CONTROL prevendrá DML que haría que una fila desaparezca

de la vista.
® A, B, D. A es incorrecto porque las vistas son en ausencia creadas leyó/escribió. El B es
incorrecto porque ˚
la vista es una vista simple. El D es incorrecto porque la select no puede tener éxito porque la
opción de control lo rechazará.

Recupere Datos de Vistas


4. ® A. Hay un NO coacción de CLAVE PRIMARIA o NULA en DEPT.DEPTNO. ✓
® B, C, D. El B es incorrecto porque las coacciones son hechas cumplir en tablas de detalle, no
en vistas. C y ˚
Los D son incorrectos porque el mensaje de error sería diferente.

Cree Sinónimos Privados y Públicos


5. ® B, los sinónimos de D. Public no son objetos de esquema y tan sólo pueden ser dirigidos
directamente. Ellos ✓
puede tener los mismos nombres que objetos de esquema.
® A, C. Éstos son incorrectos porque deben conceder a usuarios privilegios en un sinónimo
público antes ˚
ellos pueden verlo o seleccionar de ello.
6. ® B. El comando de prioridad debe buscar el esquema namespace antes del público namespace,
entonces ✓
será el sinónimo privado (a EMPLOYEES) que será encontrado.
® A, C, D. A es incorrecto porque un sinónimo puede existir tanto en el público namespace
como en el ˚
esquema namespace. El C es incorrecto porque el comando de prioridad encontrará el sinónimo
privado primero. El D es incorrecto porque no sería posible tener una comando y un sinónimo
privado en el mismo esquema con el mismo nombre.
530
Capítulo 12:
Creación de Otros Objetos de Esquema

7. ® D. El sinónimo será fino, pero la vista será inválida. El oracle intentará compilar de nuevo ✓
la vista, pero esto fallará.
® A, B, C, E. A es incorrecto porque la vista será inválida. El B es incorrecto porque la
FUERZA ˚
la palabra clave sólo puede ser aplicada creando una vista (y todavía sería inválido, aún así). El C
es incorrecto porque el sinónimo será fino. El E es incorrecto porque las vistas no son dejadas caer
implícitamente (a diferencia de índices y coacciones).

Cree, Mantenga, y Use Secuencias


8. ® D. La falta es NOCYCLE, y la secuencia no puede avanzar adelante. ✓
® A, B, C. A y B son incorrectos porque el CICLO es inhibido en ausencia. Si fuera habilitado, ˚
el siguiente número publicado sería 1 (no cero) porque 1 es la falta para el PRINCIPIO CON. El
C es incorrecto porque de ninguna manera va una repetición de cuestión de secuencia valorar.
9. ® A. No es posible cambiar el siguiente valor de una secuencia, entonces usted debe
recrearlo. ✓
® B, C, D. El B es incorrecto porque, mientras una secuencia NOCYCLE nunca puede reeditar
números, ˚
no hay ninguna razón por qué una nueva secuencia (con el mismo nombre) no puede hacer así. El
C es incorrecto porque el PRINCIPIO CON sólo puede ser especificado en el tiempo de creación.
El D es incorrecto porque esto no forzará un ciclo inmediato; esto sólo afectará lo que pasa cuando
la secuencia alcanza su MAXVALUE o MINVALUE.
10. ® D. Si la secuencia está siendo usada por otras sesiones, no hay saber cuantos ✓
los incrementos pueden haber ocurrido entre el primer y las segundas select de
INSERCIÓN.
® A, B, C. La respuesta sería 4, C, salvo que podría haber habido ˚ forzado de incrementos
por otras sesiones. A y B son incorrectos porque el ROLLBACK no invertirá los incrementos de
secuencia.

Cree y Mantenga Índices


11. ® A, B. Un ÚNICO o un índice NONUNIQUE pueden ser usados para hacer cumplir ✓ único
coacción.
® C, D. El C es incorrecto porque no hay ninguna necesidad de crear otro índice (de hecho, usted
no puede poner índice a 
la misma columna dos veces aun si usted quiere a). El D es incorrecto porque si un índice existe, el
Oracle no intentará crear al otro.
12. ® A. El BITMAP de palabras claves y ÚNICO es mutuamente exclusivo. Y usted no querría ✓
hacer esto, de todos modos.
Respuesta de laboratorio
531

® B, C, D. Los B y C son incorrectos porque un índice de bitmap puede ser compuesto, con
columnas de ˚
tipos de datos diferentes. El D es incorrecto porque el índice de bitmap no está en el
DEPARTMENT_ID solo, que no sería posible.
13. ® C. No es posible cambiar las columnas de un índice después de la creación. ✓
® A, B, D. El B es incorrecto porque el tipo de datos no es el problema. A y D son incorrectos
porque ˚
las columnas de un índice son fijadas en el tiempo de creación.

RESPUESTA DE LABORATORIO
Esto es una solución posible:
/*create los tables*/crean ventas de comando (sale_id número, channel_id número, product_id
número, shop_id número, day_id número, número de cantidad); cree productos de comando (product_id
número, pname varchar2 (20), número de precios); cree canales de comando (channel_id número,
cname varchar2 (20)); cree tiendas de comando (shop_id número, diríjase a varchar2 (20)); cree
días de comando (day_id número, fecha de día);/*pre-create los índices para ser usados para
constraints*/crean el índice único prod_pk en productos (product_id); cree el índice único
chan_pk en canales (channel_id); cree el índice único shop_pk en tiendas (shop_id); cree el
índice único day_id durante días (day_id); cree el índice único sales_pk en ventas (sale_id); los
índices de bitmap de/*create en las columnas de dimensión del hecho table*/crean el índice de
bitmap sales_chan en ventas (channel_id); cree el índice de bitmap sales_prod en ventas
(product_id); cree el índice de bitmap sales_shop en ventas (shop_id); cree el índice de bitmap
sales_date en ventas (day_id); los/*add la clave primaria constraints/* cambia productos de
comando añaden la coacción prod_pk clave primaria (product_id); cambie los canales de comando
añaden la coacción chan_pk clave primaria (channel_id); cambie las tiendas de comando añaden la
coacción shop_pk clave primaria (shop_id); cambie los días de comando añaden la coacción day_pk
clave primaria (day_id); cambie ventas de comando añaden la coacción sales_pk clave primaria
(sale_id); los/*add la clave foránea constraints*/cambia ventas de comando añaden la coacción
sales_prod_fk clave foránea (product_id) productos de referencias; cambie ventas de comando
añaden la coacción sales_chan_fk clave foránea (channel_id) canales de referencias; cambie
ventas de comando añaden la coacción sales_shop_fk clave foránea (shop_id) tiendas de
referencias; cambie ventas de comando añaden la coacción sales_day_fk clave foránea (day_id)
días de referencias;/*create las secuencias para claves primarias: cache muchos valores para la
comando de hecho, pero no prepublican valores para el en gran parte estático

532
Capítulo 12:
Creación de Otros Objetos de Esquema

tablas de dimensión. Esto guardará algunos memory*/crean la secuencia sales_seq cache 1000;
cree la secuencia product_seq nocache; cree la secuencia channel_seq nocache; cree la secuencia
shop_seq nocache; cree la secuencia day_seq nocache; los/*create una vista para analizar ventas
en varios dimensions*/crea la vista sales_analysis como cname escogido, pname, dirección, día,
suman (cantidad) el total de ventas, canales, productos, tiendas, días donde grupo de ventas
channel_id=channels.channel_id y de ventas product_id=products.product_id y de ventas
shop_id=shops.shop_id y de ventas day_id=days.day_id agrupando SETs ((cname, pname, dirección,
día), (dirección, pname), (pname, día));
A
Sobre el CD

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

534
Apéndice: Sobre el CD
El CD-ROM incluido con este libro viene completo de MasterExam y una versión

electrónica del libro. El software es fácil a instalar en cualquier Windows 98/NT/2000/XP/Vista

el comandoador y debe ser instalado para tener acceso al aspecto de MasterExam. Usted
puede, sin embargo,
hojee el libro electrónico directamente del CD sin la instalación. Para registrar para un segundo
sobresueldo MasterExam, simplemente haga clic en el enlace de Formación en Línea en la Página
Principal y siga las direcciones al gratis en línea registro.

Requisitos del sistema


El software requiere el Windows 98 o más alto e Internet Explorer 5.0 o encima y
20 mb de espacio en el disco duro para instalación llena. El libro electrónico requiere el
Adobe Acrobat Reader.

Instalar y Ejecutar MasterExam


Si su lector de CD-ROM de comandoador es configurado al automóvil ejecutado, el
CD-ROM va
automáticamente inicialize para insertar el disco. De la pantalla inicial usted puede instalar
MasterExam pulsando el botón MasterExam. Esto comenzará el proceso de instalación y
creará un grupo de programa llamado "LearnKey". Para ejecutar MasterExam, navegue para
Comenzar | Programas | LearnKey. Si el automóvil aspecto ejecutado no lanzara su CD,
ojeada al CD e hiciera clic en el LaunchTraining.exe icono.

MasterExam
MasterExam le provee de una simulación del examen actual. El número de
las preguntas, el tipo de preguntas, y el tiempo permitido son queridos para ser una
representación exacta del entorno de examen. Usted tiene la opción de tomar un
examen de libro abierto, incluso indirectas, referencias, y respuestas; un examen de libro
cerrado; o la simulación de MasterExam calculada.
Cuando usted lanza MasterExam, una visualización de reloj digital aparecerá en la
esquina izquierda superior de su pantalla. El reloj seguirá contando al revés al cero a
menos que usted decida terminar el examen antes de que el tiempo expire.
Libro electrónico
Apoyo técnico
535
Los contenido enteros del Manual son proporcionados en PDF. El Lector de Acróbata del
Adobe
ha sido incluido en el CD.

Ayuda
Un archivo de ayuda es proporcionado por el botón de ayuda en la página principal en el
izquierdo inferior
esquina. Un aspecto de ayuda individual también está disponible por MasterExam.

Borrar Instalación (ones)


MasterExam es instalado a su disco duro. Para los mejores resultados para retiro de
programas
use el Principio | Programas | LearnKey | No instalan opciones de borrar MasterExam.

Apoyo técnico
Para preguntas en cuanto al contenido técnico del libro electrónico o MasterExam,
por favor visite www.osborne.com o envíe por correo electrónico
customer.service@mcgraw-hill.com. Para clientes fuera de los 50 Estados Unidos,
envíe por correo electrónico international_cs@mcgraw-hill.com.

Apoyo técnico de LearnKey


Para problemas técnicos con el software (instalación, operación, borrando
instalaciones), por favor visite www.learnkey.com o envíe por correo electrónico
techsupport@learnkey.com.
Esta página intencionadamente se dejó en blanco

Glosario
A

Atomicity ácido, consecuencia, aislamiento, y durabilidad. Cuatro características


que una base de datos relacional debe ser capaz de mantener para transacciones.

ADDM Base de datos Automática Monitor Diagnóstico. Un instrumento que genera


informes de afinación de rendimiento basados en fotos en el AWR.

AES Estándar de Cifrado Avanzado. Un método de cifrado de datos extensamente


usado.

AL16UTF16 Unico de SET de caracteres de 2 bytes de anchura fija, comúnmente


especificado para el SET de caracteres NLS usado para NVARCHAR2, NCHAT, y
tipos de datos NCLOB.

alias En Red de Oracle, un indicador a una cuerda conectar. Un alias debe ser
resuelto en la dirección de un oyente y el nombre de un servicio o instancia.

Americano de ANSI Instituto de Estándares Nacional. Un cuerpo estadounidense


que define varios estándares relevantes para la informática.

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

538
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Interfaz para programas de aplicación de API. Un método definido para manipular datos,
típicamente puestos en práctica como un SET de procedimientos PL/SQL en un paquete.

ASCII de ASCII. Un estándar (con muchas variaciones) para codificar cartas y otros carácteres
como bytes.

ASM dirección de Almacenamiento Automática. Un LVM proveído de la base de datos de Oracle.

atribuya Un elemento de un tuple (aka una columna).

AVG Una función que divide la suma de una columna o expresión por el número de filas no
nulas en un grupo.

B
proceso subordinado Un proceso que es la parte del instancia: lanzado en inicializador.

BFILE Un tipo de datos de objeto grande que es almacenado como un archivo de sistema
operativo. El valor en la columna de comando es un indicador al archivo.

ligue la variable que Un valor pasó de un proceso de usuario a una select SQL en el tiempo
de ejecución de select.

Binario de GOTA Objeto Grande. Un tipo de datos de GLOBO para datos binarios, como
fotografías y clips de vídeo.

bl o c k T h e u n i t s o f s t o r un g e i n t o w h i c h d un t un f i l e s un r e f o r m de un t t e d. T h e s i z e c un n b e 2
kilobyte, 4 kilobyte, 8 kilobyte, 16 kilobyte, 32 kilobyte, o 64 kilobyte. Algunas plataformas no
permitirán todas estas tallas.

El producto cartesiano a Veces llamaba una juntura enfadada. Un término matemático que
se refiere al SET de datos creados fusionando las filas de dos o más tablas.

Hora central europea de CET. Un huso horario usó en la mayor parte de Europa (aunque no
Gran Bretaña) que es una hora delante de la hora universal coordinada con el horario de verano en
efecto durante los meses de verano.
Glosario
539

SET de caracteres El sistema que codifica para representar datos dentro de bytes. Los SETs de
caracteres diferentes pueden almacenar carácteres diferentes y pueden no ser convenientes para todas las
lenguajejes. Los SETs de caracteres de Unicode pueden almacenar cualquier carácter.

compruebe la coacción Una regla simple hecha cumplir por la base de datos que restringe los
valores que pueden ser entrados en una columna.

la arquitectura cliente-servidor Un paradigma de procesamiento donde la aplicación está dividida


en el software de cliente que se relaciona con el software de servidor y usuario que se relaciona con los
datos.

Carácter de CLOB Objeto Grande. Un tipo de datos de GLOBO para datos de carácter, como
documentos de texto, almacenados en el SET de caracteres de base de datos.

agrúpese Un entorno de hardware donde más de un comandoador comparte el acceso al


almacenamiento. Una base de datos RAC consiste en varios instancias en varios comandoadores que
abren una base de datos en el almacenamiento compartido.

el racimo segmenta Un segmento esto que puede contener una o varias tablas, denormalized en una
estructura sola.
FÚNDASE Una función que devuelve el primer valor no nulo de su lista de parámetro. Si todos sus
parámetros son nulos, entonces un valor nulo es devuelto.

columna Un elemento de una fila: las tablas son estructuras de dos dimensiones, divididas
horizontalmente en filas y verticalmente en columnas.

destine A hacer permanente un cambio en datos.

recuperación completa Después de restaurar de archivos de base de datos dañados, esto se aplica
cada uno rehace para poner la base de datos al día sin la pérdida de datos.

conecte el identificador Un alias de Red de Oracle.

conecte la cuerda Los detalles de conexión a la base de datos tenían que establecer una sesión: la
dirección del oyente y el servicio o nombre de instancia.

la copia de seguridad consecuente Una copia de seguridad hecha mientras la base de datos está
cerrada.
540
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

coacción Un mecanismo para hacer cumplir reglas de datos: que un valor de columna debiera
ser único o sólo puede contener ciertos valores. Una coacción de clave primaria especifica que la
columna debe ser tanto única como no nula.

controle archivan El archivo que contiene indicadores al resto de la base de datos, información
de secuencia crítica, y el depósito RMAN.

Unidad central de proceso de unidad central de proceso. El chip que proporciona la


capacidad de procesamiento de un comandoador, como Intel Pentium o un Sol SPARC.

bloques de datos Las unidades en las cuales los ficheros de datos son formateados.

el diccionario de datos Las tablas poseídas por SYS en el SISTEMA tablespace que definen
la base de datos y los objetos dentro de ella.

el diccionario de datos visualiza Vistas en las tablas de diccionario de datos que dejan al
DBA investigar el estado de la base de datos.

los datos guardan Una instalación por lo cual una copia de la base de datos de producción
es creada y actualizada (posiblemente en tiempo real) con todos los cambios aplicados a la base
de datos de producción.
los datos bombean Una instalación para transferir cantidades grandes de datos en la alta
velocidad en, de, o entre bases de datos.

el cache de memoria intermedia de base de datos Un área de memoria en el SGA


usado para trabajar en bloques copió de ficheros de datos.

enlace de base de datos Una conexión de una base de datos al otro, basado en un nombre
de usuario y contraseña y una cuerda conectar.

fichero de datos La estructura basada en el disco para almacenar datos.

Administrador de Base de datos de DBA. La persona responsable de crear y manejar bases de


datos de Oracle - esto podría ser usted.
Glosario
541

El papel de DBA Un papel presembrado aseguró la compatibilidad con versiones anteriores que incluye
todos los privilegios tenía que manejar una base de datos, salvo que necesario para inicializar o apagar.

DBCA El Ayudante de Configuración de Base de datos. Un instrumento de GUI para creación,


modificación, y caída de instancias y bases de datos.

Sistema de administración de bases de datos de DBMS. A menudo usado de modo intercambiable con
RDBMS.

DBWn o DBWR El Escritor de Base de datos. El proceso subordinado responsable de escribir bloques
cambiados desde la base de datos almacena el cache en un buffer a los ficheros de datos. Un instancia
puede tener hasta 10 procesos de escritor de base de datos, DBW0 por DBW9.

Lenguaje de Definición de Datos de DDL. El subconjunto de SQL manda que el cambio objete
definiciones dentro del diccionario de datos: CREE, CAMBIE, CÁIGASE, y TRUNCADO.

estanque Una situación donde dos sesiones bloquean el uno al otro, tal que ninguno puede hacer nada.
Los puntos muertos son descubiertos y resueltos automáticamente por la base de datos.

DECODIFIQUE Una función que pone en práctica "si entonces más" lógica condicional probando dos
términos de la igualdad y devolviendo el tercer término si ellos son iguales o, opcionalmente,
devolviendo algún otro término si ellos no son.

el paso directo Un método de entrada-salida en ficheros de datos que evita el cache de memoria
intermedia de base de datos.

objeto de directorio Un directorio de Oracle: un objeto dentro de la base de datos que señala a un
directorio de sistema operativo.

Lenguaje de Manipulación de Datos de DML. El subconjunto de SQL manda que datos de cambio
dentro de la base de datos: INERTE, ACTUALIZACIÓN, BORRAR, y FUSIÓN.

DHCP Protocolo de Configuración de Servidor Dinámico. El estándar para configurar las


características de red de un comandoador, como su dirección IP, en un entorno que cambia donde los
comandoadores pueden ser movidos de una posición al otro.

Servicio de Nombre de dominio de sistema de nombres de dominio. El mecanismo de TCP


para resolver la red llama en direcciones IP.
542
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

el dominio El SET de valores un atributo es permitido tomar. Terminología: las tablas tienen
filas; las filas tienen columnas con valores. O: las relaciones tienen tuples; los tuples tienen
atributos con valores tomados de su dominio.

Sistema de apoyo para la toma de decisiones de DSS. Una base de datos, como un depósito de
datos, optimizado para ejecutar preguntas en comparación con trabajo de OLTP.

fácil conectan Un método de establecer una sesión contra una base de datos especificando la
dirección en el oyente y el nombre de servicio sin usar un alias de Red de Oracle.

EBCDIC Extended Binary Co ded Decimal Interchange Co de. Un estándar desarrollado por
IBM para codificar cartas y otros carácteres en bytes.

la variable de entorno Un SET variable en la cáscara de sistema operativo que puede ser
usada por el software de aplicación y por shell scripts.

equijoin Una condición de juntura usando a un operador de igualdad.

el hecho tabula La comando central en un esquema de estrella, con columnas para valores
relevantes para la fila y columnas usadas como claves foráneas a las tablas de dimensión.

FGA Revisión de Grained fina. Una instalación para rastrear el acceso de usuario a datos
basados en las filas que son vistas o manipuladas.

la copia de seguridad llena que Una copia de seguridad que contiene todos los bloques
de los archivos hizo una copia de seguridad, no sólo aquellos bloques cambió desde la última
copia de seguridad.

G
Hora media de Greenwich GMT. Ahora referido como hora universal coordinada, esto es el
huso horario del meridiano por el Observatorio de Greenwich en Londres.
Glosario
543

la computación grid Una arquitectura donde la entrega de un servicio a usuarios finales no es atada
a ciertos recursos de servidor, pero puede ser proporcionada de dondequiera en un fondo de recursos.

EL GRUPO POR Una cláusula que especifica las filas de atributo que se agrupan debe tener en
común para ellos para ser agrupado juntos.

Interfaz gráfica de usuario de GUI. Una capa de una aplicación que deja a usuarios trabajar con la
aplicación por un terminal gráfico, como un comandoador personal con un ratón.

Protocolo de transmisión de hipertexto de HTTP. El protocolo que habilita el World Wide Web
(ambos inventados en la Organización europea para la Investigación Nuclear en 1989), esto es un
protocolo acodado que atropella el TCP/IP.

Señal de Pleamar de HWM. Esto es el último bloque de un segmento que ha estado alguna vez bloques
usados encima de esto son la parte del segmento, pero todavía no son formateados para el uso.

Yo

La entrada-salida Introdujo/salida. La actividad de lectura de o escritura a discos a menudo el punto


más lento de una operación de informática.

IBM International Business Machines. Un hardware conocido, software, y compañía de servicios.

la copia de seguridad inconsecuente Una copia de seguridad hecha mientras la base de datos
estaba abierta.

INITCAP Una función que acepta una serie de carácteres y devuelve cada palabra en el instancia de
título.

la copia de seguridad incremental que Una copia de seguridad que contiene sólo bloquea lo
que ha sido cambiado desde la última copia de seguridad fue hecha.
544
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

la juntura interior Cuando equijoins y nonequijoins son realizados, filas de la fuente y


apuntan tablas es emparejada. Éstos se mencionan como junturas interiores.
INSTR Una función que devuelve la posición posicional del acontecimiento enésimo de una
serie especificada de carácteres en una cuerda de la fuente.

la recuperación de instancia La reparación automática del daño causada por un cierre


descomandoado de la base de datos.

Índice de IOT Comando Organizada. Un tipo de comando donde las filas son almacenadas en
los bloques de hoja de un segmento de índice.

Protocolo Internet de IP. Juntos con el Protocolo de Control de Transmisión, TCP/IP: el


protocolo de comunicación estándar de facto usado para la comunicación de cliente/servidor
sobre una red.

Protocolo de Comunicaciones de Interproceso de IPC. El protocolo específico para la


plataforma, proporcionado por su vendedor OS, usado para procesos que se ejecutan en la misma
máquina para comunicarse el uno con el otro.

Organización internacional para la normalización Organización internacional para


Estandarización. Un grupo que define muchos estándares, incluso SQL.

J2EE Java 2 Edición de Empresa. El estándar para desarrollar aplicaciones de Java.

JOINON Una cláusula que permite la especificación explícita de columnas de juntura sin tener en cuenta
sus nombres de columna. Esto proporciona un formato de conexión flexible.

JOINUSING Una sintaxis que permite que una juntura natural sea formada en columnas específicas con
nombres compartidos.

la conexión Implica conectar dos o más tablas basadas en atributos comunes. La conexión
permite que datos sean almacenados en la tercera forma normal en tablas distintas, en vez de en
una comando grande.
Glosario
545

JVM Java Máquina Virtual. El entorno de tiempo de ejecución necesario para ejecutar código escrito
en Java. El oracle proporciona un JVM dentro de la base de datos, y habrá el que proporcionado por su
sistema operativo.

LAST_DAY Una función solía obtener el día anterior en un mes dado cualquier artículo de fecha
válido.

LDAP Protocolo de Acceso de Directorio Ligero. La realización de TCP del estándar de directorio X25,
usado por el Directorio de Internet de Oracle para resolución de nombre, seguridad, y autenticación.
LDAP también es usado por otros vendedores de software, incluso Microsoft e IBM.

LA LONGITUD Una función que computa el número de carácteres en una cuerda incluso espacios y
carácteres especiales.

Escritor de Registro de LGWR. El proceso subordinado responsable de limpiar con agua vectores de
cambio de la memoria intermedia de registro en la memoria al en línea rehace archivos históricos en el
disco.

el cache de biblioteca Una estructura de memoria dentro del fondo compartido, usado para
esconder select SQL analizado en su forma ejecutable.

el oyente El proceso de lado del servidor que escucha para solicitudes de conexión a la base de datos
de procesos de usuario y lanza procesos de servidor para establecer sesiones.

VOLEE POR ALTO el Objeto Grande. Una estructura de datos que es demasiado grande para
almacenar dentro de una comando. Los GLOBOS (El oracle apoya varios tipos) son definidos como
columnas de una comando, pero son físicamente almacenados en un segmento separado.

registre cambian La acción de cerrar un grupo de archivo histórico en línea y abrir al otro;
provocado por el proceso de LGWR que llena el primer grupo.

LVM gerente de Volumen Lógico. Una capa de software que abstrae el almacenamiento físico dentro de su
comandoador del almacenamiento lógico visible a una aplicación.
546
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Monitor de Manejabilidad de MMON. El proceso subordinado responsable de información de


supervisando de rendimiento creciente y levantamiento de alarmas.

MOD La operación de módulo, una función que devuelve el resto de una operación de división.

MONTHS_BETWEEN Una función que computa el número de meses entre dos parámetros
de fecha dados y está basada durante un mes de 31 días.

la base de datos montada Una situación donde el instancia ha abierto el archivo de


control de base de datos, pero no el en línea rehace archivos históricos o los ficheros de datos.

Tiempo medio de MTBF entre frainstancia. Una medida de la duración media de duración
para una base de datos entre cierres inesperados.

Tiempo medio de MTTR para recuperar. El tiempo medio esto toma para poner la base de
datos a disposición para el uso normal después de un frainstancia.
multiplexión Mantener copias múltiples de archivos.

el namespace Una agrupación lógica de objetos dentro de los cuales ningunos dos objetos
pueden tener el mismo nombre.

la juntura natural Una juntura realizó la utilización de la sintaxis de JUNTURA


NATURAL cuando la fuente y las tablas objetivo son implícitamente equijoined usando todas las
columnas idénticamente llamadas.

NCLOB Carácter Nacional Objeto Grande. Un tipo de datos de GLOBO para datos de carácter,
como documentos de texto, almacenados en el SET de caracteres de base de datos nacional
alternativo.

NETBEUI NETBIOS Interface de Usuario Extenso. Una versión realzada de NETBIOS.

La Red de NETBIOS Ingreso Básico Salida el Sistema. El protocolo de comunicaciones de red


que fue quemado en la primera tarjeta de red aquella IBM alguna vez producida.
Glosario
547

NLS Apoyo de Lenguaje Nacional. La capacidad de la base de datos de Oracle de apoyar a muchos
entornos ahora lingüísticos, geográficos, y culturales por lo general se refería como a la globalización.

nodo Un comandoador adjuntado a una red.

el nonequijoin Realizado cuando los valores en las columnas de juntura realizan la condición de
juntura basada en una expresión de desigualdad.

nu l l T h e un b s e n c e o f un v un l u e, yo n d i c un t i n g t h un t t h e v un l u e i s n o t k n o w n, m de i s s i n g, o inaplicable.

NULLIF Una función que prueba dos términos de la igualdad. Si ellos son iguales, las vueltas de
función nulas; más esto devuelve el primer de los dos términos probados.

NVL Una función que devuelve el artículo original sin alterar o un artículo alternativo si el término
inicial es nulo.

NVL2 Una función que devuelve un nuevo si - artículo nulo si el artículo original es nulo o una
alternativa si no el artículo nulo si el término original no es nulo.

Contenedores de Oracle de OC4J para J2EE. La estructura de control proveyó por el Servidor de
Aplicación de Oracle para ejecutar programas de Java.
Oracle de OCA Socio Certificado.

Interface de Llamada de Oracle de OCI. Un API, publicado como un SET de bibliotecas C, que los
programadores pueden usar para escribir procesos de usuario que usarán una base de datos de Oracle.

Oracle de OCP Profesional Certificado. La calificación usted trabaja hacia.

ODBC Conectividad de Base de datos Abierta. Un estándar se desarrolló por Microsoft para
comunicarse con bases de datos relacionales. El oracle provee a un driver ODBC que permitirá a clientes
Microsoft que se ejecuta conductos pro para conectar a una base de datos de Oracle.
548
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

la copia de seguridad fuera de línea Una copia de seguridad hecha mientras la base de
datos está cerrada.

OLAP Procesamiento Analítico en Línea. Seleccione preguntas de ejecutando de implicación de


trabajo intensivas contra una base de datos (por lo general) grande. El oracle proporciona
capacidades OLAP como una opción, además de las instalaciones de pregunta estándares.

OLTP Procesamiento de Transacción en Línea. Un modelo de actividad dentro de una base de


datos tipificada por un gran número de pequeño, corto, transacciones.

la copia de seguridad en línea Una copia de seguridad hecha mientras la base de datos
está abierta.

en línea rehaga el registro Los archivos a los cuales los vectores de cambio son
derramados por el LGWR.

Sistema operativo de OS. Típicamente, en el entorno de Oracle, esto será una versión de Unix
(quizás Linux) o Microsoft Windows.

El protocolo de comunicaciones patentado del Oracle de Red de oracle, acodado encima de


un protocolo de estándar de industria.

ORACLE_BASE El directorio raíz en el cual los productos de Oracle son instalados.

ORACLE_HOME El directorio raíz de cualquier producto de Oracle.

la juntura externa que Una juntura realizó cuando filas, que no son recuperadas por una
juntura interior, es incluida para la recuperación.

analice Una acción que converte select SQL en una forma conveniente para la ejecución.
Programa de PGA área Global. La variable puso la talla al bloque de la memoria usada para
mantener el estado de una sesión de base de datos. PGAs son privados a la sesión y controlado
por el proceso de servidor de la sesión.

PL/SQL Lenguaje de Pregunta de Lenguaje/Estructurar Procesal. El lenguajeje de programación


patentado del oracle, que combina construcciones procesales, como control de flujo, y capacidades
de interface de usuario con SQL.
Glosario
549

Monitor de Proceso de PMON. El proceso subordinado responsable de supervisar el estado de las


sesiones del usuario contra un instancia.

la clave primaria La columna (o la combinación de columnas) cuyo valor (es) puede ser usado para
identificar cada fila en una comando.

la proyección La restricción de columnas seleccionada de una comando. Usando la proyección, usted


sólo recupera las columnas del interés y no cada columna posible.

RAC Verdaderos Racimos de Aplicación. La tecnología que se agrupa del oracle, que permite que varios
instancias en máquinas diferentes abran la misma base de datos para escalabilidad, rendimiento, y tolerancia
de falta.

ASALTE la Matriz Redundante de Discos Baratos. Técnicas para realzar rendimiento y/o tolerancia de
falta usando a un gerente de volumen para presentar varios discos físicos al sistema operativo como un
disco lógico solo.

dispositivo crudo Una partición de disco o disco no formateada.

Sistema de gestión de Base de datos relacional de RDBMS. A menudo usado de modo intercambiable
con DBMS.

Memoria de acceso aleatorio de RAM. Los chips que arreglan la verdadera memoria en su hardware, a
diferencia de la memoria virtual presentada al software por el sistema operativo.

la integridad de referencia que Una regla definió en una comando que especifica que los valores
en una columna (o columnas) deben trazar un mapa en aquellos de una fila en otra comando.

relación Una estructura de dos dimensiones que consiste en tuples con atributos (aka una comando).

REEMPLACE Una función que substituye cada acontecimiento de un artículo de búsqueda en la


cuerda de la fuente con un término de reemplazo y devuelve la cuerda de la fuente modificada.
550
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Gerente de Recuperación de RMAN. La copia de seguridad del oracle e instrumento de


recuperación.

rowid El identificador único de cada fila en la base de datos, usada como un indicador a la
posición física de la fila.

el esquema Los objetos poseído por un usuario de base de datos.

Número de Cambio de Sistema de SCN. El número que incrementa continuamente solía


rastrear la secuencia y el tiempo exacto de todos los acontecimientos dentro de una base de datos.

segmente Un objeto de base de datos, dentro de un esquema, que almacena datos.

selección La extracción de filas de una comando. La selección incluye la restricción adicional


de las filas extraídas basadas en varios criterios o condiciones. Esto permite que usted sólo
recupere las filas que son del interés y no cada fila en la comando.

autóunase Una juntura requirió cuando las columnas de juntura provienen de la misma
comando. Conceptualmente, la comando de la fuente es duplicada y una comando objetivo es
creada. La autojuntura entonces trabaja como una juntura regular entre dos tablas distintas.

secuencia Un objeto de base de datos, dentro de un esquema, que puede


generar números consecutivos.

el nombre de servicio Un nombre lógico registrado por un instancia con un


oyente, que puede ser especificado por un proceso de usuario cuando cuestiones a conecta
la solicitud.

sesión Un proceso de usuario y un proceso de servidor, conectado al instancia.

Sistema de SGA área Global. El bloque de memoria compartida que contiene las
estructuras de memoria que arreglan un instancia de Oracle.

SID (1) Identificador de Sistema. El nombre de un instancia, que debe ser único en el
comandoador el instancia se ejecuta en. (2) Identificador de Sesión. El número solía
identificarse únicamente una sesión entró en el sistema a un instancia de Oracle.
Glosario
551

Monitor de Sistema de SMON. El proceso subordinado responsable de abrir una base de datos y
supervisar el instancia.
archivo de parámetro de Servidor de spfile. El archivo que contiene los parámetros solía construir un
instancia en la memoria.

SQL Lenguaje de Pregunta Estructurada. Una lenguaje de norma internacional para extraer datos de y
manipular datos en bases de datos relacionales.

SSL Capa de Enchufes Segura. Un estándar para asegurar transmisión de información, usando cifrado,
checksumming, y certificados digitales.

SUBSTR Una función que extrae y devuelve un segmento de una cuerda de la fuente dada.

SUME Una función que devuelve un total agregado de todos los valores de expresión numéricos no nulos
en un grupo.

sinónimo Un nombre alternativo para un objeto de base de datos.

el sysdba El privilegio que deja a un usuario conectar con sistema operativo o autenticación de
archivo de contraseña y crear, inicialize, y apague una base de datos.

los sysoper El privilegio que deja a un usuario conectar con sistema operativo o autenticación de
archivo de contraseña e inicializar y apagan (pero no crean) una base de datos.

el sistema Un esquema presembrado usado con objetivos de administración de base de datos.

t un bl e Un l o g i c un l t w o - d i m e n s i o n un l d un t un s t o r un g e s t r u c t u r e, c o n s i s t i n g o f r o w s un n d columnas.

tablespace La estructura lógica que extractos almacenamiento de datos lógico en tablas de


almacenamiento de datos físico en ficheros de datos.
552
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Examen

Protocolo de Control de Transmisión de TCP. Juntos con el protocolo Internet, TCP/IP: el


protocolo de comunicación estándar de facto usado para la comunicación de cliente/servidor
sobre una red.

TCP de TCPS con SSL. La versión de enchufes segura de TCP.

el tempfile El almacenamiento físico que arregla tablespace temporal, usado para almacenar
segmentos temporales.

TNS Red Transparente Substrate. El corazón de Red de Oracle, un protocolo acodado patentado
que se ejecuta encima de cualquier red subyacente transporta el protocolo usted decide usar
probablemente el TCP/IP.
TO_CHAR Una función que realiza fecha al carácter y conversiones de tipo de datos de número
al carácter.

TO_DATE Una función que explícitamente transforma artículos de carácter en valores de


fecha.

TO_NUMBER Una función que cambia artículos de carácter en valores de número.

la transacción Una unidad lógica del trabajo que completará en total o en absoluto.

tuple Una estructura de una dimensión que consiste en atributos (aka una fila).

Usuario de UGA área Global. Aquella parte del PGA que es almacenado en el SGA para
sesiones que pasan a servidores compartidos.

Interface de Usuario de UI. La capa de una aplicación que se comunica con usuarios finales
hoy día, con frecuencia gráficos: un GUI.

URL de URL. Un estándar para especificar la posición de un objeto en Internet que consiste en
un protocolo, un nombre de sistema central y dominio, un número de puerto de IP, un paso y
nombre del archivo, y una serie de parámetros.
Glosario
553

Hora universal coordinada Tiempo universal Coordinado. Antes conocido como la Hora media de
Greenwich (GMT), la hora universal coordinada es la zona de hora oficial global; todos los otros están
relacionados con ello como compensaciones, delante o detrás.

El X-Windows que El entorno de GUI estándar usó en la mayor parte de comandoadores, excepto
aquellos que ejecutan el Microsoft Windows.

XML Lenguaje de Maquetación Extensible. Un estándar para el intercambio de datos usando


documentos, donde el formato de los datos es definido por etiquetas dentro del documento.
Esta página intencionadamente se dejó en blanco
ÍNDICE

SÍMBOLO tipos de datos alfanuméricos, 458


CAMBIE el comando, 506-507
% (símbolo de porcentaje), 120-121 & (signo ""). Ver la substitución de signo "" () (paréntesis), 384; (los puntos
y coma), 65 _ (subrayan el carácter), 120-122 || (dobles símbolos de tubo). Ver el carácter
el operador de encadenamiento "(doblan citas), 454 '(citas solas), 77-81 3GLs (lenguajejes de la tercera
generación), 10

A
permisos de acceso, 412
Prueba de fuego
atomicity, 428 consecuencia, 429 definido, 537 durabilidad, 429-430 aislamiento, 429
preguntas ad hoc, 147 función de ADD_MONTHS, 173, 208-211 ADDM (Base de datos Automática
Diagnóstica
Monitor), 537 Estándar de Cifrado Avanzado (AES), 537 opción Avanzada, 36 AES (Estándar de Cifrado
Avanzado), 537 obteniendo agregado, 275 funciones de agregación. Ver funciones de grupo SET de caracteres de
AL16UTF16, 537 aliases, 61, 74, 537 TODO el operador
funciones de grupo, 275 subconsultas, 365, 370
CAMBIE el comando de ÍNDICE, 517 CAMBIAN el comando de COMANDO, 475-476 cambian comandos de
usuario, 42 CAMBIAN el comando de VISTA, 493-496 Instituto de Estándares Nacional americano (ANSI),
23, 537 Código Estándar americano para la información
Intercambio (ASCII), 538 substitución de signo ""
para nombres de columna, 147 DEFINEN el comando, 149-154 doble, 145-147 para expresiones, 147-149
descripción, 142-143 single, 143-145 para el texto, 147-149 comando de UNDEFINE, 149-154 VERIFICAN el
comando, 149-150, 154-156
Y operador, 126-128 ANSI (Instituto de Estándares Nacional americano),
23, 537 CUALQUIER operador, 365, 370 Interfaz para programas de aplicación (API), 538 servidor de
Aplicación, 5-7 instrumento de Control de Servidor de Aplicación, 8 capa de aplicación, 6 arquitectura, 3-5
operadores aritméticos, 70-73 COMO palabra clave, 75-76 comandoación de ascensión, 137-138 ASCII (Código
Estándar americano para la información
Intercambio), 538 ASM (dirección de Almacenamiento Automática), 538 atomicity, 428

Copyright © 2008 por El Clic de McGraw-Hill Companies, Inc aquí para términos de uso.

556
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

atributos, definidos, 538. También ver columnas comando de AUTOCOMMIT, 435-436 Base de datos
Automática Monitor Diagnóstico
(ADDM), 537 dirección de Almacenamiento Automática (ASM), 538 función de AVG, 281-282, 538

B
Índices de B*Tree, 470, 511-513
los procesos subordinados, 538 opción Básica, 36 ENTRE el operador, de 113 años, 116-119, 331 tipo de datos
BFILE, 459, 538 tipo de datos binarios, 458 Objeto Grande Binario (GOTA) tipo de datos, 55, 459, 538 ligan
variables, 538 índices de bitmap, 513-515 cálculos de caja negra, 170-171 preguntas ciegas, 60, 63 GOTA
(Objeto Grande Binario) tipo de datos, 55, 459, 538 bloques, definidos, 538 operadores Booleanos
Y, 126-128 contra operadores de comparación, 135 cláusula que TIENE, 298 NO, 131-132 y ENTRE
operador, 117-118 O, 128-131 y filas, 104
expresiones acorchetadas, 70, 132
C
Opción de CACHE, 503
Productos cartesianos
definido, 310, 538 descripción, 314 de dos o más tablas, 342-346
funciones de conversión de instancia. Ver el instancia de carácter
la conversión funciona la expresión de INSTANCIA, 254, 257-261

El CD-ROM incluido con el libro


archivo de ayuda, 535 software de LearnKey, 535 aspecto de MasterExam, 534 descripción, 533-534
instalación que borra, 535 Manual, 535 requisitos del sistema, 534 apoyo técnico, 535
CDs, compañero, 43 Hora central europea (CET), 538 unidades centrales de proceso (unidades centrales de
proceso), 540 CET (Hora central europea), 538 tipo de datos de TRABAJO POR HORAS, 55, 458 funciones
de conversión de instancia de carácter
INITCAP, 179-182, 543 más ABAJO, 177-179 descripción, 171 SUPERIOR, 179
encadenamiento de carácter (||) operador
funciones de manipulaciones de carácter, 183 y expresiones, 70 y valores NULOS, 84 descripción, 75-76
conversión de carácter
convertir fechas a, 235-240 números que converten a, 232-235 a fechas, 231, 241-242 a números, 230, 242-244
Carácter Objeto Grande (CLOB) tipo de datos,
459, 539 carácter datos literales, 65 funciones de manipulaciones de carácter
CONCAT, 183-184 INSTR, 189-190 LONGITUD, 184-185 LPAD, 186-187 descripción, 171 REEMPLAZAN,
193-196 RPAD, 186-187 SUBSTR, 190-193 NETO, 187-189

SETs de caracteres, 539 cadenas de caracteres


convertir números en, 235 conversiones implícitas, 229
versión de carácter, SQL*Plus, 28 condiciones basadas en el carácter, 107-110 coacciones de control, 473, 539
capa de cliente
SQL, 4 aplicaciones web, 6
herramientas de cliente
Developer de SQL
AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 35-37 instalar y lanzamiento, 33-
34 Interface de Usuario, 34-35
SQL*Plus
AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 30-32 en Linux, 27-28 descripción,
26 en Windows, 28-30
la arquitectura cliente-servidor, 4, 539 CLOB (Carácter Objeto Grande) tipo de datos, 459, 539 segmentos de
racimo, 539 racimos, 6, 539 SE FUNDE la función, 247, 253-254, 539 columna aliasing, 74-75, 384 nombres de
columna
substitución de signo "" por, 147 calificación ambigua, 317-318
columnas. También ver títulos de columnas específicas
la creación de tablas con especificaciones, 462-464 tipos de datos disponibles para, 457-461 definido, 456,
539 agrupación por múltiple, 291-294 en esquema de HORA, 40-41
Columna de COMM, 463 DESTINAN el comando, 409, 427, 431-432 comisión, definida, 539 CDs de
compañero, 43
Índice
operadores de comparación. También ver DONDE cláusula
ENTRE, 116-119, 331 contra operadores Booleanos, 135 igualdad, 113-116 EN, 119-120, 365, 369 desigualdad,
113-116 es NULA, 126 COMO, 120-125, 182 subconsultas de fila múltiple, 365-366 descripción, 113
subconsultas de fila sola, 365-366
parámetros de comparación, 255-256 recuperación completa, 539 vistas complejas, 492-493 índices compuestos,
515-516 operadores de desigualdad compuestos, 115 coacciones únicas claves compuestas, 470 llaves
compuestas, 18 comandoación compuesta, 139-142 preguntas compuestas, 382 función de CONCAT, 171, 183-
184 operador de encadenamiento. Ver el carácter
operador de encadenamiento cláusulas condicionales, 113 expresiones condicionales
funciones condicionales
Expresión de INSTANCIA, 257-261 DECODIFICAN la función, 254-257
funciones generales
FÚNDASE, 253-254 NULLIF, 249-252 NVL, 247-248 NVL2, 248-249
funciones que anidan, 245-246 funciones condicionales
Expresión de INSTANCIA, 257-261 DECODIFICAN la función, 254-257
operadores condicionales
expresiones basadas en el carácter, 109-110 y NO operador, 131 DONDE cláusula, 105
557
558
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-
051)

conecte identificadores, 539 conectan cuerdas, 539 reunión de conexión, 7 botones tipos radios de Tipo de
Conexión, 36 conexiones, indirectas, 4 consecuencia, 429 copias de seguridad consecuentes, 539 palabra clave
de COACCIÓN, 494 coacciones
definido, 405, 412, 450, 540 definición, 473-477 descripción, 469 tipos de
compruebe, 473, 539 clave foránea, 471-472 no nulo, 470-471 clave primaria, 471 único, 470
controle archivos, 540 transacciones de control
transacciones de base de datos
Prueba de fuego, 428-430 principio y final de, 430-431
descripción, 427-428 select de control de transacción
AUTOCOMMIT mandan, 435-436 DESTINAN el comando, 432 descripción, 431 comando de
ROLLBACK, 433-434 comando de SAVEPOINT, 434-435 ESCOGIDO PARA el comando de
ACTUALIZACIÓN,
436-438 funciones de conversión
descripción, 174, 228-229 TO_CHAR
convertir fechas a utilización de carácteres,
235-240
convertir números a utilización de carácteres,
232-235 definido, 228, 552 descripción, 231-232

TO_DATE
convertir carácteres a utilización de fechas,
205-206, 241-242 definido, 228 descripción, 231-232
TO_NUMBER
convertir carácteres a utilización de números,
243-244 definido, 228, 552 descripción, 231-232
tipos de
conversión de tipo de datos explícita, 231 conversión de tipo de datos implícita, 229-230
El Tiempo universal coordinado (hora universal coordinada), 553 subconsultas correlacionadas, 366-369
función de CONDE, 275, 279-280 comando de COUNTRIES, 41, 55-56 unidades centrales de proceso
(unidades centrales de proceso), 540 CREA el comando, 506-507 CREAN el comando de ESQUEMA, 38
CREAN la select de COMANDO, 477 CREAN el comando de USUARIO, 38 CREAN el comando de VISTA,
493-496 junturas enfadadas
la creación de productos Cartesianos con, 342-346 definido, 310, 538 descripción, 314
patas de gallo, 19 columna pseudo CURRVAL, 504 opción de CICLO, 503

D
bloques de datos, 540
Lenguaje de Control de datos (DCL) comandos, 24 datos, definidos, 53 Lenguaje de Definición de Datos (DDL)
comandos, 24 definido, 541 tablas
el cambio de definiciones, 465-466

coacciones, 469-477 creación de subconsultas, 464-465 creación con especificaciones de columna,


462-464 tipos de datos disponibles para columnas, 457-461 caída, 466-469 objetos de base de datos
principales, 450-456 estructura de comando, 456-457 truncamiento, 466-469
diccionarios de datos, 53, 540 vistas de diccionario de datos, 540 ficheros de datos, definidos, 540 guardias de
datos, 540 Lenguaje de Manipulación de Datos (DML)
definido, 541 BORRAR comando, 407-408 frainstancias de, 409-412 filas de generación para ser pasadas a
select,
363-364 comando de INSERCIÓN, 405-406 comando de FUSIÓN, 408-409 descripción, 24, 404-405 comando
TRUNCADO, 409 comando de ACTUALIZACIÓN, 406-407 y vistas, 492-493
modelos de datos, 22 normalización de datos, 14-22 bombas de datos, 540 extracción de datos. Ver la select
SENTENCIA
Índice

Sistema de administración de bases de datos (DBMS), 541 capa de base de datos, 6 transacciones de base de
datos
Prueba de fuego, 428-430 principio y final de, 430-431
Escritor de base de datos (DBWn o DBWR), 541 instrumento de Datapump, 405-406 fecha funciones
incorporadas
aritmética de fecha, 205-206 almacenamiento de fecha, 202-204 SYSDATE, 204-205
conversión de fecha
a carácteres, 229, 235-240 carácteres que converten a, 241-242
Tipo de datos de FECHA, 55, 458, 460 máscaras de formato de fecha, 236-238 literales de fecha, 190 funciones de
manipulación de fecha
ADD_MONTHS, 208-211 LAST_DAY, 213-214 MONTHS_BETWEEN, 207-208 NEXT_DAY, 211-213
descripción, 173, 206 RONDA, 214-216 TRUNC, 216-217, 460
almacenamiento de fecha, 202-204 condiciones basadas en la fecha, 110-113 día del parámetro de semana, 211-212
DBAs (Administradores de Base de datos), 540-541
559
comandoación de datos, 137-142 capa de datos, 6 tipos de datos, 457-46. También ver nombres de tipos de datos
específicos, Administradores de Base de datos (DBAs), 540-541 caches de memoria intermedia de base de datos,
540 Ayudante de Configuración de Base de datos (DBCA), 541 conexiones a la base de datos
indirecto, 4 Developer SQL, 35-37 SQL*Plus, 30-32
Instrumento de Control de base de datos, 8 enlaces de base de datos, 498, 540 entrada en el sistema de base de
datos, 29
DBCA (Ayudante de Configuración de Base de datos), 541 DBMS (Sistema de administración de bases
de datos), 541 DBWn o DBWR (Escritor de Base de datos), 541 DCL (Lenguaje de Control de Datos)
comandos, 24 DDL. Ver la Lenguaje de Definición de Datos máscara de formato de DD-MON-RR, 203
puntos muertos, definidos, 541 botón Debug, 35 parámetro de precisión decimal, 197, 199 Sistemas de
apoyo para la toma de decisiones (DSS), 14, 542 DECODIFICAN la función, 254-257, 541 cláusula POR
DEFECTO, 464 formato de fecha por defecto, 111
560
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen
1Z0-051)

Palabra clave POR DEFECTO, 462 DEFINEN el comando, 149-154 BORRAR comando
borrar filas de tablas con, 423-425 descripción, 407-408
esquemas de pruebas
la creación, 42-43 HORA, 38-42 OE, 38-42 descripción, 37
La comando de DEPARTMENTS, 41, 55 comandoación de bajada, 137-138 DESCRIBE el comando, 53-57,
228 tablas de detalle, 489 DHCP (Protocolo de Configuración de Servidor Dinámico), 541 pasos directos, 541
objetos de directorio, 541 sucio lee, 429 datos de pruebas de tablas múltiples
Productos cartesianos, 342-346 cláusula JOINON, 322-326 JUNTURA... LA UTILIZACIÓN De cláusula,
321-322 cláusula de JUNTURA NATURAL, 319-321 nonequijoins, 329-331 N-camino junturas, 327-329
junturas externas, 334-342 descripción, 310-311 nombres de columna ambiguos eliminatorios, 317-318
autojunturas, 331-334 sintaxis SQL:1999, 316-317 tipos de junturas, 311-316
Palabra clave DISTINTA, 61, 105, 279 parámetro de dividendo, 200 parámetro de divisor, 200 DML. Ver el
Servicio de Nombre de dominio de Lenguaje de Manipulación de Datos (sistema de nombres de dominio),
541 dominios, definidos, 542 nota de punto, 317-318 doble substitución de signo "", 145-147 dobles símbolos
de tubo (||). Ver el carácter
operador de encadenamiento

doble citas ("), 454 comando de GOTA, 466 comando de VISTA DE GOTA, 493-496 tablas que se caen, 466-469
DSS (Sistemas de apoyo para la toma de decisiones), 14, 542 comando DUAL, 54, 77, 248 durabilidad, 429-430
Protocolo de Configuración de Servidor Dinámico (DHCP), 541

E
fácil conecta, 542
EBCDIC (Decimal codificado en binario Extenso
Código de intercambio), 542 botón Edit, 35 comando de EMPLOYEES, 41, 55 columna EMPNO, 463
columna ENAME, 463 sesiones de usuario final, 6-7 gerente de Empresa, 544 entidades. Ver el diagrama de
relación de la entidad de tablas, 19 variables de entorno, 542 operadores de igualdad, de 105 años, 113-116, 370.
También ver
DONDE cláusula equijoins, 310-311, 542 mensajes de error
conexión a la base de datos, 32 "ORA-00904: identificador inválido", 108 "ORA-00918:column ambiguamente
definidos", 317 "ORA-00923: DE palabra clave no encontrada
donde esperado", 73, 75 "ORA-00932: tipos de datos inconsecuentes", 253 "ORA-00934: la función de
grupo no es permitida
aquí", 290
"ORA-00935: la función de grupo es anidada también
profundamente", 287
"ORA-00937: grupo de ni-un-solo-grupo
funcione", 290 "ORA-00942: la comando o la vista no existen", 73 "ORA-01427: la subpregunta de fila sola
vuelve más
que una fila", 367, 371, 420

"Foto de ORA-1555 demasiado vieja", 429 "parte de ORA-25154:column de USAR cláusula


no puede tener el calificador", 317

funciones generales

G
Índice
561
Identificador de FUGA, 123-124 conversión de tipo de datos explícita, 231 expresiones. También ver expresiones
condicionales
substitución de signo "" por, 147-149 INSTANCIA, 254, 257-261 columna aliasing y, 74-75 comando DUAL,
77 valores literales, 77
Código de Intercambio de Decimal codificado en binario extenso
(EBCDIC), 542 Lenguaje de Maquetación Extensible (XML), 553 grados, 425, 456

F
tablas de hecho, 542
FGA (Grained fino que Revisa), 542 espacios. Ver que botón File de columnas, 35 llenan el modo (de) el
operador, 236, 238, 240-241 Grained finos que Revisan (FGA), 542 primera forma normal, 15-16 tipo de datos de
FLOTADOR, 458 de (llene el modo) el operador, 236, 238, 240-241 PARA la cláusula de ACTUALIZACIÓN,
438 palabra clave de FUERZA, 494 coacciones de clave foránea, 471-472 claves foráneas, 18, 85-88 nombres
oficiales, 194-195 máscaras de formato, 203-204 parámetro de formato, 232 DE la cláusula, 358 copias de seguridad
llenas, 542 junturas externas llenas, 338-342 funciones. También ver nombres de funciones específicas
la fila múltiple, 175-176 funcionamiento en datos de carácter, 171-172 funcionamiento en información de
fecha, 173 funcionamiento en datos numéricos, 172-173
FÚNDASE, 253-254, 539 NULLIF, 249-252, 547 NVL, 247-248, 547 NVL2, 248-249, 547 descripción,
247
GMT (Hora media de Greenwich), 542 práctica buena, 66-69 Interfaces gráficas de usuario (GUIs), 543
versión gráfica, SQL*Plus, 28 Hora media de Greenwich (GMT), 542 computación grid, 8-9, 543
instrumento de Control de Reja, 8 GRUPO POR cláusula
la creación de grupos de datos, 287-288 definido, 543 agrupación por columnas múltiples, 291-294 y
TENER cláusula, 298 funciones de grupo que anidan, 285 descripción, 288-291
funciones de grupo
AVG, 281-282, 538 CONDE, 275, 279-280 definido, 274-275 GRUPO POR cláusula
la creación de grupos de datos, 287-288 agrupación por columnas múltiples, 291-294 descripción,
288-291
TENER cláusula
descripción, 296-299 resultados de grupo de restricción, 294-296
MAX, 282-285 MINUTOS, 282-285 anidar, 285-287 descripción, 175 contra funciones de fila sola, 213
SUMA, 280-281, 551 sintaxis de, 275-278 tipos de, 275-278
562
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen
1Z0-051)

filas agrupadas
descripción, 296-299 resultados de grupo de restricción, 294-296
la agrupación de atributo, 288, 291 resultados de nivel del grupo, 295 GUIs (Interfaces gráficas de usuario),
543

H
racimos de picadillo, 462
desmenuce junturas, 492, 511 cláusula que TIENE
descripción, 296-299 resultados de grupo de restricción, 274, 294-296
tablas de montón, 462 señal de pleamar (HWM), 425-426, 543 columna HIREDATE, DE 463 HORAS
(Recursos humanos) esquema de pruebas,
38-42 HTTP (protocolo de transmisión de hipertexto), 543 Recursos humanos (HORA) pruebas
esquema, 38-42 HWM (señal de pleamar), 425-426, 543 protocolo de transmisión de hipertexto (HTTP), 543

Yo
IBM (International Business Machines), 543
lógica "si entonces más", 228, 254 conversión de tipo de datos implícita, 229-230 precedencia implícita, 391
EN operador, de 113 años, 119-120, 365, 369 copias de seguridad inconsecuentes, 543 INCREMENTO POR
opción, 503 copias de seguridad incrementales, 543 sangría, 66-69 racimos de índice, 462 Índice Tablas
Organizadas (IOTs), 462, 544

índices
la creación, 515-517 definido, 452 caída, 517-520 modificación, 517-520 descripción, 509 objetivo de, 510-511
tipos de, 511-515 utilización, 515-517
conexiones a la base de datos indirectas, 4 operadores de desigualdad, 113-116 función de INITCAP, 171, 179-
182, 543 vistas de inline, 362 junturas interiores
definido, 544 contra externo, 335-336
las preguntas interiores, 358 parámetros de ingreso, 170, 176 introdujeron/salida (entrada-salida), definida, 543
comando de INSERCIÓN, 5, 405-406 anomalías de introducción, 15-16 Developer SQL que instala, 33-34
recuperación de instancia, 544 instancias, 3-4 función de INSTR (en la cuerda), 172, 189-190, 544 tipo de datos
de NÚMERO ENTERO, 386, 458 International Business Machines (IBM), 543 Organización internacional
para la Estandarización
(La organización internacional para la normalización), 23, 544 protocolo Internet (IP), definido, 544
Protocolo de Comunicaciones de Interproceso (IPC), 544 CRUZA al operador de SET, 382, 388-389 DÍA DE
INTERVALO AL SEGUNDO tipo de datos, 459 AÑO DE INTERVALO AL TIPO DE DATOS DE MES, 459
entrada-salida (introdujo/salida), definido, 543 IOTs (Índice Tablas Organizadas), 462, 544 IP (protocolo
Internet), definido, 544 IPC (Protocolo de Comunicaciones de Interproceso), 544 SON el operador NULO, de
113 años, 126
Organización internacional para la normalización (Organización internacional para
Estandarización), 23, 544 aislamiento, 429

columnas claves, 470

L
Índice
563
Java la 2 Edición (J2EE), 6, 544 de Empresa Entorno de Tiempo de ejecución de Java (JRE), 33 Java Máquina
Virtual (JVM), 545 comando JOB_HISTORY, 41, 55 comando de JOBS, 41, 55 cláusula JOINON
definido, 544 utilización de tablas que se une, 331-334 descripción, 313, 322-326, 328
junturas
cruz
la creación de productos Cartesianos con, 342-346 definido, 310, 538 descripción, 314
definido, 58, 544 equijoins, 310-311, 542 picadillo, 492, 511 interior, 335-336, 544 natural, 312-314, 546 anidó
el bucle, 491-492, 511 nonequijoins, 310, 329-331, 547 N-camino, 327-329 externo
definido, 310, 548 lleno, 338-342 contra interior, 335-336 dejado, 336-337 descripción, 314, 334-335
derecho, 337-338
descripción, 311-312 autojunturas, 310, 331-334, 346, 550 fusión de clase, 511 sintaxis de, 314-316
JUNTURA... LA UTILIZACIÓN De cláusula, 313, 321-322, 544 JRE (Entorno de Tiempo de ejecución de
Java), 33 JVM (Java Máquina Virtual), 545
Objeto grande (GLOBO) tipos de datos, 450, 459, 545
La función de LAST_DAY, 173, 213-214, 545 variable LD_LIBRARY_PATH, 27 LDAP (Protocolo de Acceso
de Directorio Ligero), 545 software de LearnKey, 534, 535 junturas externas izquierdas, 336-337 función de
LONGITUD, 171, 184-185, 545 LGWR (registran al escritor) el proceso, 545 caches de biblioteca, 545
Protocolo de Acceso de Directorio Ligero (LDAP), 545 COMO el operador, de 113 años, 120-125, 182 Linux,
SQL*Plus en, 27-28 oyentes, 545 valores literales, 65, 77, 190 GLOBO (Objeto Grande) tipos de datos, 450,
459, 545 comando de LOCATIONS, 41, 55-56 acción de conmutador de registro, 545 escritor de registro
(LGWR) proceso, 545 almacenamiento lógico, 13 gerente de Volumen Lógico (LVM), 545 inicio de sesión/de de
ciclo, 4 tipo de datos LARGO, 459 tipo de Datos iniciales LARGO, 459 función INFERIOR, 171, 177-179
minúscula, escribiendo select de SQL en, 64-65 función de LPAD, 172, 186-187 LVM (gerente de Volumen
Lógico), 545

M
objetos de base de datos principales
namespaces, 455-456 objetos de esquema de nombramiento, 453-455 esquemas, 452-453 tipos de, 450-452
usuarios, 452-453
564
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-
051)

Monitor de manejabilidad (MMON), 546 datos de manipulación


transacciones de control
transacciones de base de datos, 428-431 descripción, 427-428 select de control de transacción, 431-438
borrar filas de tablas
BORRAR comando, 423-425 comando de FUSIÓN, 426-427 comando TRUNCADO, 425-426
Select de DML
BORRAR comando, 407-408 frainstancias de, 409-412 comando de INSERCIÓN, 405-406 comando de
FUSIÓN, 408-409 descripción, 404-405 comando TRUNCADO, 409 comando de ACTUALIZACIÓN,
406-407
insertar filas en tablas, 413-418 filas de actualización en tablas, 419-422
relación "muchos a muchos", 20-21 relación "muchos a un", 18 relación de detalle del maestro, 335 aspecto de
MasterExam, 534 función de MAX, 282-285 opción MAXVALUE, 503 tiempo medio entre frainstancia
(MTBF), 546 tiempo medio para recuperar (MTTR), 546 comando de FUSIÓN
borrar filas de tablas con, 426-427 descripción, 404, 408-409
metadata, definido, 53 capa media, 6 botón Migrate, 35 función de MINUTO, 282-285 MENOS operador de
SET, 382, 389 opción MINVALUE, 503 MMON (Monitor de Manejabilidad), 546 función de MOD
(módulo), 173, 199-202, 546 función de MONTHS_BETWEEN, 173, 207-208, 546 bases de datos montadas,
546

MTBF (tiempo medio entre frainstancia), 546 MTTR (tiempo medio para recuperar), 546 funciones de fila
múltiple. Ver subconsultas de fila múltiple de funciones de grupo, 365-366, 369-372 multiplexión, 546

N
namespaces, definido, 546
Carácter nacional Objeto Grande (NCLOB) datos
tipo, 459, 546 Apoyo de Lenguaje Nacional (NLS), 116,
232-233, 547 cláusula de JUNTURA NATURAL, 312, 319-321 junturas naturales, 312-314, 546 palabra clave
NATURAL, 323, 346 botón Navigate, 35 NCLOB (Carácter Nacional Objeto Grande) datos
el tipo, 459, 546 parámetro de posición de principio negativo, 192 anidó junturas de bucle, 491-492, 511 anidar
funciones
CONCAT, 183 descripción, la 245-246 fila sola, 174, 287
subconsultas, 358 NETBEUI (NETBIOS Usuario Extenso
Interface), 546 NETBIOS (Red Ingreso Básico Salida
Sistema), 546 NETBIOS Interface de Usuario Extenso
(NETBEUI), 546 Red Ingreso Básico Salida Sistema
(NETBIOS), 546 función de NEXT_DAY, 173, 211-213 columna pseudo NEXTVAL, 504 NLS (Apoyo de
Lenguaje Nacional),
116, 232-233, 547 valor de NLS_CURRENCY, 232
Parámetro de base de datos de NLS_DATE_LANGUAGE,
211-212 vista de NLS_SESSION_PARAMETERS, 232

O
objete namespaces, 455-456
Índice
565
nodos, definidos, 547 palabra clave NOFORCE, 494 nonequijoins, 310, 329-331, 547 índices no únicos, 511
normalización, 10-11, 22 NO EN operador, 361, 365 no coacciones nulas, 470-471 NO operador, 131-132
comparación nula, 113, 126 valores nulos
definido, 55, 547 claves foráneas y columnas nullable, 85-88 NO columnas NULAS, 82-84 columnas
NULLABLE, 82-84 descripción, 81-82
Función de NULLIF, 247, 249-252, 547 NULLS PRIMERAS palabras claves, 137 NULLS ÚLTIMAS palabras
claves, 137 conversión de número
a carácteres, 229, 232-235 carácteres que converten a, 242-244
Tipo de datos de NÚMERO, 458, 460 parámetro de número, 232 columnas numéricas, 54 tipos de datos
numéricos, 458 máscaras de formato numéricas, 234 funciones numéricas
MOD, 199-202, 546 descripción, 172-173 RONDA, 196-198 TRUNC, 198-199
literales numéricos, 190 condiciones basadas del modo numérico, 105-107 tipo de datos NVARCHAR2, 458
función de NVL, 247-248, 547 función de NVL2, 247-249, 547 N-camino junturas, 327-329
OC4J (Contenedores de oracle para J2EE), 547 OCAs (Oracle Socios Certificados), 547 OCI (Interface
de Llamada de Oracle), 10, 547 OCPs (Oracle Profesionales Certificados), 547 ODBC (Conectividad de
Base de datos Abierta), 547 OE (Entrada de Pedido) esquema de pruebas, 38-42 copias de seguridad fuera
de línea, 548 OLAP (Procesamiento Analítico en Línea), 548 OLTP (Procesamiento de Transacción en
Línea) sistemas,
14, 548 EN coacción BORRAR de CASCADA, 472 EN BORRAR SET coacción NULA, 472 EN
palabra clave, 323, 346 filas cojas, 310 Procesamiento Analítico en Línea (OLAP), 548 copias de seguridad
en línea, 548 Transacción en Línea que Trata (OLTP) sistemas,
14, 548 Conectividad de Base de datos Abierta (ODBC), 547 sistemas operativos (OS), definido, 548
operadores. También ver nombres de operadores específicos
aritmética, 70-73 Booleano
Y, 126-128 contra operadores de comparación, 135 cláusula que TIENE, 298 NO, 131-132 y ENTRE
operador, 117-118 O, 128-131 y filas, 104
encadenamiento de carácter
funciones de manipulaciones de carácter, 183 y expresiones, 70 y valores NULOS, 84 descripción,
75-76
comparación
ENTRE, 116-119, 331 contra operadores Booleanos, de 135 años
566
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-
051)

operadores (Cont).
la igualdad, 113-116 EN, 119-120, 365, 369 desigualdad, 113-116 es NULA, 126 COMO, 120-125, 182
subconsultas de fila múltiple, 365-366 descripción, 113 subconsultas de fila sola, 365-366
condicional
expresiones basadas en el carácter, 109-110 y NO operador, 131 DONDE cláusula, 105
SET
la combinación de preguntas múltiples en solo,
386-392
el control del pedido de filas volvió,
393-395 principios generales de, 384-386 descripción, 382-383 diagramas de Venn y, 383-384
las indirectas de optimizer, 517 U OPERADOR, 128-131 O REEMPLAZAN palabras claves, 494 "ORA-00904:
identificador inválido" error
mensaje, 108 "ORA-00918: la columna ambiguamente definió" el error
mensaje, 317 "ORA-00923: DE palabra clave no encontrada donde
" mensaje de error esperado, 73, 75 "ORA-00932: tipos de datos inconsecuentes" error
mensaje, 253 "ORA-00934: la función de grupo no es permitida aquí"
mensaje de error, 290 "ORA-00935: la función de grupo es anidada demasiado profundamente"
mensaje de error, 287 "ORA-00937: el grupo de ni-un-solo-grupo funciona"
mensaje de error, 290 "ORA-00942: la comando o la vista no existen"
mensaje de error, 73 "ORA-01427: la subpregunta de fila sola vuelve más
que una fila" mensaje de error, 367, 371, 420

"Foto de ORA-1555 demasiado viejo" mensaje de error, 429 "ORA-25154: parte de columna de USAR cláusula
no puede tener el calificador" mensaje de error, 317 servidor de Aplicación de Oracle, 5-7 Interface de Llamada
de Oracle (OCI), 10, 547 Oracle Socios Certificados (OCAs), 547 Oracle Profesionales Certificados (OCPs),
547 Contenedores de Oracle para J2EE (OC4J), 547 gerente de Empresa de Oracle, el 7-8 gerente de Empresa de
Oracle Application Server
Instrumento de control, el 8 gerente de Empresa de Oracle Database
Instrumento de control, el 8 gerente de Empresa de Oracle Grid Control instrumento, 8 Oracle instalación de
software de Casa, 25 protocolo de Red de Oracle, 4, 548 Oracle Espacial, 453 directorio raíz ORACLE_BASE,
27, 548 conexión orcl_sys, 34 PEDIDO POR cláusula
la ascensión de comandoación, 137-138 comandoación compuesta, 139-142 preguntas compuestas, 385
comandoación de bajada, 137-138 pedido de filas, 393 descripción, 136 comandoación posicional, 139
Entrada de pedido (OE) esquema de pruebas, 38-42 opción de PEDIDO, 503 Organisation Internationale de
Normalisation
(Organización internacional para la normalización), 23, 544 parámetro original, 247, 249 filas quedadas
huérfanas, 310 OS (sistemas operativos), definidos, 548 junturas externas
definido, 310, 548 lleno, 338-342 contra interior, 335-336 dejado, 336-337 descripción, 314, 334-335 derecho,
337-338
preguntas externas, 358

paradigmas, definidos, 2

P
descripción, 386-387 UNIÓN TODO el operador, 387 operador de UNIÓN, 387-388
Índice
567
relación de niño paternal, 335 paréntesis (), 384 análisis sintáctico, definido, 548 tablas divididas, 462 variable de
PASO, 27-28 comparación de modelo, 113, 120-125, símbolo de 182 porcentajes (%), 120-121 PGAs (Programa
áreas Globales), 548 almacenamiento físico, 13 PL/SQL (Pregunta de Lenguaje/Estructurar Procesal
Lenguaje), 10, 170, 548 PMON (Monitor de Proceso), 549 nota posicional, 413 comandoación posicional, 139
coacciones de clave primaria, 471 claves primarias, 15, 18, 471, 549 sinónimos privados, 498-501 lenguajejes
procesales, 25, 170 Lenguaje de Pregunta de Lenguaje/Estructurar Procesal
(PL/SQL), 10, 170, 548 Monitor de Proceso (PMON), 549 Programa áreas Globales (PGAs), 548 proyección,
57, 104, 549 columnas pseudo, 504 sinónimos públicos, 498-501 signos de puntuación, 238 junturas naturales
puras, 312, 314

Q
q (cotización) operador, 77-81
preguntas. También ver subconsultas
ad hoc, 147 ciego, 60, 63 combinación múltiple en solo
los ejemplos complejos, 390-392 CRUZAN al operador, 388-389 MENOS EL OPERADOR, 389
compuesto, 382 forma genérica, 142 interior, 358 filas restrictivas recuperadas por
Operadores booleanos, 126-132 operadores de comparación, 113-126 reglas de precedencia, 132-
135 DONDE cláusula, 104-113
externo, 358 repetido, 147 filas de comandoación recuperadas por, 136-142
cotización (q) operador, 77-81

R
RACs (Verdaderos Racimos de Aplicación), 5, 549
botones tipos radios, Tipo de Conexión, 36 INCURSIÓN (Matriz redundante de Barato
Discos), 549 Memoria de acceso aleatorio (RAM), 549 comparación de variedad, 113, 116-119, 331.
Ver
ENTRE tipo de Datos iniciales de operador, 458 dispositivos crudos, 549 RDBMS (dirección de Base
de datos relacional
Sistema), 2, 549 legibilidad, afirmaciones de SQL y, 66-69 Verdaderos Racimos de Aplicación
(RACs), 5, 549 archivos. Ver a gerente de Recuperación de filas (RMAN), 550 Matriz Redundante de
Discos Baratos
(INCURSIÓN), 549 integridad de referencia, 549 comando de REGIONS, 41, 55-56 variables de
Registro, 30 álgebra relacional, 57, 382 Sistema de gestión de Base de datos relacional
(RDBMS), 2, 549
568
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-
051)

estructuras relacionales. También ver tablas


normalización de datos, 14-22 descripción, 10-11 filas, 11-14 tablas, 11-14
teoría relacional, 57 relaciones, definidas, 549. Ver que también las tablas repitieron que las preguntas, 147
REEMPLAZAN la función, 172, 193-196, 549 parámetro de término de reemplazo, 193 obteniendo agregó
datos
Función de AVG, 281-282 función de CONDE, 279-280 definido, 274-275 GRUPO POR cláusula, 287-294
cláusula que TIENE, 294-299 función de MAX, 282-285 función de MINUTO, 282-285 anidar, 285-287
función de SUMA, 280-281 sintaxis de, 275-278 tipos de, 275-278
restricción de datos
Operadores booleanos, 126-132 operadores de comparación, 113-126 reglas de precedencia, 132-135
DONDE cláusula, 104-113
junturas externas correctas, 336, 337-338 RMAN (gerente de Recuperación), 550 Papel se cae la caja, 36
comando de ROLLBACK, 409, 427, 431, 433-434 rollbacks, 412 función REDONDA
fecha, 214-216 numérico, 172, 196-198
Tipo de datos de ROWID, 459 identificador rowid, 512, 550 resultados de nivel de la fila, 294 filas
el control de pedido de devuelto, 393-395 definido, 456

borrar de tablas
BORRAR comando, 423-425 comando de FUSIÓN, 426-427 comando TRUNCADO, 425-426
incluso o excluyendo agrupado, 294-299 insertar en tablas, 406, 413-418 limitación recuperada
Operadores booleanos, 126-132 operadores de comparación, 113-126 reglas de precedencia, 132-135
DONDE cláusula, 104-113
descripción, 11-14 comandoación recuperada, 136-142 subconsultas para generación, 363-364 actualización en
tablas, 419-422
Función de RPAD, 172, 186-187 botón Run, 35 encuadernación de tiempo de ejecución. Ver la substitución de
tiempo de ejecución de substitución de signo "". Ver la substitución de signo ""

S
Columna de SAL, 463
SAVEPOINT mandan, 427-428, 431, 434-435 subconsultas escalares, 358 objetos de esquema
índices
la creación, 515-517 definido, 452 caída, 517-520 modificación, 517-520 descripción, 509 objetivo de, 510-
511 tipos de, 511-515 utilización, 515-517
el nombramiento, 453-455 secuencias
la creación, 502-504 definido, 452, 550 descripción, 488, 501-502 utilización, 504-509

sinónimos, 452, 498-501, 551 vistas


CAMBIE VISTA, 493-496

nonequijoins, 329-331 N-camino junturas, 327-329 descripción, 310-311


Índice
569
complejo, 492-493 CREAN LA VISTA, 493-496 diccionario de datos, 540 definido, 452 VISTA DE
GOTA, 493-496 para hacer cumplir la seguridad, 489-490 inline, 362 para hacer datos comprensibles, 491
descripción, 488-489 para el rendimiento, 491-492 para prevenir errores, 490-491 datos que recuperan de,
497-498 simple, 492-493 para simplificar al usuario SQL, 490
calificación a nombres de columna ambiguos,
317-318 sintaxis SQL:1999, 316-317 tipos de junturas, 311-316
ejecución
expresiones, 74-75, 77 valores nulos, 81-88 operadores, 70-73, 75-76, 77-81 reglas, 64-69 sintaxis, 59-64
forma general usando ANSI SQL:1999 sintaxis, 316 descripción, 52-53 operadores de SET, 382 funciones de fila
sola en
esquemas
definido, 38, 452-453, 550 pruebas
la creación, 42-43 HORA, 38-42 OE, 38-42 descripción, 37
SCN (Número de Cambio de Sistema), 550 variable de BÚSQUEDA, 145 expresión de INSTANCIA buscada,
forma normal de 257 segundos, 17 Capa de Enchufes Segura (SSL), 551 segmentos, definidos, 550 ESCOGIDO
PARA comando de ACTUALIZACIÓN, 436-438 select SENTENCIA
la aplicación de expresiones condicionales en
funciones condicionales, 254-261 funciones generales, 247-254 funciones que anidan, 245-246
las capacidades de, 57-58 DESCRIBEN el comando de Comando, 53-57 datos de pruebas de tablas múltiples
con
Cláusula de JOINON, 322-326 JUNTURA... LA UTILIZACIÓN De cláusula, 321-322 cláusula de
JUNTURA NATURAL, 319-321
conversión de instancia de carácter, 177-182 manipulaciones de carácter, 183-196 fecha
incorporada, 202-206 manipulación de fecha, 206-217 numérico, 196-202
subconsultas, 362 expresiones substitutivas y texto, 147
selección, 58, 104, 550 autojunturas, 310, 331-334, 346, 550 coacciones de clave foránea que se
autorefieren, 472 claves foráneas que se autorefieren, 39 puntos y coma (;), 65 secuencias
la creación, 502-504 definido, 452, 550 descripción, 488, 501-502 utilización, 504-509
archivo de parámetro de servidor (spfile), 551 tecnologías de servidor
arquitectura, 3-5 Computación grid, 8-9 lenguajejes, 9-10 servidor de Aplicación de Oracle, 5-7
gerente de Empresa de Oracle, 7-8 descripción, 2
570
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-
051)

la capa de servidor, 4 nombres de servicio, 550 Identificador de Sesión (SID), 550 sesiones, definieron, 4, 550
comando de SET, 152, 154 comparación de SET, 113, 119-120, 365, 369.
Ver EN SET de operador DEFINEN comando de ON|OFF, 152 operadores de SET
la combinación de preguntas múltiples en solo
los ejemplos complejos, 390-392 CRUZAN al operador, 388-389 MENOS EL OPERADOR, 389
descripción, 386-387 UNIÓN TODO el operador, 387 operador de UNIÓN, 387-388
el control del pedido de filas volvió, 393-395 principios generales de, 384-386 descripción, 382-383
diagramas de Venn y, 383-384
LISTE el comando NO USADO, 466 SGA (Sistema área Global), 550 SID (Identificador de Sesión), 550
SID (Identificador de Sistema), 550 expresión de INSTANCIA simple, 257 vistas simples, 492-493 substitución
de signo "" sola, 143-145 citas solas ('), 77-81 valores solos, 285 funciones de fila sola
conversión de instancia de carácter
INITCAP, 179-182, 543 más ABAJO, 177-179 descripción, 171 SUPERIOR, 179
manipulaciones de carácter
CONCAT, 183-184 INSTR, 189-190 LONGITUD, 184-185 LPAD, 186-187 descripción, 171
REEMPLAZAN, 193-196

RPAD, 186-187 SUBSTR, 190-193 NETO, 187-189


fecha incorporada
aritmética de fecha, 205-206 almacenamiento de fecha, 202-204 SYSDATE, 204-205
manipulación de fecha
ADD_MONTHS, 208-211 LAST_DAY, 213-214 MONTHS_BETWEEN, 207-208 NEXT_DAY, 211-213
descripción, 173, 206 RONDA, 214-216 TRUNC, 216-217, 460
numérico
MOD, 199-202, 546 descripción, 172-173 RONDA, 196-198 TRUNC, 198-199
descripción, 170-171 subconsultas de fila sola, 365-366, 369-372 SMON (Monitor de Sistema), 551 junturas de
fusión de clase, 511 datos de comandoación, con PEDIDO POR cláusula, 136-142 botón Source, 35 parámetro de
número de la fuente, 197, 199 tablas de la fuente, 311, 408 spfile (archivo de parámetro de servidor), 551 SQL.
Ver la Lenguaje de Pregunta Estructurada Developer de SQL
AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 35-37 instalar y lanzamiento, 33-34
Interface de Usuario, 34-35
Herramienta de SQL*Loader, 405 SQL*Plus
AUTOCOMMIT mandan en, 435-436 conexiones a la base de datos, 30-32 en Linux, 27-28 descripción, 26 en
Windows, 28-30

Sintaxis de SQL:1999, 316-317 SSL (Capa de Enchufes Segura), 551 transformación de estrella, 361-362
STAR_TRANSFORMATION_ENABLED
parámetro de inicialización, 362

aliases de comando, 317 tablas


Select de DDL

T
Índice
571
COMIENCE CON la opción, 503 afirmación terminators, 65-66 función de STDDEV, 278 Lenguaje de
Pregunta Estructurada (SQL). También ver
Select SENTENCIA
comandos, 23-24 definido, 551 lenguaje orientada al SET, 25 estándares para, 23
subconsultas
con objetivos de comparación, 360-361 correlacionado, 366-369 tablas de creación de, 464-465 definido, 358-
360 para generar filas pasaron a select DML,
363-364 para generar tablas, 362 para generar valores para proyección, la 362 fila múltiple, 365-366, la 369-
372 fila sola, 365-366, 369-372 para transformación de estrella, 361-362
substitución. Ver la substitución de signo "" función de SUBSTR (subcuerda), 172, 190-193, 551 función de
SUMA, 280-281, 551 sinónimos, 452, 498-501, 551 errores de sintaxis, 410 usuario SYS, 453 función de
SYSDATE, 173, 204-205 privilegio sysdba, 36, 551 privilegio sysoper, 551 Número de Cambio de Sistema
(SCN), 550 Sistema área Global (SGA), 550 Identificador de Sistema (SID), 550 Monitor de Sistema (SMON),
551 usuario de SISTEMA, 453 sistemas, definidos, 551
el cambio de definiciones, 465-466 coacciones, 469-477 creación de subconsultas, 464-465 creación con
especificaciones de columna, 462-464 tipos de datos disponibles para columnas, 457-461 caída, 466-469
objetos de base de datos principales, 450-456 estructura de comando, 456-457 truncamiento, 466-469
definido, 551 filas que borran de
BORRAR comando, 423-425 comando de FUSIÓN, 426-427 comando TRUNCADO, 425-426
la pruebas de datos de múltiple
Productos cartesianos, 342-346 cláusula JOINON, 322-326 JUNTURA... LA UTILIZACIÓN De
cláusula, 321-322 cláusula de JUNTURA NATURAL, 319-321 nonequijoins, 329-331 N-camino
junturas, 327-329 junturas externas, 334-342 descripción, 310-311 nombres de columna ambiguos
eliminatorios,
317-318 autojunturas, 331-334 sintaxis SQL:1999, 316-317 tipos de junturas, 311-316
en esquema de HORA, 40-41 filas que insertan en, 413-418 descripción, 11-14 relación de niño paternal, 335
subconsultas para generación, 362 filas de actualización en, 419-422
tablespaces, definido, 551 tablas objetivo, 311, 408
572
Base de datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen
1Z0-051)

TCL (Lenguaje de Control de Transacción) comandos, 24 TCP (Protocolo de Control de Transmisión), 552
TCPS (Protocolo de Control de transmisión con SSL), 552 tempfile, 552 botón Test, 37 texto, substitución de
signo "" por, 147-149 tercera forma normal, 17-18, 327 lenguajejes de la tercera generación (3GLs), 10 tipo de
datos TIMESTAMP, 55, 387, 458 TIMESTAMP CON datos TIMEZONE LOCALES
tipo, 459 TIMESTAMP CON tipo de datos TIMEZONE, 459 TNS (Red Transparente Substrate), 552
opción TNS, 36 función de conversión TO_CHAR
convertir fechas a utilización de carácteres, 235-240 números que converten a utilización de carácteres,
232-235 definido, 228, 552 descripción, 231-232
Función de conversión de TO_DATE
convertir carácteres a utilización de fechas,
205-206, 241-242 definido, 228 descripción, 231-232
Función de conversión de TO_NUMBER
convertir carácteres a utilización de números,
243-244 definido, 228, 552 descripción, 231-232
Instrumento para Desarrolladores de aplicaciones (TOAD), 5 botón Tools, 35 Lenguaje de Control de
Transacción (TCL) comandos, 24 select de control de transacción
AUTOCOMMIT mandan, 435-436 DESTINAN el comando, 432 comando de ROLLBACK, 433-434
comando de SAVEPOINT, 434-435 ESCOGIDO PARA el comando de ACTUALIZACIÓN, 436-438
aislamiento de transacción, 437 transacciones, definidas, 427-428, 552 Protocolo de Control de Transmisión
(TCP), 552

Protocolo de Control de transmisión con SSL (TCPS), 552 Red Transparente Substrate (TNS), 552 errores de
transposición, 410 función NETA, 172-173, 187-189 función de TRUNC (truncada)
fecha, 216-217, 460 numérico, 172, 198-199
Comando TRUNCADO
borrar filas de tablas con, 425-426 descripción, 409
función truncada. Ver TRUNC funcionar truncando tablas, 466-469 tablas de verdad
NO Operador, 131 U OPERADOR, de 128 años
tuples, definido, 552. También ver filas modelo de dos niveles, 4 reparto de tipo, 410, 461

U
UGA (Usuario área Global), 552
UIs. Ver interfaces de usuario NO DEFINIR el comando de COLNAME, 151 comando de UNDEFINE, 149-154
subrayan el carácter (_), 120-122 URLs (URLs), 552 UNIÓN TODO el operador de SET, 382, 385, 387, 393
operador de SET de UNIÓN, 339, 382, 387-388 coacciones únicas, 470 índices únicos, 511 modelo de datos no
normalizado, 22 comando de ACTUALIZACIÓN, 406-407 función SUPERIOR, 171, 179 mayúscula,
escribiendo select de SQL en, 64-65 URLs (URLs), 552 Usuario área Global (UGA), 552 interfaces de usuario
(UIs)
definido, 552 GUIs, 543 NETBEUI, 546 Developer SQL, 34-35

usuarios

definido, 452
Índice
573
definido, 38 conexión indirecta con base de datos, 4 descripción, 452-453
LA UTILIZACIÓN de palabra clave, 322, 346 hora universal coordinada (Tiempo universal Coordinado), 553

V
valores
literal, 65, 77, 190 nulo
definido, 55, 547 claves foráneas y columnas nullable, 85-88 NO columnas NULAS, 82-84 columnas
NULLABLE, 82-84 descripción, 81-82
solo, 285 subconsultas para generación, 362
Cláusula de VALORES, 416 tipo de datos VARCHAR2, 54-55, 229, 386, 458, 460 variables
asignación, 144 ligan variables, 538 entorno, 542 LD_LIBRARY_PATH, 27 PASO, 27-28 Registro, 30
BÚSQUEDA, 145
La función de DESACUERDO, 277 diagramas de Venn, 383-384 Venn, John, 383 VERIFICAN el comando, 149-
150, 154-156 botón View, 35 vistas
CAMBIE LA VISTA, 493-496 complejo, 492-493 CREAN LA VISTA, 493-496 diccionario de datos, 540
DEJE CAER LA VISTA, 493-496 para hacer cumplir la seguridad, 489-490 inline, 362 descripción,
488-489 para el rendimiento, 491-492 para prevenir errores, 490-491 datos que recuperan de, 497-498
simple, 492-493 para simplificar al usuario SQL, 490 utilización para hacer datos comprensibles, 491
virtualization, 8

W
la advertencia apremio, 407
aplicaciones web, definidas, 6 CUANDO... ENTONCES Select, 257 DONDE cláusula
funciones de conversión de instancia, 182 condiciones basadas en el carácter, 107-110 condiciones
basadas en la fecha, 110-113 contra TENER cláusula, 294, 296 y junturas, 328 subconsultas que
anidan, 358 condiciones basadas del modo numérico, 105-107 descripción, 104-105 y filas, 274, 407,
465 subconsultas, 372 función de TO_DATE, 242
símbolos de comodín, 120-122 Windows, SQL*Plus en, 28-30 CON palabras claves de OPCIÓN DE
CONTROL, 494 CON LEÍDO SÓLO palabras claves, 494

X
XML (Lenguaje de Maquetación Extensible), 553
X-Windows, 553
¿Qué sabe usted?

¡Demuéstrelo!
¡Use los Herramientas de Estudio Interactivos en el CD incluido de
LearnKey!

Usted va:
• Descubra fuerzas y debilidades en su comprensión de objetivos de prueba •
Construya el conocimiento y la confianza para el rendimiento óptimo durante el día
de prueba • Práctica usando los mismos tipos de preguntas y guiones usted verá
en el examen • Enfoque sus estudios de temas críticos • Calibre su preparación
de tomar exámenes de certificación

¡LUS! ¡Descuentos de Formación de LearnKey especiales para Osborne


Customers!
Como usted compró un Manual de Osborne con un CD de pruebas integrado,
usted tiene derecho a ahorros increíbles en cursos de formación de LearnKey.

¡Guarde hasta el 60 % en la Formación de multimedia de


LearnKey!
• Courseware rico en el medio • Motivación de Instrucción • Desafío de
Laboratorios • Material de referencia • Práctico & Probado

Oferta Limitada en el tiempo - no TARDA


¡Visítenos en learnkey.com/osborne HOY!
1.800.865.0165 • learnkey.com/osborne
© 2006 LearnKey, Inc. LK022102

SUSCRIPCIÓN LIBRE 578 Base de

datos de Oracle de OCA 11g: Fundamentos de SQL I Guía de Examen (Examen 1Z0-051)

Sí, por favor énvieme una suscripción LIBRE a la Revista de Oracle .


Para recibir una suscripción libre a la Revista de Oracle, usted debe llenar la tarjeta entera, firmarlo, y fecharlo

NO
(los naipes incompletos no pueden ser tratados o reconocidos). Usted también puede faxear su aplicación a
+1.847.763.9638. O suscríbase en nuestro Sitio web en otn.oracle.com/oraclemagazine
De vez en cuando, la Publicación de Oracle permite la firma (se requiere)
nuestras direcciones de correo electrónico para promociones especiales y anuncios. Ser incluido en esto pro-
gramo, por favor compruebe este círculo.
x
feche a nuestros compañeros acceso exclusivo a

La Publicación de oracle permite compartir de nuestra lista de correo con terceros seleccionados. Si usted prefiere su dirección postal no ser
incluida en este programa, por favor compruebe aquí. Si en cualquier momento le gustara ser borrado de esta lista de correo, por favor póngase en
contacto

nombre

compañía

street/p.o.

caja

título

e-mail

dirección
El Servicio de atención al cliente en +1.847.647.9630 o envia un e-mail a oracle@halldata.com.
ciudad/estado/zip

país
o
postal
código
teléfono

fax

USTED DEBE CONTESTAR A DIEZ


PREGUNTAS ABAJO.
1 LO QUE ES EL NEGOCIO PRIMARIO
¿ACTIVIDAD DE SU FIRMA EN ESTE LOCUnTION?(compruebeunúnico)

▫
04
05 06
IBMAIX
IBMUNIX Java
Hardware
▫ 20 Macintosh
Herramientas
▫ 24 Suite de Developer de Oracle
▫ 25 Descubridor de Oracle

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
EspacioaéreoyDefensaqueFabrica Proveedor de Servicio de aplicación ProductosquímicosIndustrialesAutomotores,PetróleoySector/ConsumidordeConsumidordeConstrucción/IngenieríadeMedioyComunicaciones
deGas EducacióndeBienesEnvasada Gobierno de Servicios/Seguro Financiero FabricacióndeTecnologíaavanzadadeAsistenciamédica(militar)delGobierno(civil),OEM Ciencias de lavidadeVendedor deSoftware
Intecapas(Biotech, Productos farmacéuticos)

07 08 09 10 11 12 13 14 15 16 17 18 19 20 21
Linux MS-DOSdeMacintosh MVS TeleinformáticadeNetWare OpenVMSUNIXdeSCO SolDYNIX/ptxSecuencialSolaris/SunOS SVR4 UnixWare WindowsNTdeWindowsOtroUNIX

▫ 22 Macizamente ▫ 21 Procesamiento de MainframeParallel


▫ 23 Minicomandoador
▫ 24 comandoador personal ork Comandoador
▫ 26 ▫ simétricos 25 Multiprocesamiento Netw
P ip e als  27h Wr orkstation
er
▫ 28 Puentes/Direccionadors/Concentradors/Pasarelas
▫ 29 Lectores de CD-ROM ▫ 30 Unidades de disco/Subsistemas de Disco
▫ 31 Módems es/Subsystems
▫ 32 TVape Driv Sv er33icesideo Tableros electrónicos/Multimedia
▫ 34

▫ 27 Migración de Oracle ▫ 26 Oracle JDeveloperWorkbench


▫ 28 PortalBuilder Oracle9WAS i
ra29le Oracleicearehouse O c Serv s
▫ 30 Externalizacióndeoracle
▫ 31 OracleConsultando ▫ 32 Educacióndeoracle ▫ 33 Apoyodeoracle ▫ 98 Otros 99 ▫
Ningunodelossusodichos
7 CUALES OTROS PRODUCTOS DE BASE DE DATOS SON
¿Yo N U S E Un T Y O U R S I T E? (compruebe todo que se aplican)
▫▫
16 17 18
Integrador deVentaalpormenor/Venta alpormayor/Sistemasdedistribuciónminero,VAR/VAD

99
98 ▫
Otro Ningunodelossusodichos
▫▫
35 36 37
Proveedor de Servicio de aplicación ConsultandoMantenimientodeEducación/Formación
▫▫▫
01 02 03 04
Acceso Baan dbaseGupta
▫ 0089
▫ 10 ▫
Microsoft11
Access MicrosoftSQLServer PeopleSoft Progress
▫▫
19 20 21
Viajesdetelecomunicacionesy Herramientas de Transporte (eléctrico, de gas, saneamiento, agua)
4
¿EVALÚA USTED, ESPECIFICA, RECOMIENDA, O AUTORIZA LA COMPRA DE ALGUNO DE LOS SIGUIENTES?
▫▫
38 39 40
ApoyodeServiciosdeBasededatosenlínea FormaciónbasadaenlaTecnología
▫▫
05 06 07
IBMDB2 Informix Ingres
▫ 12
▫ 13
 ▫ 14
DEBILITE Sybase VSAM
▫ Otro 98 Negocio y Servicios (compruebe todo que se aplican) ▫ 98 Otro ▫ 98
Otro
2 CUAL DEL SIGUIENTE MEJOR
▫ 01 ▫ 02
Softwaredehardware
99

Ningunodelossusodichos
99

Ningunodelossusodichos
¿DESCRIBE SU TRABAJO PRIMARIO FUNCTION?(compruebeunúnico) dirección/Personal Corporativa
▫ 03 ▫ 04 ▫ 05
Internet de productos de Base de datos de Herramientas de desarrollo de aplicaciones o productos de Intranet
6
¿QUÉ PRODUCTOS DE ORACLE ESTÁN EN USO Un T Y O U R S I T E? (compruebe todo que se aplican) Suite de Negocio electrónico de Oracle
8
¿QUÉ OTROS PRODUCTOS DE SERVIDOR DE APLICACIÓN ESTÁN EN EL USO EN SU SITIO WEB? (compruebe todo que se aplican)
▫ 01 Ejecutivo, dirección (presidente, Presidente, presidente,DueñodeCFO,Compañero,Principal)
99 ▫
Ningunodelossusodichos
▫ 01 Mercadotecnia de Oracle ▫ 02 Realización de Ventas de Oracle
▫
01 02
BEA IBM
▫ 02 F (VP/Director/inManager/Controllere, nt inance/Adm istrative Managem
Lacompra, Administración)
5
¿EN SU TRABAJO, USA USTED O PLANEA COMPRAR ALGUNO DE P siguientes R OD UCT S? (compruebe todo que se aplican)

▫ 04 Suministro de Oracle ▫ 03 dirección de Cadena de Pedido de Oracle


▫ 05 Consecución de Oracle
▫▫
03 04 05
Sol de Sybase Otro
▫ 03 dirección de Ventas/Mercadotecnia
Software

(VP/Director/Manager) 04direccióndeSistemas/Operaciones deComandoador
(CIO/VP/Director/Sistema informativo de dirección de gerente, Operaciones)
▫▫
01 02 03
Gráficoscomerciales CAD/CAE/CAM INSTANCIA

▫ 07 Mantenimiento de Oracle ▫ 06 Oracle ManufacturingManagement


▫ 08 Servicio de Oracle
▫ 09 Contratos de Oracle
9
DURANTE LOS PRÓXIMOS 12 MESES, QUE USTED ESPERA QUE SU ORGANIZACIÓN GASTARÁ PARA
ES/ESTO Personal
▫ 05 desarrollo de Sistemas /
Programacióndedirección
▫▫
04 05 06
DireccióndeArchivodeGestióndedatosdecomunicaciones
▫ 10 Proyectos de Oracle ▫ 11 Oracle Recursos de FHuman inancials
▫ 12 Centro de Interacción de Oracle
¿HARDWARE, SOFTWARE, PERIPHERALS, Y SERVICIOS FORYOURLOCUn TION?(compruebesóloun)

▫ 06 desarrollo de Sistemas / Programación de Personal 07 Finanzas ▫ 01 Menos de 10.000$


▫ 08 Administrador DBA/Systems 07 Consulta
▫ 09 Educación/Formación
▫ 10 Director/Gerente de Apoyo técnico ▫ Otra 11 dirección/Personal Técnica


08 09 10 11
RecursodeMaterialesdeJavaPlaneando a MultimediaAuthoring Networking
▫ 13 Comunicaciones/Herramientas de Oracle (módulos)
▫ 14 Sector público de Oracle / universidad (módulos) ▫ 15 Servicios financieros de Oracle (módulos) S v/Sof er16er Oracletware
▫▫▫
02 03 04 05
10.000$ a $49.999$ 50.000 a $99.999$ 100.000 a $499.999$ 500.000 a 999.999$
▫ 98 Otro
▫
12 13
Entrada/Control deexistenciasdePedidodeOfimática
▫
17 18
Oracle9i Oracle9i Lite

06
1.000.000$ y
3 LO QUE ES SU PRIMARIA CORRIENTE
▫
14 15
Programación deGestióndeproyectos
▫
19 20
Oracle8i OtrabasededatosdeOracle
10 W H UN T I S Y O U R C O M P UN N Y 'S Y E UN R L Y
¿SUnLESREVENUE?(porfavorelijaun)
¿O PE RUn TI N GP LUnTFO RM?(seleccionetodoqueseaplican)

▫ 02 Equipos Digitales VAX ▫ 01 Equipo Digital UNIXVMS


▫ UNIX DE 03 CV
▫▫▫
16 17 18 19
VolumendetrabajodedireccióndeSistemasdeHojasdecálculocientíficoyTécnico
▫▫
21 22 23
SuitedePequeñonegociodeOracledeRadiodeServidordeAplicacióndeServidordeAplicacióndeOracle9iOracle9i

01 02 03 04 05
500$, 000, 000 y encima de 100$, 000, 000 a 500$, 000, 000 50$, 000, 000 a 100$, 000, 000 5$, 000, 000 a 50$, 000, 000 1$, 000, 000 a 5$, 000, 000
100103
EL ACUERDO DE LICENCIA ESTE PRODUCTO (EL "PRODUCTO") CONTIENE
EL SOFTWARE PROPRIKTARY. IJATA E INFORMACIÓN (INCLUSO DOCUMENTACIÓN) POSEÍDO POR McGRAW-HILL COMPANIES.
INC. ("McGRAW-HILL") Y SUS LICENCIADORES. SU DERECHO DE USAR EL PRODUCTO THK ES RY THH GOBERNADO TKRMS Y LAS
CONDICIONES DEL ESTE ACUERDO Y ES ADICIONAL SUJETO a THH THRMS Y CONDICIONES CONTENIDAS EN KACH del ACUERDO
DE LICENCIA DEL LICENCIADOR APLICABLE (cada uno un "LLA") INCLUIDO COMO LA PARTE DEL PRODUCTO. LICENCIA: en todas
partes del Acuerdo de licencia Ihis, "usted" debe querer decir el petróleo ella el individuo o el cnlily vvho.se agenl abren este paquete. Le conceden una
licencia no transferible anil no exclusiva para usar el producto Ihe sujeto para el fallowing lernis: (i) Si usted ha licenciado.1 versión de usuario sola de
Producl ihe. El producto de Ihe sólo puede Iw usado en un comandoador solo (es decir. una unidad central de proceso sola). Si usted licenciara y
pagara a honorarios ihe lo aplicable una red de área local o versión de red de área amplia ofihc producto, usted aie sujeto al término de ihe - de ihe
después de suhparagraph (ii), (esto) Si usted ha licenciado una versión de red de aiea local, usted puede usar salgo Pmducl mintiendo en iones de
listón de guiño ilimitados localizados en un huililinjr solo seleccionado por usted tailandés es atendido por tal red de área local. Si usted ha licenciado
una amplia versión de red de iii'cii, usted puede usar I él el producto en estaciones de trabajo ilimitadas localizó en imiltiple huiEdings en el sitio web.same
seleccionado por usted que es seived por tal red de área amplia; a condición de que. ¡bowcvCTi lha! cualquier edificio va nol estar considerado
localizado en la lata: mismo sitio web si es más lhan vivo (5) millas de distancia de cualquier edificio incluido en tal sile. Adición de Jn, usted sólo
puede usar LI red de área local o versión de red de área amplia de ProdtiLi en un servidor solo. Si usted desea usar el producto en más de un servidor,
usted la mamá oblain wrilten aulhon/alion de McGiaw-Uill anil paga honorarios adicionales. <iii) Usted puede hacer una copia del producto ihe con
objetivos de apaño sólo y usted musi mantienen un registro de accuuitc como lo ihe la posición del apaño a: todos los tiempos. CQI'YKICIIT; KKSI
RICI IONES EN USO Y yo KANSFKR: Todos los derechos (incluso copyright) en y al producto areowned por McGraw-Hill y sus licenciadores.
Usted es el dueño del disco encerrado de Ihe en el cual el producto Ihe es registrado. Usted no puede usar. copie, descompile, desmonte, invierta al
ingeniero, modifique, reproduzca, cree trabajos derivados, transmita, distribuya, sublicencia. tienda en una base de datos o sistema de recuperación de
cualquier clase, renl o transferencia producto de Ihe, o cualquier parte (del presente, en cualquier forma o por cualquier medio (incluso
electrónicamente o por otra parte) excepto como expresamente asegurado en este Acuerdo de licencia y cada uno 1.1. A. Ytiu debe repioduce ihe
copvnghi nol hielos, tiademark avisos, leyendas y logotipos de McGraw-Hill; los md iis licenciadores thar aparecen en Producl ihe en la copia de apaño
de Producl ihc que le permiten hacer h. yo. los mi. yo Todos los derechos en el producto Ihe nol expresamente grained aquí están McGraw-Hill
reservedby y sus licenciadores. TKHM: Este Acuerdo de licencia es tmlil eficaz icrminatcd. ll va lerminale si usted fuil para obedecer a wiih
cualquier término oreondilion del Acuerdo de licencia ihis y cada LLA, Sobre teiuiiniiiion. le obligan lo reiiirn a McCpi.m - Molino ihe producto
logelller con todas las copias I del presente y purgar todas las copias del producto Ihe incluido en cualquier anil todos los servidores e I'acililies
computei. MENTÍS OKEY GARANTÍA: EL PRODUCTO Y LA COPIA DE COPIA DE SEGURIDAD SON LICENCIADOS "COMO ES."
McGRAW-HILL. SUS LICENCIADORES Y AUTORES THK NO HACEN NINGUNAS GARANTÍAS. EXPRESE O IMPLICADO. EN CUANTO A
LOS RESULTADOS PARA SER OBTENIDOS POR CUALQUIER PERSONA O ENTIDAD DE USO DEL PRODUCTO. CUALQUIER
INFORMACIÓN O DATOS INCLUIDOS ALLÍ Y/O CUALQUIER SERVICIO DE APOYO TÉCNICO PROVEYERON BAJO LOS TÉRMINOS
AQUÍ ESTABLECIDOS. SI CUALQUIERA ("SERVICIOS DE APOYO TÉCNICO"). MECKAW-COLINA. SUS LICENCIADORES Y LOS
AUTORES MAKF. NINGUNA COMERCIABILIDAD de WAfiRANTIBSOT EXPRESA O IMPLÍCITA OKEY FITNE.SM-OKEY UN OBJETIVO
PARTICULAR AH USA CON RliSI'hC'l PARA IHI-: PKOIH'I 1 MCGKAW-COLINA. SUS LICENCIADORES. Y LOS AUTORES NO HACEN
NINGUNA GARANTÍA QUE USTED PASARÁ CUALQUIER EXAMEN DE CERTIFICACIÓN EN ABSOLUTO USANDO ESTE PRODUCTO.
NINGUNA MCGKAW-COLINA. CUALQUIER DE SUS LICENCIADORES NI LOS AUTORES GARANTIZA QUE LAS FUNCIONES
CONTENIDAS EN EL PRODUCTO CUMPLIRÁN CON SUS REQUISITOS O QUE LA OPERACIÓN AH EL PRODUCTO Será
ININTERRUMPIDA AH liRROR I:R]-L. USTED ASUME EL RIESGO de IHEl-MIKJ-con RESPECTO A LA CALIDAD Y PERFf IKMANCi; Ol-EL
PRODI K I GARANTÍA LIMITADA DISCO de EOK: A concesionario original Ihe sólo. McGraw-Hill... m.inr, que el disco incluido en el cual Ihe
Producl es registrado es libre de dcfccls en materiales y habilidad bajo uso normal y servicio para el periodo de noventa (') ()) los días del valle de la
compra. En acontecimiento Ihe de un ilefc-cl en disco de Ihe tiy cubierto ihe warranly anterior. McGraw-Hill reemplazará el disco de Ihe. LIMITACIÓN
DE RESPONSABILIDAD: NINGÚN McGRAW-HILL. SUS LICENCIADORES NI LOS AUTORES Deben ser OBLIGADOS DE CUALQUIERA
INDIRECTO. ESPECIAL OKEY DAÑOS CONSECUENCIALES. TAL COMO PERO NO LIMITADO CON. PÉRDIDA DE GANANCIAS
ESPERADAS O VENTAJAS. RESULTAR DEL USO OKEY INHABILIDAD DE USAR EL PRODUCTO AUN SI HAN ACONSEJADO A ALGUNO
DE ELLOS AH LA POSIBILIDAD DE TALES DAÑOS. ESTA LIMITACIÓN DE LA RESPONSABILIDAD Debe APLICARSE A CUALQUIER
RECLAMACIÓN O CAUSAR W H yo S O I 'V T K W H M I yo yo' K S I 'C H C M de I m O R C Un U S h AkIShS EN LA ESTAFA 1 RAC 1. 1 AH yo. () R n I
HERWIM' Sunn-sl; él - hace nol permiten a exclusión de Ihe 01 limicaiion de indiiect. los daños consecuenciales o especiales, entonces el susodicho el
limuaiion puede no aplicar lo usted.
Estados Unidos (lOVKKNMKNT KKSTKKTKI) K i yo, yo n • Cualquier softwaie incluido en Pioduci es piovided va) reslricled lighls sujetan 10
suliparagraphs ic), (I) imd (2l ol Ihe Comnuier comercial cláusula de Derechos Soriwiuo-restringida 4K Al-C.F.R. 52.227-11). El lermsof Ihis Acuerdo uso
de Ihe lo aplicable de los datos en el producto mí Ihose bajo cual Ihe dala ure generalmente puesto a disposición del gran público t> y McGraw-Hill. I-
xcepl como piovidcd aquí, ninguna reproducción, usan. o los derechos de revelación son grained con respecto al dala incluido en Producl y ningún lighl
para modificar o crear el derivado woikt 1'ioni cualesquiera tales datos son heiuhy concedido. (iKNKKAL: Esta Licencia Agieenii'iii y cada LLA
constituye agieemeni entero ihe bcrwccn ihe parlies relnling 10 producto ihe. Los términos de ait v i'i i ii. El pedido no debe ir la baya del espino
ningún efecto en los términos ol'iliis Licencia Agieemeni o cualquier LLA-En el cvcm de cualquier conllict bttWND ihe lerms de esta Licencia
Agreementand cualquier LLA. Ihe lerms ol'lhe LLA aplicable debe gobernar. El frainstancia de McGraw-Hill de insistir Al-cualquier tiempo en la
conformidad estricta con esta Licencia Agitemeni debe ir nol constituir una renuncia hacia cualquier derecho según este Acuerdo de licencia. Este
LicenseAgreement debe ser interpretado y gobernado de acuerdo con las leyes de [él Se vuelve duro de Nuevo Yoik Si cualquier estipulación de este
Acuerdo de licencia es sostenida [o ser el contrario lo ley. aquella provisión estará hecha cumplir al grado máximo permisible, y las provisiones
restantes permanecerán en fuerza llena y efecto.

También podría gustarte