You are on page 1of 28

Introduccin a Oracle 10g: SQL Fundamentals II

Base de Datos Oracle 10g:


Conceptos Fundamentales
de SQL II
Prcticas Adicionales y Soluciones

as

ic

t
c

Pr
es

ne

al
on
ci

di

A
y

o
ci

lu

So

Introduccin a Oracle 10g: SQL Fundamentals II

Autor

Copyright 2004, Oracle. Todos los derechos reservados.

Priya Vennapusa

Esta documentacin contiene informacin propiedad de Oracle Corporation;


se suministra bajo los trminos de un contrato de licencia que contiene
restricciones de uso y de revelacin y est tambin protegida por la
legislacin de derechos de autor. Queda prohibida la ingeniera reversa del
software. Si esta documentacin se entrega a una agencia del Ministerio de
Defensa del Gobierno de EE.UU., se aplicar la siguiente advertencia de
Restricted Rights:

Colaboradores
Tcnicos y Revisores

Restricted Rights Legend


Use, duplication or disclosure by the Government is subject to restrictions for
commercial computer software and shall be deemed to be Restricted Rights
software under Federal law, as set forth in subparagraph (c)(1)(ii) of DFARS
252.227-7013, Rights in Technical Data and Computer Software (October
1988).
Este material ni ninguna parte del mismo podr ser reproducido en cualquier
forma o a travs de cualquier medio sin el expreso consentimiento por
escrito de Oracle Corporation. La reproduccin es una violacin de la ley de
derechos de autor y puede tener consecuencias penales o civiles.

Editor

Si esta documentacin se entrega a una agencia del Gobierno de EE.UU.


no perteneciente al Ministerio de Defensa, se aplicar la advertencia de
Restricted Rights definida en FAR 52.227-14, Rights in Data-General,
incluido Alternate III (junio de 1987).
La informacin contenida en este documento est sujeta a cambio sin previo
aviso. Si detecta cualquier problema en la documentacin, le
agradeceremos lo comunique por escrito a Education Products, Oracle
Corporation, 500 Oracle Parkway, Redwood Shores, CA 94065. Oracle
Corporation no garantiza que este documento est exento de errores.

t
c

Pr

Nancy Greenberg
Priya Nathan
Andrew Brannigan
Angelika Krupp
Brian Boxx
Christopher Lawless
Joel Goodman
Malika Marghadi
Marjolein Dekkers
Stefan Grenstad
Zarko Cesljas
Rosita Hanoman
Ruediger Steffan

Joseph Fernandez

ic

Toda referencia a Oracle y a los Productos de Oracle constituyen marcas


comerciales o marcas comerciales registradas de Oracle Corporation.

as

Todos los dems nombres de compaas y productos mencionados se


utilizan a los exclusivos fines de su identificacin y pueden ser marcas
comerciales de sus respectivos propietarios.

es

ne

al
on
ci

di

A
y

o
ci

lu

So

Introduccin a Oracle 10g: SQL Fundamentals II

Contenido
Prefacio
Introduccin
Objetivos I-2
Objetivos del Curso I-3
Visin General del Curso I-4
Aplicacin del Curso 1-5
Resumen I-6

Control de Acceso de Usuarios


Objetivos 1-2
Control de Acceso de Usuarios 1-3
Privilegios 1-4
Privilegios del Sistema 1-5
Creacin de Usuarios 1-6
Privilegios del Sistema de Usuario 1-7
Otorgamiento de Privilegios del Sistema 1-8
Qu es un Rol? 1-9
Creacin y Otorgamiento de Privilegios a un Rol 1-10
Cambio de Contraseas 1-11
Privilegios de Objeto 1-12
Otorgamiento de Privilegios de Objeto 1-14
Transferencia de Privilegios 1-15
Confirmacin de Privilegios Otorgados 1-16
Revocacin de Privilegios de Objeto 1-17
Resumen 1-19
Prctica 1: Visin General 1-20

Gestin de Objetos de Esquema


Objetivos 2-2
Sentencia ALTER TABLE 2-3
Adicin de una Columna 2-5
Modificacin de una Columna 2-6
Borrado de una Columna 2-7
Opcin SET UNUSED 2-8
Adicin de una Sintaxis de Restriccin 2-10
Adicin de una Restriccin 2-11
ON DELETE CASCADE 2-12
Diferir Restricciones 2-13
Borrado de una Restriccin 2-14
Desactivacin de Restricciones 2-15

as

ic

t
c

Pr

es

ne

al
on
ci

di

o
ci

lu

So

iii

Introduccin a Oracle 10g: SQL Fundamentals II

Pr

Activacin de Restricciones 2-16


Restricciones en Cascada 2-18
Visin General de ndices 2-20
CREATE INDEX con Sentencia CREATE TABLE 2-21
ndices Basados en Funciones 2-23
Eliminacin de un ndice 2-24
DROP TABLE ...PURGE 2-25
Sentencia FLASHBACK TABLE 2-26
Tablas Externas 2-28
Creacisn de un Directorio para la Tabla Externa 2-30
Creacin de una Tabla Externa 2-32
Creacin de una Tabla Externa mediante ORACLE_LOADER 2-34
Consulta de Tablas Externas 2-36
Resumen 2-37
Prctica 2: Visin General 2-38

as

ic

t
c

3 Manipulacin de Grandes Juegos de Datos


Objetivos 3-2
Uso de Subconsultas para Manipular Datos 3-3
Copia de Filas de Otra Tabla 3-4
Insercin mediante una Subconsulta como Destino 3-5
Recuperacin de Datos con una Subconsulta como Origen 3-7
Actualizacin de Dos Columnas con una Subconsulta 3-8
Actualizacin de Filas Basndose en Otra Tabla 3-9
Supresin de Filas Basndose en Otra Tabla 3-10
Uso de las Palabras Clave WITH CHECK OPTION en Sentencias DML 3-11
Visin General de la Funcin de Valor por Defecto Explcito 3-12
Uso de Valores Por Defecto Explcitos 3-13
Visin General de Sentencias INSERT de Varias Tablas 3-14
Tipos de Sentencias INSERT de Varias Tablas 3-16
Sentencias INSERT de Varias Tablas 3-17
INSERT ALL Incondicional 3-19
INSERT ALL Condicional 3-20
INSERT FIRST Condicional 3-22
INSERT de Pivoting 3-24
Sentencia MERGE 3-27
Sintaxis de la Sentencia MERGE 3-28
Fusin de Filas 3-29
Seguimiento de Cambios en los Datos 3-31
Ejemplo de Consulta de Versiones de Flashback 3-32
Clusula VERSIONS BETWEEN 3-34
Resumen 3-35
Prctica 3: Visin General 3-36

es

ne

al
on
ci

di

o
ci

lu

So

iv

Introduccin a Oracle 10g: SQL Fundamentals II

Generacin de Informes mediante la Agrupacin de Datos Relacionados


Objetivos 4-2
Revisin de Funciones de Grupo 4-3
Revisin de la Clusula GROUP BY 4-4
Revisin de la Clusula HAVING 4-5
GROUP BY con los Operadores ROLLUP y CUBE 4-6
Operador ROLLUP 4-7
Operador ROLLUP: Ejemplo 4-8
Operador CUBE 4-9
Operador CUBE: Ejemplo 4-10
Funcin GROUPING 4-11
Funcin GROUPING: Ejemplo 4-12
GROUPING SETS 4-13
GROUPING SETS: Ejemplo 4-15
Columnas Compuestas 4-17
Columnas Compuestas: Ejemplo 4-19
Agrupamientos Concatenados 4-21
Agrupamientos Concatenados: Ejemplo 4-22
Resumen 4-23
Prctica 4: Visin General 4-24

Gestin de Datos en Zonas Horarias Diferentes


Objetivos 5-2
Zonas Horarias 5-3
Parmetro de Sesin TIME_ZONE 5-4
CURRENT_DATE, CURRENT_TIMESTAMP y LOCALTIMESTAMP 5-5
CURRENT_DATE 5-6
CURRENT_TIMESTAMP 5-7
LOCALTIMESTAMP 5-8
DBTIMEZONE y SESSIONTIMEZONE 5-9
Tipo de Datos TIMESTAMP 5-10
Tipos de Datos TIMESTAMP 5-11
Campos TIMESTAMP 5-12
Diferencia entre DATE y TIMESTAMP 5-13
Tipo de Datos TIMESTAMP WITH TIME ZONE 5-14
TIMESTAMP WITH TIMEZONE: Ejemplo 5-15
TIMESTAMP WITH LOCAL TIMEZONE 5-16
TIMESTAMP WITH LOCAL TIMEZONE: Ejemplo 5-17
Tipos de Datos INTERVAL 5-18
Campos INTERVAL 5-20
Tipo de Datos INTERVAL YEAR TO MONTH 5-21
INTERVAL YEAR TO MONTH: Ejemplo 5-22
Tipo de Datos INTERVAL DAY TO SECOND 5-23

as

ic

t
c

Pr

es

ne

al
on
ci

di

o
ci

lu

So

Introduccin a Oracle 10g: SQL Fundamentals II

Tipo de Datos INTERVAL DAY TO SECOND: Ejemplo 5-24


EXTRACT 5-25
TZ_OFFSET 5-26
Conversin de TIMESTAMP mediante FROM_TZ 5-28
Conversin a TIMESTAMP mediante TO_TIMESTAMP y TO_TIMESTAMP_TZ 5-29
Conversin de Intervalo de Tiempo con TO_YMINTERVAL 5-30
Uso de TO_DSINTERVAL: Ejemplo 5-31
Horario de Verano 5-32
Resumen 5-34
Prctica 5: Visin General 5-35
Recuperacin de Datos mediante Subconsultas
Objetivos 6-2
Subconsultas de Varias Columnas 6-3
Comparaciones de Columnas 6-4
Subconsulta de Comparacin entre Pares 6-5
Subconsulta de Comparacin entre No Pares 6-6
Expresiones de Subconsultas Escalares 6-7
Subconsultas Escalares: Ejemplos 6-8
Subconsultas Correlacionadas 6-10
Uso de Subconsultas Correlacionadas 6-12
Uso del Operador EXISTS 6-14
Bsqueda de Empleados que Tengan al Menos una Persona a sus rdenes 6-15
Bsqueda de Todos los Departamentos que No Tengan Empleados 6-16
Consulta Correlacionada: UPDATE 6-17
Uso de Consultas Correlacionadas: UPDATE 6-18
Consulta Correlacionada: DELETE 6-20
Uso de Consultas Correlacionadas: DELETE 6-21
Clusula WITH 6-22
Clusula WITH: Ejemplo 6-23
Resumen 6-25
Prctica 6: Visin General 6-27

Recuperacin Jerrquica
Objetivos 7-2
Ejemplo de Datos de la Tabla EMPLOYEES 7-3
Estructura de rbol Natural 7-4
Consultas Jerrquicas 7-5
Desplazamiento por el rbol 7-6
Desplazamiento por el rbol: De Abajo Arriba 7-8
Desplazamiento por el rbol: De Arriba Abajo 7-9
Clasificacin de Filas con la Pseudocolumna LEVEL 7-10
Formato de Informes Jerrquicos mediante LEVEL y LPAD 7-11
Eliminacin de Ramas 7-13

as

ic

t
c

Pr

es

ne

al
on
ci

di

o
ci

lu

So

vi

Introduccin a Oracle 10g: SQL Fundamentals II

Resumen 7-14
Prctica 7: Visin General 7-15
8

t
c

Pr

Soporte de Expresiones Normales


Objetivos 8-2
Visin General de Expresiones Normales 8-3
Metacaracteres 8-4
Uso de Metacaracteres 8-5
Funciones de Expresiones Normales 8-7
Sintaxis de la Funcin REGEXP 8-8
Realizacin de Bsquedas Bsicas 8-9
Comprobacin de la Presencia de un Patrn 8-10
Ejemplo de Extraccin de Subcadenas 8-11
Sustitucin de Patrones 8-12
Expresiones Normales y Restricciones de Control 8-13
Resumen 8-14
Prctica 8: Visin General 8-15

Apndice A: Soluciones a la Prctica


Apndice B: Descripciones de Tabla

ic

as

Apndice C: Escritura de Archivos de Comandos Avanzados


Objetivos C-2
Uso de SQL para Generar SQL C-3
Creacin de un Archivo de Comandos Bsico C-4
Control del Entorno C-5
La Imagen Completa C-6
Volcado del Contenido de una Tabla en un Archivo C-7
Generacin de un Predicado Dinmico C-9
Resumen C-11

ne

o
ci

es

al
on
ci

di

lu

So

Apndice D: Componentes de la Arquitectura Oracle


Objetivos D-2
Arquitectura de la Base de Datos Oracle: Visin General D-3
Arquitectura Fsica de la Base de Datos D-4
Archivos de Control D-5
Archivos Redo Log D-6
Tablespaces y Archivos de Datos D-7
Segmentos, Extensiones y Bloques D-8
Gestin de Instancias Oracle D-9
Estructuras de Memoria Oracle D-10
Procesos Oracle D-12
Otras Estructuras Fsicas Clave D-13
Procesamiento de una Sentencia SQL D-14

vii

Introduccin a Oracle 10g: SQL Fundamentals II

Conexin a una Instancia D-15


Procesamiento de una Consulta D-17
Pool Compartido D-18
Cach de Buffers de Base de Datos D-20
PGA (rea Global de Programas) D-21
Procesamiento de una Sentencia DML D-22
Buffer de Redo Log D-24
Segmento de Rollback D-25
Procesamiento COMMIT D-26
Resumen D-28
ndice
Prcticas Adicionales

as

ic

t
c

Pr

Soluciones a las Prcticas Adicionales

es

ne

al
on
ci

di

A
y

o
ci

lu

So

viii

Introduccin a Oracle 10g: SQL Fundamentals II

_______________

Prcticas
Adicionales
_______________

as

ic

t
c

Pr
es

ne

al
on
ci

di

A
y

o
ci

lu

So

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales

as

SPECIAL_SAL

ic

t
c

Pr

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las sentencias DML y DDL en la Leccin 2 y la Leccin 3.
Nota: Ejecute los archivos de comandos lab_ap_cre_special_sal.sql,
lab_ap_cre_sal_history.sql y lab_ap_cre_mgr_history.sql de la
carpeta de prcticas para crear las tablas SPECIAL_SAL, SAL_HISTORY y
MGR_HISTORY.
1. El departamento de recursos humanos desea obtener una lista de empleados mal
pagados, el historial salarial de los empleados y el historial salarial de los supervisores
basndose en una encuesta salarial de la industria. Le han pedido que haga lo
siguiente:
Escriba una sentencia para:
- Recuperar los detalles de identificador de empleado, fecha de contratacin,
salario e identificador de supervisor de los empleados cuyo identificador es
mayor o igual que 200 en la tabla EMPLOYEES.
- Si el salario es menor que 5.000 dlares, insertar los detalles de identificador de
empleado y salario en la tabla SPECIAL_SAL.
- Insertar los detalles de identificador de empleado, fecha de contratacin y
salario en la tabla SAL_HISTORY.
- Insertar los detalles de identificador de empleado, identificador de supervisor y
salario en la tabla MGR_HISTORY.
2. Consulte las tablas SPECIAL_SAL, SAL_HISTORY y MGR_HISTORY para ver los
registros insertados.

es

ne

o
ci

lu

al
on
ci

di

So

SALARY_HISTORY

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-2

10

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
MGR_HISTORY

Pr

3. La DBA necesita que cree una tabla, que tiene una restriccin de clave primaria, pero
quiere que al ndice se le asigne un nombre diferente al de la restriccin. Cree la tabla
LOCATIONS_NAMED_INDEX basada en el siguiente diagrama de instancia de tabla.
Asigne al ndice de la columna PRIMARY KEY el nombre LOCATIONS_PK_IDX.
Deptno

Dname

Primary Key

Yes

Data Type

Number

VARCHAR2

Length

30

ic

t
c

Column Name

as

4. Consulte la tabla USER_INDEXES para mostrar el INDEX_NAME de la tabla


LOCATIONS_NAMED_INDEX.

es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-3

11

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las mejoras de la clusula GROUP BY.

as

ic

t
c

Pr

5. El departamento de recursos humanos necesita informes de ciertos departamentos.


stos son los requisitos:
Escriba una consulta para mostrar lo siguiente de los departamentos cuyo
identificador sea mayor que 80:
- Salario total para todos los puestos dentro de un departamento
- Salario total
- Salario total para las ciudades en que estn ubicados los departamentos
- Salario total para todos los puestos, independientemente del departamento
- Salario total para todos los departamentos, independientemente de la ciudad
- Salario total de las ciudades en que estn ubicados los departamentos
- Salario total de los departamentos, independientemente de los cargos y las
ciudades

es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-4

12

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
6. El departamento de contabilidad necesita un anlisis sobre los salarios mximos y
mnimos por departamento, puesto y supervisor. Le han pedido que haga lo siguiente:
Escriba una consulta para mostrar los siguientes agrupamientos:
- Identificador de departamento, identificador de puesto
- Identificador de puesto, identificador de supervisor
La consulta debe calcular los salarios mximos y mnimos para cada uno de estos
grupos.

as

ic

t
c

Pr

es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-5

13

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las funciones de fecha/hora.
Trabaja en una compaa global y el nuevo vicepresidente de operaciones quiere conocer
las diferentes zonas horarias de todas las sucursales de la compaa. Ha solicitado la
siguiente informacin:
7. Modifique la sesin para definir NLS_DATE_FORMAT en DD-MON-YYYY
HH24:MI:SS.
8. a. Escriba consultas para mostrar los offsets de zona horaria (TZ_OFFSET), para las
siguientes zonas horarias.
Australia/Sydney

t
c

Pr

Chile/Easter Island

ic

b. Modifique la sesin para definir el valor del parmetro TIME_ZONE en el offset de


zona horaria Australia/Sydney.

as

c. Muestre los valores de SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP y


LOCALTIMESTAMP para esta sesin.
Nota: La salida podra ser diferente, segn la fecha en que se ejecute el comando.

di

So

es

al
on
ci

ne

o
ci

lu

d. Modifique la sesin para definir el valor del parmetro TIME_ZONE en el offset de


zona horaria Chile/Easter Island.
Nota: Los resultados de la pregunta anterior se basan en una fecha diferente y en
algunos casos no se correspondern con los resultados reales obtenidos por los
alumnos. Adems, el offset de zona horaria de los diferentes pases puede variar,
segn el horario de verano.
e. Muestre los valores de SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP y
LOCALTIMESTAMP para esta sesin.
Nota: La salida puede ser diferente, segn la fecha en que se ejecute el comando.

f. Modifique la sesin para definir NLS_DATE_FORMAT en DD-MON-YYYY.

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-6

14

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
Nota
Observe en la pregunta que CURRENT_DATE, CURRENT_TIMESTAMP y
LOCALTIMESTAMP son todos sensibles a la zona horaria de la sesin. Observe que
SYSDATE no es sensible a la zona horaria de la sesin.
Los resultados de la pregunta anterior se basan en una fecha diferente y en algunos
casos no se correspondern con los resultados reales obtenidos por los alumnos.
Adems, el offset de zona horaria de los diferentes pases puede variar, segn el
horario de verano.
9. El departamento de recursos humanos quiere una lista de empleados a la espera de
revisin en enero; as que le han solicitado lo siguiente:
Escriba una consulta para mostrar los apellidos, el mes de la fecha de contratacin y la
fecha de contratacin de los empleados que han sido contratados en el mes de enero,
independientemente del ao de contratacin.

as

ic

t
c

Pr
es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-7

15

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las subconsultas avanzadas.
10. El director general necesita un informe sobre las tres personas que ms ganan en la
compaa para el reparto de beneficios. Le ha pedido que le proporcione una lista.
Escriba una consulta para mostrar las tres personas que ms ganan de la tabla
EMPLOYEES. Muestre los apellidos y los salarios.

as

ic

t
c

Pr

11. Los beneficios para el estado de California han cambiado por culpa de nuevas leyes
locales. Por ese motivo, el representante de beneficios le ha pedido que compile una
lista de las personas afectadas.
Escriba una consulta para mostrar el identificador de empleado y los apellidos de los
empleados que trabajan en el estado de California.
Indicacin: Utilice subconsultas escalares.

es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-8

16

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales

as

ic

t
c

Pr

12. La DBA quiere eliminar informacin antigua de la base de datos. Una de las cosas
que considera innecesarias son los registros de empleados antiguos. Le ha pedido que
haga lo siguiente:
Escriba una consulta para suprimir la fila JOB_HISTORY ms antigua de un
empleado buscando MIN(START_DATE) en la tabla JOB_HISTORY del empleado.
Suprima los registros nicamente de los empleados que han trabajado al menos en dos
puestos diferentes.
Indicacin: Utilice un comando DELETE correlacionado.
13. El vicepresidente de recursos humanos necesita los registros de empleo completos
para su discurso anual de reconocimiento a los empleados. Recibe una rpida llamada
telefnica suya en la que le dice que no siga las rdenes de la DBA.
Haga rollback de la transaccin.
14. La inactividad en la economa est obligando a los supervisores a tomar medidas de
reduccin de costos. El director general desea revisar los puestos mejor pagados de la
compaa. Le ha solicitado una lista que se base en las siguientes especificaciones:
Escriba una consulta para mostrar los identificadores de puesto de los puestos cuyo
salario mximo est por encima de la mitad del salario mximo de toda la compaa.
Utilice la clusula WITH para escribir esta consulta. Asigne a la consulta el nombre
MAX_SAL_CALC.

al
on
ci

di

o
ci

lu

So

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado la recuperacin jerrquica.
15. Lex De Haan va a dejar la compaa. Su sustituto quiere informes de sus
subordinados directos.
Escriba una sentencia SQL para mostrar el nmero de empleado, el apellido, la fecha
de inicio y el salario, que muestre:
a. Subordinados directos de De Haan

es

ne

b. rbol de la organizacin por debajo de De Haan (nmero de empleado 102)

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-9

17

Introduccin a Oracle 10g: SQL Fundamentals II


Prcticas Adicionales
16. Escriba una consulta jerrquica para mostrar el nmero de empleado, el nmero de
supervisor y el apellido de empleado de todos los empleados que estn dos niveles por
debajo del empleado De Haan (empleado nmero 102). Muestre tambin el nivel del
empleado.

as

ic

t
c

Pr

17. El director general necesita un informe jerrquico sobre todos los empleados. Le ha
proporcionado los siguientes requisitos:
Genere un informe jerrquico para mostrar el nmero de empleado, el nmero de
supervisor, la pseudocolumna LEVEL y el apellido del empleado. Para todas las filas
de la tabla EMPLOYEES, debe imprimir una estructura de rbol que muestre el
empleado, el supervisor del empleado, el supervisor de ese supervisor y as
sucesivamente. Utilice sangrados para la columna NAME.

al
on
ci

di

A
y

o
ci

lu

So

Nota: La salida que se muestra no es ms que un ejemplo. No se incluyen todas las filas de
la salida real.

es

ne

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Prcticas


Adicionales-10

18

Introduccin a Oracle 10g: SQL Fundamentals II

_______________

Soluciones a
las Prcticas
Adicionales
_______________

as

ic

t
c

Pr
es

ne

al
on
ci

di

A
y

o
ci

lu

So

19

Introduccin a Oracle 10g: SQL Fundamentals II

t
c

Pr

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las sentencias DML y DDL en la Leccin 2 y la Leccin 3.
Nota: Ejecute los archivos de comandos lab_ap_cre_special_sal.sql,
lab_ap_cre_sal_history.sql y lab_ap_cre_mgr_history.sql de la
carpeta de prcticas para crear las tablas SPECIAL_SAL, SAL_HISTORY y
MGR_HISTORY.
1. El departamento de recursos humanos desea obtener una lista de empleados mal
pagados, el historial salarial de los empleados y el historial salarial de los supervisores
basndose en una encuesta salarial de la industria. Le han pedido que haga lo
siguiente:
Escriba una sentencia para:
- Recuperar los detalles de identificador de empleado, fecha de contratacin,
salario e identificador de supervisor de los empleados cuyo identificador es
mayor o igual que 200 en la tabla EMPLOYEES.
- Si el salario es menor que 5.000 dlares, insertar los detalles de identificador de
empleado y salario en la tabla SPECIAL_SAL.
- Insertar los detalles de identificador de empleado, fecha de contratacin y
salario en la tabla SAL_HISTORY.
- Insertar los detalles de identificador de empleado, identificador de supervisor y
salario en la tabla MGR_HISTORY.

as

ic

INSERT ALL
WHEN SAL < 5000 THEN
INTO special_sal VALUES (EMPID, SAL)
ELSE
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id >=200;

al
on
ci

di

o
ci

lu

So

2. Consulte las tablas SPECIAL_SAL, SAL_HISTORY y MGR_HISTORY para ver los


registros insertados.

es

ne

SELECT * FROM special_sal;


SELECT * FROM sal_history;
SELECT * FROM mgr_history;

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-2
20

Introduccin a Oracle 10g: SQL Fundamentals II

3. La DBA necesita que cree una tabla, que tiene una restriccin de clave primaria, pero
quiere que al ndice se le asigne un nombre diferente al de la restriccin. Cree la tabla
LOCATIONS_NAMED_INDEX basada en el siguiente diagrama de instancia de tabla.
Asigne al ndice de la columna PRIMARY KEY el nombre LOCATIONS_PK_IDX.
Column Name

Deptno

Dname

Primary Key

Yes

Data Type

Number

VARCHAR2

Length

30

t
c

Pr

CREATE TABLE LOCATIONS_NAMED_INDEX


(location_id NUMBER(4) PRIMARY KEY USING INDEX
(CREATE INDEX locations_pk_idx ON
LOCATIONS_NAMED_INDEX(location_id)),
location_name VARCHAR2(20));

4. Consulte la tabla USER_INDEXES para mostrar el INDEX_NAME de la tabla


LOCATIONS_NAMED_INDEX.

ic

as

SELECT INDEX_NAME, TABLE_NAME


FROM USER_INDEXES
WHERE TABLE_NAME = LOCATIONS_NAMED_INDEX;

di

So

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las mejoras de la clusula GROUP BY.

es

al
on
ci

ne

o
ci

lu

5. El departamento de recursos humanos necesita informes de ciertos departamentos.


stos son los requisitos:
Escriba una consulta para mostrar lo siguiente de los departamentos cuyo
identificador sea mayor que 80:
- Salario total para todos los puestos dentro de un departamento
- Salario total
- Salario total para las ciudades en que estn ubicados los departamentos
- Salario total para todos los puestos, independientemente del departamento
- Salario total para todos los departamentos, independientemente de la ciudad
- Salario total de las ciudades en que estn ubicados los departamentos
- Salario total de los departamentos, independientemente de los cargos
y las ciudades

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-3
21

Introduccin a Oracle 10g: SQL Fundamentals II

COLUMN
COLUMN
COLUMN
COLUMN

city FORMAT A25 Heading CITY


department_name FORMAT A15 Heading DNAME
job_id FORMAT A10 Heading JOB
SUM(salary) FORMAT $99,99,999.00 Heading
SUM(SALARY)

SELECT

l.city, d.department_name, e.job_id,


SUM(e.salary)
FROM
locations l, employees e, departments d
WHERE
d.location_id = l.location_id
AND
e.department_id = d.department_id
AND
e.department_id > 80
GROUP BY CUBE( l.city, d.department_name, e.job_id);

Pr

as

ic

t
c

6. El departamento de contabilidad necesita un anlisis sobre los salarios mximos y


mnimos por departamento, puesto y supervisor. Le han pedido que haga lo siguiente:
Escriba una consulta para mostrar los siguientes agrupamientos:
- Identificador de departamento, identificador de puesto
- Identificador de puesto, identificador de supervisor
La consulta debe calcular los salarios mximos y mnimos para cada uno
de estos grupos.

al
on
ci

di

lu

So

SELECT
department_id,job_id,manager_id,max(salary),
min(salary)
FROM
employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));

es

ne

o
ci

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las funciones de fecha/hora.
Trabaja en una compaa global y el nuevo vicepresidente de operaciones quiere conocer
las diferentes zonas horarias de todas las sucursales de la compaa. Ha solicitado la
siguiente informacin:
7. Modifique la sesin para definir NLS_DATE_FORMAT en DD-MON-YYYY
HH24:MI:SS.
ALTER SESSION
SET NLS_DATE_FORMAT = DD-MON-YYYY HH24:MI:SS;

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-4
22

Introduccin a Oracle 10g: SQL Fundamentals II

8. a.

Escriba consultas para mostrar los offsets de zona horaria (TZ_OFFSET) para
las siguientes zonas horarias.
- Australia/Sydney
SELECT TZ_OFFSET (Australia/Sydney) from dual;

Chile/Easter Island
SELECT TZ_OFFSET (Chile/EasterIsland) from dual;

b.

Modifique la sesin para definir el valor del parmetro TIME_ZONE en el offset


de zona horaria Australia/Sydney.

c.

Pr

ALTER SESSION SET TIME_ZONE = +10:00;

t
c

Muestre los valores de SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP


y LOCALTIMESTAMP para esta sesin.
Nota: La salida puede ser diferente, segn la fecha en que se ejecute el comando.

Modifique la sesin para definir el valor del parmetro TIME_ZONE en el offset


de zona horaria Chile/Easter Island.
Nota: Los resultados de la pregunta anterior se basan en una fecha diferente y en
algunos casos no se correspondern con los resultados reales obtenidos por los
alumnos. Adems, el offset de zona horaria de los diferentes pases puede variar,
segn el horario de verano.

as

d.

ic

SELECT SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP,


LOCALTIMESTAMP FROM DUAL;

di

So

al
on
ci

lu

e.

ALTER SESSION SET TIME_ZONE = -06:00;

o
ci

Muestre los valores de SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP


y LOCALTIMESTAMP para esta sesin.
Nota: La salida puede ser diferente, segn la fecha en que se ejecute el comando.

es

Modifique la sesin para definir NLS_DATE_FORMAT en DD-MON-YYYY.

f.

ne

SELECT SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP,


LOCALTIMESTAMP FROM DUAL;

ALTER SESSION SET NLS_DATE_FORMAT = DD-MON-YYYY;

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-5
23

Introduccin a Oracle 10g: SQL Fundamentals II

Nota
Observe en la pregunta que CURRENT_DATE, CURRENT_TIMESTAMP y
LOCALTIMESTAMP son todos sensibles a la zona horaria de la sesin. Observe que
SYSDATE no es sensible a la zona horaria de la sesin.
Los resultados de la pregunta anterior se basan en una fecha diferente y en algunos
casos no se correspondern con los resultados reales obtenidos por los alumnos.
Adems, el offset de zona horaria de los diferentes pases puede variar, segn el
horario de verano.
9. El departamento de recursos humanos quiere una lista de empleados a la espera de
revisin en enero; as que le han solicitado lo siguiente:
Escriba una consulta para mostrar los apellidos, el mes de la fecha de contratacin y la
fecha de contratacin de los empleados que han sido contratados en el mes de enero,
independientemente del ao de contratacin.

t
c

Pr

SELECT last_name, EXTRACT (MONTH FROM HIRE_DATE),


HIRE_DATE FROM employees
WHERE EXTRACT (MONTH FROM HIRE_DATE) = 1;

ic

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado las subconsultas avanzadas.

as

10. El director general necesita un informe sobre las tres personas que ms ganan en la
compaa para el reparto de beneficios. Le ha pedido que le proporcione una lista.
Escriba una consulta para mostrar las tres personas que ms ganan de la tabla
EMPLOYEES. Muestre los apellidos y los salarios.

So

al
on
ci

o
ci

lu

di

SELECT last_name, salary


FROM employees e
WHERE 3 > (SELECT COUNT (*)
FROM employees
WHERE e.salary < salary);

es

ne

11. Los beneficios para el estado de California han cambiado por culpa de nuevas leyes
locales. Por ese motivo, el representante de beneficios le ha pedido que compile una
lista de las personas afectadas. Escriba una consulta para mostrar el identificador de
empleado y los apellidos de los empleados que trabajan en el estado de California.
Indicacin: Utilice subconsultas escalares.

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-6
24

Introduccin a Oracle 10g: SQL Fundamentals II

SELECT employee_id, last_name


FROM employees e
WHERE ((SELECT location_id
FROM departments d
WHERE e.department_id = d.department_id )
IN (SELECT location_id
FROM locations l
WHERE state_province = California));

t
c

Pr

12. La DBA quiere eliminar informacin antigua de la base de datos. Una de las cosas
que considera innecesarias son los registros de empleados antiguos. Le ha pedido que
haga lo siguiente:
Escriba una consulta para suprimir la fila JOB_HISTORY ms antigua de un
empleado buscando MIN(START_DATE) en la tabla JOB_HISTORY del empleado.
Suprima los registros nicamente de los empleados que han trabajado al menos en dos
puestos diferentes.
Indicacin: Utilice un comando DELETE correlacionado.

as

ic

DELETE FROM job_history JH


WHERE employee_id = (SELECT employee_id
FROM employees E
WHERE JH.employee_id = E.employee_id
AND START_DATE = (SELECT MIN(start_date)
FROM job_history JH
WHERE JH.employee_id = E.employee_id)
AND 3 > (SELECT COUNT(*)
FROM job_history JH
WHERE JH.employee_id = E.employee_id
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) >= 2));

al
on
ci

di

o
ci

lu

So

es

ROLLBACK;

ne

13. El vicepresidente de recursos humanos necesita los registros de empleo completos


para su discurso anual de reconocimiento a los empleados. Recibe una rpida llamada
telefnica suya en la que le dice que no siga las rdenes de la DBA.
Haga rollback de la transaccin.

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-7
25

Introduccin a Oracle 10g: SQL Fundamentals II

14. La inactividad en la economa est obligando a los supervisores a tomar medidas de


reduccin de costos. El director general desea revisar los puestos mejor pagados de la
compaa. Le ha solicitado una lista que se base en las siguientes especificaciones:
Escriba una consulta para mostrar los identificadores de puesto de los puestos cuyo
salario mximo est por encima de la mitad del salario mximo de toda la compaa.
Utilice la clusula WITH para escribir esta consulta. Asigne a la consulta el nombre
MAX_SAL_CALC.

t
c

Pr

WITH
MAX_SAL_CALC AS (SELECT job_title, MAX(salary) AS
job_total
FROM employees, jobs
WHERE employees.job_id = jobs.job_id
GROUP BY job_title)
SELECT job_title, job_total
FROM MAX_SAL_CALC
WHERE job_total > (SELECT MAX(job_total) * 1/2
FROM MAX_SAL_CALC)
ORDER BY job_total DESC;

as

ic

Los siguientes ejercicios se pueden utilizar como prctica adicional despus de haber
estudiado la recuperacin jerrquica.
15. Lex De Haan va a dejar la compaa. Su sustituto quiere informes de sus
subordinados directos.
Escriba una sentencia SQL para mostrar el nmero de empleado, el apellido, la fecha
de inicio y el salario, que muestre:
a.
Subordinados directos de De Haan

al
on
ci

di

b.

o
ci

lu

So

SELECT employee_id, last_name, hire_date, salary


FROM employees
WHERE manager_id = (SELECT employee_id
FROM employees
WHERE last_name = De Haan);

rbol de la organizacin por debajo de De Haan (nmero de empleado 102)

es

ne

SELECT employee_id, last_name, hire_date, salary


FROM employees
WHERE employee_id != 102
CONNECT BY manager_id = PRIOR employee_id
START WITH employee_id = 102;

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-8
26

Introduccin a Oracle 10g: SQL Fundamentals II

16. Escriba una consulta jerrquica para mostrar el nmero de empleado, el nmero de
supervisor y el apellido de empleado de todos los empleados que estn dos niveles por
debajo del empleado De Haan (empleado nmero 102). Muestre tambin el nivel
del empleado.
SELECT employee_id, manager_id, level, last_name
FROM employees
WHERE LEVEL = 3
CONNECT BY manager_id = PRIOR employee_id
START WITH employee_id = 102;

t
c

Pr

17. El director general necesita un informe jerrquico sobre todos los empleados. Le ha
proporcionado los siguientes requisitos:
Genere un informe jerrquico para mostrar el nmero de empleado, el nmero de
supervisor, la pseudocolumna LEVEL y el apellido del empleado. Para todas las filas
de la tabla EMPLOYEES, debe imprimir una estructura de rbol que muestre el
empleado, el supervisor del empleado, el supervisor de ese supervisor y as
sucesivamente. Utilice sangrados para la columna NAME.

as

ic

COLUMN name FORMAT A25


SELECT employee_id, manager_id, LEVEL,
LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')
LAST_NAME
FROM
employees
CONNECT BY employee_id = PRIOR manager_id;
COLUMN name CLEAR

es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-9
27

Introduccin a Oracle 10g: SQL Fundamentals II

as

ic

t
c

Pr
es

ne

al
on
ci

di

A
y

o
ci

lu

So

Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II Soluciones a las


Prcticas Adicionales-10
28

You might also like