Documente Academic
Documente Profesional
Documente Cultură
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
1
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
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
iii
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
iv
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
v
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
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
vi
Resumen 7-14
Prctica 7: Visin General 7-15
8
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
vii
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
viii
Prefacio
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Prefacio - 2
Perfil
Antes de Empezar Este Curso
Requisitos
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Prefacio - 3
10
Publicaciones Relacionadas
Publicaciones Adicionales
Archivos read-me
Oracle Magazine
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Prefacio - 4
11
Convenciones Tipogrficas
Convenciones Tipogrficas del Texto
Convencin
Elemento
Ejemplo
Negrita
Cursiva
negrita
Corchetes
Nombres de tecla
Pulse [Enter].
Maysculas
y minsculas
Botones,
casillas de control,
disparadores,
ventanas
Comas
Secuencias de teclas
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Corchetes
angulares
Prefacio - 5
12
Objeto o Trmino
Ejemplo
Courier New,
sensible a
maysculas/m
insculas
Salida de cdigo,
elementos de cdigo
SQL y PL/SQL,
elementos de cdigo
Java, nombres de
directorio, nombres
de archivo,
contraseas,
nombres de ruta de
acceso, direcciones
URL,
datos introducidos
por el usuario,
nombres de usuario
Convencin
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Maysculas
iniciales
Cursiva
Frases y palabras
enfatizadas en
publicaciones
impresas, ttulos de
libros y cursos,
variables
Combinaciones de
teclas
Signos ms
Comillas
Ttulos de captulo y
de leccin en
referencias cruzadas,
elementos de
interfaz con
nombres largos que
slo tienen las
iniciales en
maysculas
Prefacio - 6
13
(I) = Icono
(M) = Men
(S) = Separador
(B) = Botn
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Prefacio - 7
14
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
15
Prefacio - 8
Introduccin
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
16
Objetivos
Al finalizar esta leccin, debera estar capacitado para:
Mostrar los objetivos del curso
Describir las tablas de ejemplo utilizadas en el curso
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II I-2
17
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II I-3
18
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II I-4
19
EMPLOYEES
DEPARTMENTS
COUNTRIES
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
REGIONS
LOCATIONS
20
Resumen
En esta leccin, ha aprendido lo siguiente:
Objetivos del curso
Tablas de ejemplo utilizadas en el curso
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II I-6
21
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
22
Objetivos
Al finalizar esta leccin, debera estar capacitado para:
Diferenciar los privilegios del sistema de los de
objeto
Otorgar privilegios en tablas
Ver privilegios en el diccionario de datos
Otorgar roles
Distinguir entre privilegios y roles
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
En esta leccin, aprender a controlar el acceso a base de datos para objetos especficos y a
agregar nuevos usuarios con diferentes niveles de privilegios de acceso.
23
Administrador
de la base
de datos
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
La seguridad de base de datos se puede clasificar en dos categoras: seguridad del sistema y
seguridad de los datos. La seguridad del sistema cubre el acceso y el uso de la base de datos
en el nivel del sistema como, por ejemplo, nombre de usuario y contrasea, el espacio en
disco asignado a los usuarios y las operaciones del sistema que pueden realizar los usuarios.
La seguridad de datos cubre el acceso y el uso de los objetos de base de datos y las acciones
que esos usuarios pueden llevar a cabo en los objetos.
24
Privilegios
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Privilegios
Los privilegios son el derecho a ejecutar sentencias SQL en particular. El DBA (administrador
de la base de datos) es un usuario de alto nivel con la capacidad de crear usuarios y de
otorgarles acceso a la base de datos y a sus objetos. Los usuarios necesitan privilegios del
sistema para obtener acceso a la base de datos y privilegios de objeto para manipular el
contenido de los objetos de la base de datos. A los usuarios tambin se les puede otorgar el
privilegio de otorgar privilegios adicionales a otros usuarios o a roles, que son grupos
especificados de privilegios relacionados.
Esquemas
Un esquema es una recopilacin de objetos como, por ejemplo, tablas, vistas y secuencias. El
esquema es propiedad de un usuario de base de datos y tiene el mismo nombre que el usuario.
Para obtener ms informacin, consulte el manual de referencia Oracle Database 10g
Application Developers Guide Fundamentals.
25
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Los usuarios y los roles tienen a su disposicin ms de 100 privilegios del sistema distintos.
Los privilegios del sistema suelen ser proporcionados por el administrador de la base de datos.
Privilegios de DBA Tpicos
Privilegio del Sistema
Operaciones Autorizadas
CREATE USER
DROP USER
26
Creacin de Usuarios
El DBA crea usuarios mediante la sentencia CREATE USER.
CREATE USER user
IDENTIFIED BY
password;
CREATE USER HR
IDENTIFIED BY
HR;
User created.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Creacin de un Usuario
Para crear el usuario, el DBA ejecuta la sentencia CREATE USER. El usuario no tiene ningn
privilegio en ese momento. Por tanto, el DBA puede otorgar privilegios a ese usuario. Estos
privilegios determinan lo que el usuario podr hacer en el nivel de base de datos.
La diapositiva muestra la sintaxis resumida para crear un usuario.
En la sintaxis:
user
es el nombre del usuario que se va a crear
Password
especifica que el usuario se debe conectar con esta contrasea
Para obtener ms informacin, consulte Oracle Database 10g SQL Reference, GRANT y
CREATE USER.
27
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
SESSION
TABLE
SEQUENCE
VIEW
PROCEDURE
Operaciones Autorizadas
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
CREATE PROCEDURE
En la sintaxis:
privilege
user
|role|PUBLIC
28
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
El DBA utiliza la sentencia GRANT para asignar privilegios del sistema al usuario. Una vez
que se le han otorgado los privilegios al usuario, ste puede utilizarlos de forma inmediata.
En el ejemplo de la diapositiva, se han asignado al usuario Scott privilegios para crear
sesiones, tablas, secuencias y vistas.
29
Qu es un Rol?
Usuarios
Gestor
Privilegios
Asignacin de privilegios
con un rol
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Asignacin de privilegios
sin un rol
Qu es un Rol?
Un rol es un grupo especificado de privilegios relacionados que se pueden otorgar al usuario.
Este mtodo facilita la revocacin y el mantenimiento de privilegios.
Un usuario puede tener acceso a varios roles y se puede asignar a varios usuarios el mismo
rol. Los roles se suelen crear para una aplicacin de base de datos.
ROLE role;
En la sintaxis:
role
es el nombre del rol que se va a crear
Una vez creado el rol, el DBA puede utilizar la sentencia GRANT para asignar el rol a
usuarios, del mismo modo que puede asignar privilegios al rol.
30
Cree un rol
CREATE ROLE manager;
Role created.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Creacin de un Rol
El ejemplo de la diapositiva crea un rol de gestor y, a continuacin, permite a los gestores
crear tablas y vistas. Otorga despus a De Haan y a Kochhar el rol de gestores. De Haan y
Kochhar ya pueden crear tablas y vistas.
Si se otorga a los usuarios varios roles, reciben todos los privilegios asociados a esos roles.
31
Cambio de Contraseas
ALTER USER HR
IDENTIFIED BY employ;
User altered.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Cambio de Contraseas
El DBA crea una cuenta e inicializa una contrasea para cada usuario. La contrasea se puede
cambiar mediante la sentencia ALTER USER.
Sintaxis
En la sintaxis:
user
password
Aunque esta sentencia se puede utilizar para cambiar la contrasea, hay muchas otras
opciones. Debe tener el privilegio ALTER USER para cambiar cualquier otra opcin.
Para obtener ms informacin, consulte el manual Oracle Database 10g SQL Reference.
Nota: SQL*Plus dispone de un comando PASSWORD (PASSW) que se puede utilizar para
cambiar la contrasea de un usuario cuando ste est conectado. Este comando no est
disponible en iSQL*Plus.
32
Privilegios de Objeto
Privilegios
de Objeto
Tabla
ALTER
DELETE
Vista
Secuencia
Procedimiento
EXECUTE
INSERT
REFERENCES
SELECT
UPDATE
INDEX
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Privilegios de Objeto
Un privilegio de objeto es un privilegio o un derecho a realizar una accin determinada en
una tabla, una vista, una secuencia o un procedimiento especficos. Cada objeto dispone de un
juego determinado de privilegios que se pueden otorgar. La tabla de la diapositiva muestra los
privilegios de varios objetos. Tenga en cuenta que los nicos privilegios que se aplican a una
secuencia son SELECT y ALTER. UPDATE, REFERENCES e INSERT se pueden restringir
mediante la especificacin de un subjuego de columnas que se puedan actualizar. Para
restringir un privilegio SELECT, se puede crear una vista con un subjuego de columnas y
otorgar el privilegio SELECT nicamente en la vista. Un privilegio otorgado en un sinnimo
se convierte en un privilegio en la tabla base a la que haga referencia el sinnimo.
33
Privilegios de Objeto
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
34
GRANT select
ON
employees
TO
sue, rich;
Grant succeeded.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Instrucciones
Para otorgar privilegios en un objeto, ste debe estar en el esquema o le deben haber
otorgado los privilegios de objeto con la clusula WITH GRANT OPTION.
Un propietario de objeto puede otorgar cualquier privilegio de objeto a cualquier otro
usuario o rol de la base de datos.
El propietario de un objeto adquiere automticamente todos los privilegios de objeto en
ese objeto.
El primer ejemplo de la diapositiva otorga a los usuarios Sue y Rich el privilegio para
consultar la tabla EMPLOYEES. El segundo ejemplo otorga privilegios UPDATE en columnas
especficas de la tabla DEPARTMENTS a Scott y al rol de gestor.
Si Sue o Rich quieren utilizar ahora una sentencia SELECT para obtener datos de la tabla
EMPLOYEES, la sintaxis que deben utilizar es:
SELECT
* FROM HR.employees;
De forma alternativa, pueden crear un sinnimo para la tabla y emitir una sentencia SELECT
desde el sinnimo:
CREATE SYNONYM emp FOR HR.employees;
SELECT * FROM emp;
Nota: Los DBA suelen asignar privilegios del sistema; cualquier usuario propietario de un
objeto puede otorgar privilegios de objeto.
35
Transferencia de Privilegios
GRANT select
ON
alice.departments
TO
PUBLIC;
Grant succeeded.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Un propietario de la tabla puede otorgar acceso a todos los usuarios mediante la palabra clave
PUBLIC.
El segundo ejemplo permite a todos los usuarios del sistema consultar datos de la tabla
DEPARTMENTS de Alice.
36
ROLE_TAB_PRIVS
USER_ROLE_PRIVS
USER_TAB_PRIVS_MADE
USER_TAB_PRIVS_RECD
USER_COL_PRIVS_MADE
USER_COL_PRIVS_RECD
ROLE_SYS_PRIVS
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
USER_SYS_PRIVS
Si recibe el mensaje de error de Oracle Server table or view does not exist, es porque ha
realizado una de estas acciones:
Ha especificado una tabla o una vista que no existen
Ha intentado realizar una operacin en una tabla o en una vista para la que no tiene el
privilegio adecuado
Puede acceder al diccionario de datos para ver los privilegios de los que dispone. El grfico
de la diapositiva describe varias vistas de diccionario de datos.
37
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Nota: Si revoca los privilegios de un usuario que debe dejar la compaa, debe volver a
otorgar cualquier privilegio que este usuario hubiera otorgado a otros usuarios. Si borra la
cuenta de usuario sin revocarle los privilegios, esta accin no afectar a los privilegios del
sistema otorgados por este usuario a otros usuarios.
38
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
39
Resumen
En esta leccin, ha obtenido informacin acerca de
sentencias que controlan el acceso a la base de datos
y a objetos de base de datos.
Accin
CREATE USER
GRANT
CREATE ROLE
Sentencia
REVOKE
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
ALTER USER
Resumen
Los DBA establecen la seguridad de base de datos inicial para los usuarios asignndoles
privilegios.
El DBA crea usuarios que deben tener una contrasea. El DBA es responsable adems
de establecer los privilegios iniciales del sistema para un usuario.
Cuando el usuario ha creado un objeto, puede transferir cualquiera de los privilegios de
objeto disponibles a otros usuarios o a todos los usuarios mediante la sentencia GRANT.
Un DBA puede crear roles mediante la sentencia CREATE ROLE para transferir una
recopilacin de privilegios del sistema o de objeto a varios usuarios. Los roles facilitan
el mantenimiento del otorgamiento y de la revocacin de privilegios.
Los usuarios pueden cambiar la contrasea mediante la sentencia ALTER USER.
Puede eliminar privilegios otorgados a otros usuarios mediante la sentencia REVOKE.
Con las vistas de diccionario de datos, los usuarios pueden ver los privilegios que se les
han otorgado y los que se han otorgado a sus objetos.
Con los enlaces de base de datos, puede acceder a datos en bases de datos remotas. No
se pueden otorgar privilegios en objetos remotos.
40
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Forme un equipo con otros alumnos para este ejercicio sobre el control del acceso a los objetos
de base de datos.
41
Prctica 1
Para contestar a la pregunta 6 y a las posteriores, se deber conectar a la base de datos
mediante iSQL*Plus. Para ello, inicie el explorador Internet Explorer desde el escritorio del
cliente. Introduzca la direccin URL en formato http://machinename:5561/isqlplus/ y utilice
la cuenta oraxx y la contrasea y el identificador de servicio correspondientes (en formato
Tx) que le proporcione el instructor para conectarse a la base de datos.
1. Qu privilegio se debe otorgar a un usuario para conectarse a Oracle Server? Se trata
de un privilegio de objeto o del sistema?
_____________________________________________________________________
2. Qu privilegio se debe otorgar a un usuario para crear tablas?
_____________________________________________________________________
3. Si crea una tabla, quin puede transferir privilegios a otros usuarios en su tabla?
_____________________________________________________________________
4. Usted es el DBA. Est creando muchos usuarios que requieren los mismos privilegios
del sistema.
Qu debera utilizar para facilitar el trabajo?
_____________________________________________________________________
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
42
Prctica 1 (continuacin)
8. Agregue una nueva fila a su tabla DEPARTMENTS. El equipo 1 debe agregar Education
como nmero de departamento 500. El equipo 2 debe agregar Human Resources como
nmero de departamento 510. Consulte la tabla del otro equipo.
9. Cree un sinnimo para la tabla DEPARTMENTS del otro equipo.
10. Consulte todas las filas de la tabla DEPARTMENTS del otro equipo mediante el sinnimo.
Team 1 SELECT statement results:
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
43
Prctica 1 (continuacin)
11. Consulte el diccionario de datos USER_TABLES para ver informacin sobre las tablas
que son de su propiedad.
12. Consulte la vista de diccionario de datos ALL_TABLES para ver informacin sobre todas
las tablas a las que puede acceder. Excluya las tablas de su propiedad.
Nota: La lista que obtenga puede que no coincida exactamente con la que se muestra a
continuacin.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
14. Elimine la fila que insert en la tabla DEPARTMENTS en el paso 8 y guarde los cambios.
44
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 1-24
45
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
46
Objetivos
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
Esta leccin contiene informacin sobre la creacin de ndices y restricciones, as como sobre
la modificacin de objetos existentes. Tambin recibir informacin sobre tablas externas y la
provisin para asignar un nombre el ndice en el momento de la creacin de una restriccin de
clave primaria.
47
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
48
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
49
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
50
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
51
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
52
TABLE <table_name>
UNUSED(<column_name>);
TABLE <table_name>
UNUSED COLUMN <column_name>;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
53
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 2-9
54
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
55
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
56
ON DELETE CASCADE
Suprima las filas secundarias al suprimir una clave
principal.
ALTER TABLE Emp2 ADD CONSTRAINT emp_dt_fk
FOREIGN KEY (Department_id)
REFERENCES departments ON DELETE CASCADE);
Table altered.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
ON DELETE CASCADE
La accin ON DELETE CASCADE permite que se supriman los datos de clave principal a los
que se hace referencia desde la tabla secundaria, pero no que se actualicen. Cuando se
suprimen los datos de la clave principal, tambin se suprimen todas las filas de la tabla
secundaria que dependen de los valores de la clave principal suprimida. Para especificar esta
accin referencial, incluya la opcin ON DELETE CASCADE en la definicin de la
restriccin FOREIGN KEY.
57
Diferir Restricciones
Las restricciones pueden tener estos atributos:
DEFERRABLE o NOT DEFERRABLE
INITIALLY DEFERRED o INITIALLY IMMEDIATE
ALTER TABLE dept2
ADD CONSTRAINT dept2_id_pk
PRIMARY KEY (department_id)
DEFERRABLE INITIALLY DEFERRED
Diferir restricciones en el
momento de la creacin
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
ALTER SESSION
SET CONSTRAINTS= IMMEDIATE
Cambio de un atributo
especfico de restriccin
Diferir Restricciones
Se puede diferir la comprobacin de validez de las restricciones hasta el final de la transaccin.
Una restriccin es diferida si el sistema comprueba que se satisface nicamente en el momento
de la validacin. Si se viola una restriccin diferida, la validacin provoca que se haga rollback
de la transaccin. Si una restriccin es inmediata (no diferida), se comprueba al final de cada
sentencia. Si se viola, se hace rollback de la sentencia de forma inmediata. Si una restriccin
provoca una accin (por ejemplo, DELETE CASCADE), esa accin se toma siempre como
parte de la sentencia que la provoc, independientemente de que la restriccin sea diferida o
inmediata. Utilice la restriccin SET CONSTRAINTS para especificar, para una transaccin en
particular, si se comprueban las restricciones diferibles despus de cada sentencia DML o en el
momento de la validacin de la transaccin. Para crear restricciones diferibles, debe crear un
ndice no nico para esa restriccin.
Puede definir restricciones como diferibles o no diferibles y como inicialmente diferidas o
inicialmente inmediatas. Estos atributos pueden ser diferentes para cada restriccin.
Supuesto de uso: La poltica de la compaa dicta que el nmero de departamento 40 se
debera cambiar a 45. El cambio de la columna DEPARTMENT_ID afecta a los empleados
asignados a este departamento. Por tanto, haga que la clave primaria y las claves ajenas sean
diferibles e inicialmente diferidas. Actualice la informacin de departamentos y empleados, y
todas las filas se validarn en el momento de la validacin.
58
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
59
Desactivacin de Restricciones
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
60
Activacin de Restricciones
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
61
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 2-17
62
Restricciones en Cascada
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Restricciones en Cascada
Esta sentencia ilustra el uso de la clusula CASCADE CONSTRAINTS. Suponga que se crea la
tabla TEST1 de este modo:
CREATE TABLE test1 (
pk NUMBER PRIMARY KEY,
fk NUMBER,
col1 NUMBER,
col2 NUMBER,
CONSTRAINT fk_constraint FOREIGN KEY (fk) REFERENCES test1,
CONSTRAINT ck1 CHECK (pk > 0 and col1 > 0),
CONSTRAINT ck2 CHECK (col2 > 0));
63
Restricciones en Cascada
Ejemplo:
ALTER TABLE emp2
DROP COLUMN employee_id CASCADE CONSTRAINTS;
Table altered.
ALTER TABLE test1
DROP (pk, fk, col1) CASCADE CONSTRAINTS;
Table altered.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Si se borran tambin todas las columnas a las que hacen referencia las restricciones definidas en
las columnas borradas, CASCADE CONSTRAINTS no es necesario. Por ejemplo, suponiendo
que ninguna otra restriccin referencial de otras tablas hace referencia a la columna PK, es
vlido ejecutar la siguiente sentencia sin la clusula CASCADE CONSTRAINTS para la tabla
TEST1 creada en la pgina anterior:
ALTER TABLE test1 DROP (pk, fk, col1);
64
Manualmente
Sentencia CREATE INDEX
Sentencia CREATE TABLE
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Nota: Puede crear manualmente un ndice nico, pero se recomienda que cree una restriccin
nica, lo que crea implcitamente un ndice nico.
65
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
66
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
67
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
SELECT *
FROM
dept2
WHERE UPPER(department_name) = 'SALES';
68
Eliminacin de un ndice
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Eliminacin de un ndice
Los ndices no se pueden modificar. Para cambiar un ndice, debe borrarlo y volverlo a crear.
Para eliminar una definicin de ndice del diccionario de datos, emita la sentencia DROP
INDEX. Para borrar un ndice, debe ser el propietario del ndice o tener el privilegio DROP
ANY INDEX.
En la sintaxis:
index
es el nombre del ndice
Nota: Si borra una tabla, los ndices y las restricciones se borran automticamente, pero las
vistas y las secuencias permanecen.
69
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
70
Sintaxis:
FLASHBACK TABLE[schema.]table[,
[ schema.]table ]...
TO { TIMESTAMP | SCN } expr
[ { ENABLE | DISABLE } TRIGGERS ];
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
71
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Al borrar un usuario, los objetos que pertenecen a ese usuario no se colocarn en la papelera
de reciclaje y se purgarn todos los objetos de la papelera de reciclaje.
Puede purgar la papelera de reciclaje con la siguiente sentencia:
PURGE RECYCLEBIN;
72
Tablas Externas
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Tablas Externas
Una tabla externa es una tabla de slo lectura cuyos metadatos se almacenan en la base de
datos pero cuyos datos se almacenan fuera de la base de datos. Esta definicin de tabla
externa se puede considerar una vista que se utiliza para ejecutar cualquier consulta SQL en
datos externos sin necesidad de que se carguen primero los datos externos en la base de datos.
Los datos de tabla externa se pueden consultar y unir directamente y en paralelo sin necesidad
de que se carguen primero los datos externos en la base de datos. Puede utilizar SQL, PL/SQL
y Java para consultar los datos en una tabla externa.
La diferencia principal entre las tablas externas y las normales es que las tablas organizadas
externamente son de slo lectura. No son posibles las operaciones DML y no se pueden crear
ndices en ellas. Sin embargo, se puede crear una tabla externa (y, por tanto, descargar datos)
mediante el comando CREATE TABLE AS SELECT.
73
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 2-29
74
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
75
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
76
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
77
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 2-33
78
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Los registros se delimitan con nuevas lneas y todos los campos llevan una coma ( , ) al final.
El nombre del archivo es: /emp_dir/emp.dat
Para convertir este archivo en el origen de datos para una tabla externa cuyos metadatos
residirn en la base de datos, debe seguir estos pasos:
1. Cree un objeto de directorio emp_dir como se indica a continuacin:
CREATE DIRECTORY emp_dir AS '/emp_dir' ;
79
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 2-35
80
SELECT *
FROM oldemp
OLDEMP
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
emp.dat
81
Resumen
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen
Modifique tablas para agregar o modificar columnas o restricciones. Cree ndices e ndices
basados en funciones mediante la sentencia CREATE INDEX. Borre las columnas que no se
utilizan. Utilice la mecnica FLASHBACK para restaurar tablas. Utilice la clusula
external_table para crear una tabla externa, que es una tabla de slo lectura cuyos
metadatos se almacenan en la base de datos, pero cuyos datos se almacenan fuera de la base
de datos. Utilice tablas externas para consultar datos sin cargarlos primero en la base de datos.
Asigne nombres a los ndices de columna PRIMARY KEY al crear la tabla con la sentencia
CREATE TABLE.
82
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
83
Prctica 2
1. Cree la tabla DEPT2 basada en el siguiente grfico de instancia de tabla. Guarde la
sintaxis en un archivo de comandos denominado lab02_01.sql y, a continuacin,
ejecute la sentencia en el archivo de comandos para crear la tabla. Confirme que la tabla
se ha creado.
ID
NAME
Data type
NUMBER
VARCHAR2
Length
25
Column Name
Key Type
Nulls/Unique
FK Table
FK Column
2. Rellene la tabla DEPT2 con datos de la tabla DEPARTMENTS. Incluya slo las
columnas que necesite.
3. Cree la tabla EMP2 basada en el siguiente grfico de instancia de tabla. Guarde la
sintaxis en un archivo de comandos denominado lab02_03.sql y, a continuacin,
ejecute la sentencia en el archivo de comandos para crear la tabla. Confirme que la tabla
se ha creado.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
ID
LAST_NAME
FIRST_NAME
DEPT_ID
Data type
NUMBER
VARCHAR2
VARCHAR2
NUMBER
Length
25
25
Column Name
Key Type
Nulls/Unique
FK Table
FK Column
84
Prctica 2 (continuacin)
4. Modifique la tabla EMP2 para permitir apellidos de empleado ms largos. Confirme la
modificacin.
5. Confirme que las tablas DEPT2 y EMP2 se han almacenado en el diccionario de datos.
(Indicacin: USER_TABLES)
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
85
Prctica 2 (continuacin)
14. Cree una restriccin PRIMARY KEY a la tabla DEPT2 mediante la columna ID. Se
debe asignar un nombre a la restriccin en el momento de la creacin. Asigne a la
restriccin el nombre my_dept_id_pk.
15. Agregue una referencia de clave ajena en la tabla EMP2 que asegure que el empleado no
est asignado a un departamento inexistente. Asigne a la restriccin el nombre
my_emp_dept_id_fk.
16. Confirme que las restricciones se han agregado consultando la vista
USER_CONSTRAINTS. Tenga en cuenta los tipos y los nombres de las restricciones.
17. Muestre los tipos y los nombres de objeto de la vista del diccionario de datos
USER_OBJECT para las tablas EMP2 y DEPT2. Observe que se han creado tablas
nuevas y un nuevo ndice.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Column Name
Deptno
Dname
Primary Key
Yes
Data Type
Number
VARCHAR2
Length
30
86
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 2-42
87
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
88
Objetivos
Al finalizar esta leccin, debera estar capacitado para:
Manipular datos mediante subconsultas
Describir las funciones de las inserciones de
varias tablas
Utilizar los siguientes tipos de inserciones de
varias tablas
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
INSERT incondicional
INSERT de pivoting
ALL INSERT condicional
FIRST INSERT condicional
Objetivos
En esta leccin aprender a manipular datos en la base de datos Oracle mediante subconsultas.
Tambin recibir informacin sobre sentencias de inserciones de varias tablas, la sentencia
MERGE y el seguimiento de los cambios en la base de datos.
89
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
90
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
En la sintaxis:
table
es el nombre de la tabla
column
es el nombre de la columna de la tabla que se va a rellenar
subquery
es la subconsulta que devuelve filas a la tabla
El nmero de columnas y los tipos de datos de la lista de columnas de la clusula INSERT se
deben corresponder con el nmero de valores y los tipos de datos de la subconsulta. Para crear
una copia de las filas de una tabla, utilice SELECT * en la subconsulta.
INSERT INTO EMPL3
SELECT *
FROM
employees;
91
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM
empl3
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);
1 row created.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
La lista de seleccin de esta subconsulta debe tener el mismo nmero de columnas que la lista
de columnas de la clusula VALUES. Para que la sentencia INSERT funcione correctamente,
se deben seguir las reglas de las columnas de la tabla base. Por ejemplo, no se puede agregar
un identificador de empleado duplicado ni omitir un valor para una columna obligatoria
NOT NULL.
Esta aplicacin de las subconsultas evita tener que crear una vista nicamente para realizar
una insercin (INSERT).
92
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
93
WHERE
AND
a.last_name, a.salary,
a.department_id, b.salavg
employees a, (SELECT
department_id,
AVG(salary) salavg
FROM
employees
GROUP BY department_id) b
a.department_id = b.department_id
a.salary > b.salavg;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
94
empl3
job_id
= (SELECT job_id
FROM
employees
WHERE
employee_id = 205),
salary = (SELECT salary
FROM
employees
WHERE
employee_id = 205)
WHERE
employee_id
= 114;
1 row updated.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
(SELECT
column
FROM table
WHERE condition)
[ ,
column
[WHERE
condition ]
(SELECT
column
FROM table
WHERE condition)]
;
95
empl3
department_id
WHERE
job_id
= (SELECT department_id
FROM employees
WHERE employee_id = 100)
= (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
96
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
97
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
98
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
99
UPDATE deptm3
SET manager_id = DEFAULT
WHERE department_id = 10;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
100
INSERT ALL
INTO table_a VALUES(,,)
INTO table_b VALUES(,,)
INTO table_c VALUES(,,)
SELECT
FROM sourcetab
WHERE ;
Table_a
Table_b
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Table_c
Una vez cargados los datos en la base de datos Oracle, las transformaciones de datos se
pueden ejecutar mediante operaciones SQL. Una sentencia INSERT de varias tablas es una de
las tcnicas para implementar transformaciones de datos SQL.
101
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
102
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
103
Sintaxis
conditional_insert_clause
[ALL] [FIRST]
[WHEN condition THEN] [insert_into_clause values_clause]
[ELSE] [insert_into_clause values_clause]
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
104
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 3-18
105
INSERT ALL
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;
8 rows created.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
106
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
107
INSERT ALL
WHEN SAL > 10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200
THEN
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;
4 rows created.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
108
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
109
INSERT FIRST
WHEN SAL > 25000
THEN
INTO special_sal VALUES(DEPTID, SAL)
WHEN HIREDATE like ('%00%') THEN
INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
WHEN HIREDATE like ('%99%') THEN
INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
ELSE
INTO hiredate_history VALUES(DEPTID, HIREDATE)
SELECT department_id DEPTID, SUM(salary) SAL,
MAX(hire_date) HIREDATE
FROM
employees
GROUP BY department_id;
8 rows created.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
110
INSERT de Pivoting
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
INSERT de Pivoting
El pivoting es una operacin en la que se debe crear una transformacin tal que cada registro
de cualquier flujo de entrada como, por ejemplo, una tabla de base de datos no relacional, se
debe convertir en varios registros para un entorno de tablas de base de datos ms relacional.
Para solucionar el problema que se menciona en la diapositiva, debe crear una transformacin
tal que cada registro de la tabla de base de datos no relacional original, SALES_SOURCE_
DATA, se convierta en cinco registros para la tabla SALES_INFO del almacn de datos. Esta
operacin se suele conocer como pivoting.
En la diapositiva se especifica la sentencia con un problema para una sentencia INSERT de
pivoting. La solucin a este problema se muestra en la pgina siguiente.
111
INSERT de Pivoting
INSERT ALL
INTO sales_info VALUES (employee_id,week_id,sales_MON)
INTO sales_info VALUES (employee_id,week_id,sales_TUE)
INTO sales_info VALUES (employee_id,week_id,sales_WED)
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;
5 rows created.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
112
DESC SALES_INFO
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Observe en el ejemplo anterior que mediante una insercin (INSERT) de pivoting, una fila de
la tabla SALES_SOURCE_DATA se convierte en cinco registros de la tabla relacional,
SALES_INFO.
113
Sentencia MERGE
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Sentencias MERGE
Oracle Server soporta la sentencia MERGE para operaciones INSERT, UPDATE y DELETE.
Mediante esta sentencia, puede actualizar, insertar o suprimir una fila condicionalmente en
una tabla, con lo que se evitan varias sentencias DML. La decisin de actualizar, insertar o
suprimir en la tabla destino se basa en una condicin de la clusula ON.
Hay que tener privilegios de objeto INSERT y UPDATE en la tabla destino y el privilegio de
objeto SELECT en la tabla origen. Para especificar la clusula DELETE de la clusula
merge_update_clause, tambin debe tener el privilegio de objeto DELETE en la tabla
destino.
La sentencia MERGE es determinista. No se puede actualizar varias veces la misma fila de la
tabla destino en la misma sentencia MERGE.
Un enfoque alternativo es utilizar bucles PL/SQL y varias sentencias DML. La sentencia
MERGE, sin embargo, es fcil de utilizar y se expresa de forma ms sencilla como una nica
sentencia SQL.
La sentencia MERGE es adecuada en diferentes aplicaciones de almacn de datos. Por
ejemplo, en una aplicacin de almacn de datos, es posible que necesite trabajar con datos
procedentes de varios orgenes, algunos de los cuales pueden estar duplicados. Con la
sentencia MERGE, puede agregar o modificar filas condicionalmente.
114
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Fusin de Filas
Puede actualizar filas existentes e insertar nuevas filas condicionalmente mediante la
sentencia MERGE.
En la sintaxis:
Clusula INTO
Clusula USING
Clusula ON
WHEN MATCHED |
115
Fusin de Filas
Inserte o actualice las filas de la tabla EMPL3 para que
se corresponda con la tabla EMPLOYEES.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
116
Fusin de Filas
TRUNCATE TABLE empl3;
SELECT *
FROM empl3;
no rows selected
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
20 rows selected.
117
SELECT
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
118
COMMIT;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
119
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 3-33
120
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
121
Resumen
En esta leccin ha aprendido a:
Utilizar sentencias DML y controlar transacciones
Describir las funciones de las inserciones de varias
tablas
Utilizar los siguientes tipos de inserciones de varias
tablas
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
INSERT incondicional
INSERT de pivoting
ALL INSERT condicional
FIRST INSERT condicional
Resumen
En esta leccin ha aprendido a manipular datos en la base de datos Oracle mediante subconsultas.
Tambin ha recibido informacin sobre sentencias INSERT de varias tablas, la sentencia MERGE
y el seguimiento de los cambios en la base de datos.
122
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
123
Prctica 3
1. Ejecute el archivo de comandos lab_03_01.sql en la carpeta de prcticas para
crear la tabla SAL_HISTORY.
2. Muestre la estructura de la tabla SAL_HISTORY.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
124
Prctica 3 (continuacin)
b. Muestre los registros de la tabla SPECIAL_SAL.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 3-38
125
Prctica 3 (continuacin)
d. Muestre los registros de la tabla MGR_HISTORY.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 3-39
126
Prctica 3 (continuacin)
8. a. Ejecute el archivo de comandos lab_03_08a.sql en la carpeta de prcticas
para crear la tabla SALES_SOURCE_DATA.
b. Ejecute el archivo de comandos lab_03_08b.sql en la carpeta de prcticas
para insertar registros en la tabla SALES_SOURCE_DATA.
c. Muestre la estructura de la tabla SALES_SOURCE_DATA.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 3-40
127
Prctica 3 (continuacin)
g. Escriba una consulta para:
Recuperar los detalles de identificador de empleado, identificador de semana, ventas
el lunes, ventas el martes, ventas el mircoles, ventas el jueves y ventas el viernes
de la tabla SALES_SOURCE_DATA.
Crear tal transformacin que cada registro recuperado de la tabla SALES_
SOURCE_DATA se convierta en varios registros para la tabla SALES_INFO.
Indicacin: Utilice una sentencia INSERT de pivoting.
h. Muestre los registros de la tabla SALES_INFO.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 3-41
128
Prctica 3 (continuacin)
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
129
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
130
Objetivos
Al finalizar esta leccin, debera estar capacitado para:
Utilizar la operacin ROLLUP para generar valores
subtotales
Utilizar la operacin CUBE para generar valores desde
varias tablas
Utilizar la funcin GROUPING para identificar los
valores de fila creados por ROLLUP o CUBE
Utilizar GROUPING SETS para generar un juego de
resultados nico
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
En esta leccin, aprender a:
Agrupar datos para obtener:
- Valores subtotales mediante el operador ROLLUP
- Valores desde varias tablas mediante el operador CUBE
Utilice la funcin GROUPING para identificar el nivel de agregacin en el juego de
resultados generado por un operador ROLLUP o CUBE
Utilice GROUPING SETS para generar un nico juego de resultados que sea
equivalente a un enfoque UNION ALL
131
[column,] group_function(column). . .
table
condition]
group_by_expression]
column];
Ejemplo:
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Funciones de Grupo
Puede utilizar la clusula GROUP BY para dividir las filas de una tabla en grupos. Puede
utilizar entonces las funciones de grupo para devolver informacin de resumen para cada
grupo. Las funciones de grupo pueden aparecer en listas de seleccin y en clusulas ORDER
BY y HAVING. Oracle Server aplica las funciones de grupo a cada grupo de filas y devuelve
una sola fila de resultados para cada grupo.
Tipos de funciones de grupo: Cada una de las funciones de grupo AVG, SUM, MAX, MIN,
COUNT, STDDEV y VARIANCE acepta un argumento. Las funciones AVG, SUM, STDDEV y
VARIANCE operan slo en valores numricos. MAX y MIN pueden operar en valores de datos
numricos, de carcter o de fecha. COUNT devuelve el nmero de filas no nulas para la
expresin especfica. El ejemplo de la diapositiva calcula el salario medio, la desviacin
estndar en el salario, el nmero de empleados que ganan una comisin y la fecha de
contratacin mxima para los empleados cuyo JOB_ID empiece por SA.
Instrucciones para Utilizar Funciones de Grupo
Los tipos de datos para los argumentos pueden ser CHAR, VARCHAR2, NUMBER o DATE.
Todas las funciones de grupo, excepto COUNT(*), ignoran los valores nulos. Para
sustituir con un valor los valores nulos, utilice la funcin NVL. COUNT devuelve un
nmero o cero.
Oracle Server clasifica implcitamente el juego de resultados en orden ascendente de las
columnas de agrupamiento especificadas si se utiliza una clusula GROUP BY. Para
sustituir esta clasificacin por defecto, puede utilizar DESC en una clusula ORDER BY.
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-3
132
Sintaxis:
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY
[column,] group_function(column). . .
table
condition]
group_by_expression]
column];
Ejemplo:
SELECT
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
133
[column,] group_function(column)...
table
condition]
group_by_expression]
having_expression]
column];
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Clusula HAVING
Se forman los grupos y se calculan las funciones de grupo antes de que se aplique la clusula
HAVING a los grupos. La clusula HAVING puede ir delante de la clusula GROUP BY, pero
se recomienda colocar primero la clusula GROUP BY, porque resulta ms lgico.
Oracle Server sigue estos pasos si se utiliza la clusula HAVING:
1. Agrupa las filas
2. Aplica las funciones de grupo a los grupos y muestra los grupos que cumplen los
criterios de la clusula HAVING
134
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
135
Operador ROLLUP
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
[column,] group_function(column). . .
table
condition]
[ROLLUP] group_by_expression]
having_expression];
column];
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Operador ROLLUP
El operador ROLLUP proporciona agregados y superagregados para expresiones dentro de una
sentencia GROUP BY. Los escritores de informes pueden utilizar el operador ROLLUP para
extraer estadsticas e informacin de resumen de los juegos de resultados. Los agregados
acumulativos se pueden utilizar en informes, diagramas y grficos.
El operador ROLLUP crea agrupamientos movindose en una direccin, de derecha a
izquierda, a lo largo de la lista de columnas especificada en la clusula GROUP BY. A
continuacin, aplica la funcin agregada a estos agrupamientos.
Nota
Para generar subtotales en n dimensiones (es decir, n columnas de la clusula GROUP
BY) sin un operador ROLLUP, se deben enlazar n+1 sentencias SELECT con UNION
ALL. Esto hace que la ejecucin de la consulta resulte ineficiente, ya que cada sentencia
SELECT provoca acceso a tablas. El operador ROLLUP recopila sus resultados con un
solo acceso a tablas. El operador ROLLUP es til cuando hay muchas columnas
implicadas en la generacin de subtotales.
Los subtotales y los totales se generan con ROLLUP. CUBE genera totales tambin, pero
acumula eficazmente en cada direccin posible, lo que genera datos de valores
derivados de varias tablas.
136
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
137
Operador CUBE
[column,] group_function(column)...
table
condition]
[CUBE] group_by_expression]
having_expression]
column];
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Operador CUBE
El operador CUBE es un conmutador adicional de la clusula GROUP BY de una sentencia
SELECT. El operador CUBE se puede aplicar a todas las funciones agregadas, incluidas AVG,
SUM, MAX, MIN y COUNT. Se utiliza para generar juegos de resultados que se suelen utilizar
para informes de datos derivados de varias tablas. Mientras que ROLLUP genera slo una
fraccin de posibles combinaciones de subtotales, CUBE genera subtotales para todas las
posibles combinaciones de agrupamientos especificados en la clusula GROUP BY y una
suma total.
El operador CUBE se utiliza con una funcin agregada para generar filas adicionales en un
juego de resultados. Las columnas incluidas en la clusula GROUP BY son de referencia
cruzada y se utilizan para generar un superjuego de grupos. La funcin agregada especificada
en la lista de selecciones se aplica a estos grupos para generar valores de resumen para las filas
superagregadas adicionales. El nmero de grupos adicionales del juego de resultados lo
determina el nmero de columnas incluidas en la clusula GROUP BY.
De hecho, todas las posibles combinaciones de las columnas o las expresiones de la clusula
GROUP BY se utilizan para generar superagregados. Si tiene n columnas o expresiones en la
clusula GROUP BY, habr 2n posibles combinaciones superagregadas. Matemticamente,
estas combinaciones forman un cubo de n dimensiones, de ah el nombre del operador.
Mediante la aplicacin o herramientas de programacin, estos valores superagregados se
pueden proporcionar a diagramas y grficos que expresarn los resultados y las relaciones
eficazmente y de forma visual.
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-9
138
1
2
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
4
139
Funcin GROUPING
La funcin GROUPING:
Se utiliza con los operadores CUBE o ROLLUP
Se utiliza para encontrar los grupos que forman el
subtotal en una fila
Se utiliza para diferenciar los valores NULL
almacenados de los valores NULL creados por
ROLLUP o CUBE
Devuelve 0 1
SELECT
[column,] group_function(column) .. ,
GROUPING(expr)
FROM
table
[WHERE
condition]
[GROUP BY [ROLLUP][CUBE] group_by_expression]
[HAVING
having_expression]
[ORDER BY column];
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
Funcin GROUPING
La funcin GROUPING se puede utilizar con los operadores CUBE o ROLLUP para entender
mejor el modo en que se ha obtenido un valor de resumen.
La funcin GROUPING utiliza una sola columna como argumento. El valor de expr en la
funcin GROUPING se debe corresponder con una de las expresiones de la clusula GROUP
BY. La funcin devuelve un valor de 0 1.
Los valores devueltos por la funcin GROUPING son tiles para:
Determinar el nivel de agregacin de un subtotal dado; es decir, el grupo o los grupos en
los que se basa el subtotal
Identificar si un valor NULL en la columna de expresiones de una fila del juego de
resultado indica:
- Un valor NULL de la tabla base (valor NULL almacenado)
- Un valor NULL creado por ROLLUP o CUBE (como resultado de una funcin de
grupo en esa expresin)
Un valor de 0 devuelto por la funcin GROUPING basndose en una expresin indica una de
estas posibilidades:
Se ha utilizado la expresin para calcular el valor agregado.
El valor NULL de la columna de expresiones es un valor NULL almacenado.
Un valor de 1 devuelto por la funcin GROUPING basndose en una expresin indica una de
estas posibilidades:
No se ha utilizado la expresin para calcular el valor agregado.
El valor NULL de la columna de expresiones se crea mediante ROLLUP o CUBE como
resultado del agrupamiento.
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-11
140
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
3
141
GROUPING SETS
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
GROUPING SETS
GROUPING SETS es una extensin adicional de la clusula GROUP BY que se puede
utilizar para especificar varios agrupamientos de datos. Esto facilita una agregacin eficiente
y, por tanto, facilita el anlisis de datos en varias dimensiones.
Ahora se puede escribir una sola sentencia SELECT mediante GROUPING SETS para
especificar varios agrupamientos (que tambin pueden incluir operadores ROLLUP o CUBE),
en lugar de varias sentencias SELECT combinadas mediante los operadores UNION ALL.
Por ejemplo:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY
GROUPING SETS
((department_id, job_id, manager_id),
(department_id, manager_id),(job_id, manager_id));
142
Esta sentencia calcula los 8 (2 *2 *2) agrupamientos, aunque slo son los grupos
(department_id, job_id, manager_id), (department_id,
manager_id) y (job_id, manager_id) los que le interesan.
Otra alternativa es la siguiente sentencia:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY department_id, job_id, manager_id
UNION ALL
SELECT department_id, NULL, manager_id, AVG(salary)
FROM employees
GROUP BY department_id, manager_id
UNION ALL
SELECT NULL, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY job_id, manager_id;
Esta sentencia requiere tres exploraciones de la tabla base, lo que la hace ineficiente.
CUBE y ROLLUP se pueden considerar juegos de agrupamientos con semntica muy
especfica. La siguiente equivalencia lo muestra:
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
CUBE(a, b, c)
es equivalente a
GROUPING SETS
((a, b, c), (a, b), (a, c), (b, c),
(a), (b), (c), ())
ROLLUP(a, b, c)
es equivalente a
143
department_id, job_id,
manager_id,avg(salary)
FROM
employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
2
144
En ausencia de un optimizador que busque en los bloques de consulta para generar el plan de
ejecucin, la consulta anterior necesitara dos exploraciones de la tabla base, EMPLOYEES.
Esto podra resultar muy ineficiente. Por tanto, se recomienda utilizar la sentencia
GROUPING SETS.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-16
145
Columnas Compuestas
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Columnas Compuestas
Una columna compuesta es una recopilacin de columnas que se tratan como una unidad
durante el clculo de agrupamientos. Especifique las columnas entre parntesis como en la
siguiente sentencia:
ROLLUP (a, (b, c), d)
Aqu, (b, c) forma una columna compuesta y se trata como una unidad. Por lo general, las
columnas compuestas son tiles en ROLLUP, CUBE y GROUPING SETS. Por ejemplo, en
CUBE o ROLLUP, las columnas compuestas provocaran el salto de la agregacin en
determinados niveles.
Es decir, GROUP BY ROLLUP(a, (b, c))es equivalente a
GROUP BY a, b, c UNION ALL
GROUP BY a UNION ALL
GROUP BY ()
Aqu, (b, c) se trata como una unidad y ROLLUP no se aplica en (b, c). Es como si se
tiene un alias, por ejemplo, z, para (b, c) y la expresin GROUP BY se reduce a
GROUP BY ROLLUP(a, z).
Nota: GROUP BY( ) normalmente es una sentencia SELECT con valores NULL para las
columnas a y b y slo la funcin agregada. Esto se utiliza generalmente para generar sumas
totales.
SELECT
NULL, NULL, aggregate_col
FROM
<table_name>
GROUP BY ( );
146
que sera
GROUP
GROUP
GROUP
GROUP
BY
BY
BY
BY
a, b, c UNION ALL
a, b UNION ALL
a UNION ALL
()
De forma parecida,
GROUP BY CUBE((a, b), c)
sera equivalente a
GROUP
GROUP
GROUP
GROUP
BY
BY
BY
BY
a, b, c UNION ALL
a, b UNION ALL
c UNION ALL
()
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
GROUP BY a, b, c
147
1
2
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
4
Esta consulta hace que Oracle Server calcule los siguientes agrupamientos:
1. (job_id, manager_id)
2. (department_id, job_id, manager_id)
3. (department_id)
4. Suma total
Si slo le interesan grupos especficos, no puede limitar el clculo a esos agrupamientos sin
utilizar columnas compuestas. Con las columnas compuestas, esto es posible si se trata las
columnas JOB_ID y MANAGER_ID como una unidad durante la acumulacin. Las columnas
entre parntesis se tratan como una unidad durante los clculos ROLLUP y CUBE. Esto se
ilustra en el ejemplo de la diapositiva. Al poner las columnas JOB_ID y MANAGER_ID entre
parntesis, le indica a Oracle Server que trate JOB_ID y MANAGER_ID como una unidad,
que es una columna compuesta.
148
SELECT
department_id, job_id, manager_id, SUM(salary)
FROM
employees
GROUP
BY department_id,job_id, manager_id
UNION
ALL
SELECT department_id, TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM
employees
GROUP BY department_id
UNION ALL
SELECT TO_NUMBER(NULL), TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM
employees
GROUP BY ();
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
En ausencia de un optimizador que busque en los bloques de consulta para generar el plan de
ejecucin, la consulta anterior necesitara tres exploraciones de la tabla base, EMPLOYEES.
Esto podra resultar muy ineficiente. Por tanto, se recomienda utilizar columnas compuestas.
149
Agrupamientos Concatenados
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Columnas Concatenadas
Los agrupamientos concatenados ofrecen una forma concisa de generar combinaciones de
agrupamientos tiles. Para especificar los agrupamientos concatenados, se muestran varios
juegos de agrupamientos, cubos y acumulaciones, y se separan con comas. A continuacin se
ofrece un ejemplo de juegos de agrupamientos concatenados:
GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)
150
1
2
3
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
151
Resumen
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Columnas compuestas
Juegos de agrupamientos concatenados
Resumen
ROLLUP y CUBE son extensiones de la clusula GROUP BY.
ROLLUP se utiliza para mostrar valores subtotales y la suma total.
CUBE se utiliza para mostrar valores desde varias tablas.
La funcin GROUPING le permite determinar si una fila es un agregado generado por un
operador CUBE o ROLLUP.
Con la sintaxis de GROUPING SETS, puede definir varios agrupamientos en la misma
consulta. GROUP BY calcula todos los agrupamientos especificados y los combina con
UNION ALL.
Dentro de la clusula GROUP BY, puede combinar expresiones de varias formas:-{}- Para especificar columnas compuestas, se agrupan las columnas entre parntesis,
de modo que Oracle Server las trate como una unidad al calcular operaciones
ROLLUP o CUBE.
- Para especificar juegos de agrupamientos concatenados, separe varias operaciones
ROLLUP, CUBE y juegos de agrupamientos con comas, de modo que Oracle
Server las combine en una nica clusula GROUP BY. El resultado es un producto
combinado de agrupamientos de cada juego de agrupamientos.
152
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
153
Prctica 4
1. Escriba una consulta para mostrar lo siguiente para los empleados cuyo identificador
de supervisor sea menor que 120:
- Identificador de supervisor
- Identificador de puesto y salario total de todos los identificadores de puesto de
los empleados que estn a las rdenes del mismo supervisor
- Salario total de esos supervisores
- Salario total de esos supervisores, independientemente de los identificadores de
puesto
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
154
Prctica 4 (continuacin)
2. Observe la salida de la pregunta 1. Escriba una consulta mediante la funcin
GROUPING para determinar si los valores NULL de las columnas correspondientes a
las expresiones GROUP BY los genera la operacin ROLLUP.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-26
155
Prctica 4 (continuacin)
3. Escriba una consulta para mostrar lo siguiente para los empleados cuyo identificador
de supervisor sea menor que 120:
- Identificador de supervisor
- Puesto y salarios totales de todos los puestos de empleados que estn a las
rdenes del mismo supervisor
- Salario total de esos supervisores
- Valores desde varias tablas para mostrar el salario total de todos los puestos,
independientemente del supervisor
- Salario total independientemente de todos los cargos
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-27
156
Prctica 4 (continuacin)
4. Observe la salida de la pregunta 3. Escriba una consulta mediante la funcin
GROUPING para determinar si los valores NULL en las columnas correspondientes a
las expresiones GROUP BY los genera la operacin CUBE.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
157
Prctica 4 (continuacin)
5. Mediante GROUPING SETS, escriba una consulta para mostrar los siguientes
agrupamientos:
- department_id, manager_id, job_id
- department_id, job_id
- manager_id, job_id
La consulta debe calcular la suma de los salarios para cada uno de estos grupos.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
158
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 4-30
159
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
160
Objetivos
Al final de esta leccin, debera estar capacitado para
utilizar las siguientes funciones de fecha/hora:
TZ_OFFSET
CURRENT_DATE
FROM_TZ
CURRENT_TIMESTAMP
TO_TIMESTAMP
LOCALTIMESTAMP
TO_TIMESTAMP_TZ
DBTIMEZONE
TO_YMINTERVAL
SESSIONTIMEZONE
EXTRACT
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
Esta leccin trata algunas de las funciones de fecha/hora disponibles en la base de
datos Oracle.
161
Zonas Horarias
+07:00
-08:00
+02:00
+10:00
-05:00
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Zonas Horarias
Las horas del da se miden segn la rotacin de la Tierra. La hora en cualquier momento
concreto depende del lugar en el que se est. Cuando son las doce del medioda en
Greenwich, Inglaterra, es medianoche en toda la lnea de fecha internacional. La Tierra se
divide en 24 zonas horarias, una para cada hora del da. La hora a lo largo del meridiano de
Greenwich, Inglaterra, se conoce como Hora del Meridiano de Greenwich, o GMT. GMT es
el estndar horario que sirve de referencia al resto de zonas horarias del mundo. Es la misma
durante todo el ao y no se ve afectada por el horario de invierno o de verano. El meridiano es
una lnea imaginaria que va del Polo Norte al Polo Sur. Se conoce como longitud cero y es la
lnea a partir de la cual se miden todas las dems lneas de longitud. Todas las horas se miden
en relacin al GMT y todos los lugares tienen una latitud (distancia al norte o al sur del
ecuador) y una longitud (distancia al este o al oeste del meridiano de Greenwich).
162
ALTER
ALTER
ALTER
ALTER
SET
SET
SET
SET
TIME_ZONE
TIME_ZONE
TIME_ZONE
TIME_ZONE
=
=
=
=
'-05:00';
dbtimezone;
local;
'America/New_York';
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
163
CURRENT_DATE, CURRENT_TIMESTAMP
y LOCALTIMESTAMP
CURRENT_DATE
Devuelve la fecha actual del sistema
Tiene un tipo de datos DATE
CURRENT_TIMESTAMP
Devuelve el registro de hora actual del sistema
Tiene un tipo de datos TIMESTAMP WITH TIME ZONE
LOCALTIMESTAMP
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
164
CURRENT_DATE
Muestre la fecha y la hora actuales de la zona horaria
de la sesin.
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
CURRENT_DATE
La funcin CURRENT_DATE devuelve la fecha actual de la zona horaria de la sesin. El valor
de retorno es una fecha del calendario gregoriano.
Los ejemplos de la diapositiva ilustran que CURRENT_DATE es sensible a la zona horaria de
la sesin. En el primer ejemplo, la sesin se modifica para definir el parmetro TIME_ZONE
en 5:0. El parmetro TIME_ZONE especifica el desplazamiento de zona horaria local por
defecto para la sesin SQL actual. TIME_ZONE es slo un parmetro de la sesin, y no un
parmetro de inicializacin. El parmetro TIME_ZONE se define del modo siguiente:
TIME_ZONE = '[+ | -] hh:mm'
La mscara de formato ([+ | -] hh:mm) indica las horas y los minutos antes o despus
de UTC (Hora Universal Coordinada, lo que antes se conoca como Hora del Meridiano
de Greenwich).
Observe en la salida que el valor de CURRENT_DATE cambia cuando el valor del parmetro
TIME_ZONE se cambia a 8:0 en el segundo ejemplo.
Nota: El comando ALTER SESSION define el formato de fecha de la sesin en
'DD-MON-YYYY HH24:MI:SS' que es da del mes (1-31)-nombre abreviado del mesao con 4 dgitos hora del da (0-23):minuto (0-59):segundo (0-59).
165
CURRENT_TIMESTAMP
Muestre la fecha y la hora fraccional actuales de la
zona horaria de la sesin.
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP
FROM DUAL;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
CURRENT_TIMESTAMP
La funcin CURRENT_TIMESTAMP devuelve la fecha y la hora actuales de la zona horaria
de la sesin, como valor del tipo de datos TIMESTAMP WITH TIME ZONE. El
desplazamiento de zona horaria refleja la hora local actual de la sesin SQL. La sintaxis de la
funcin CURRENT_TIMESTAMP es:
CURRENT_TIMESTAMP (precision)
166
LOCALTIMESTAMP
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
LOCALTIMESTAMP
La funcin LOCALTIMESTAMP devuelve la fecha y la hora actuales en la zona horaria de la
sesin. LOCALTIMESTAMP devuelve un valor TIMESTAMP. La sintaxis de la funcin
LOCAL_TIMESTAMP es:
LOCAL_TIMESTAMP (TIMESTAMP_precision)
donde TIMESTAMP precision es un argumento opcional que especifica la precisin en
fracciones de segundo del valor de TIMESTAMP devuelto.
Los ejemplos de la diapositiva ilustran la diferencia entre LOCALTIMESTAMP y
CURRENT_TIMESTAMP. Observe que LOCALTIMESTAMP no muestra el valor de la zona
horaria, mientras que CURRENT_TIMESTAMP s.
167
DBTIMEZONE y SESSIONTIMEZONE
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
DBTIMEZONE y SESSIONTIMEZONE
El DBA define la zona horaria por defecto de la base de datos especificando la clusula SET
TIME_ZONE de la sentencia CREATE DATABASE. Si se omite, la zona horaria por defecto de
la base de datos es la del sistema operativo. La zona horaria de la base de datos no se puede
cambiar para una sesin con una sentencia ALTER SESSION.
La funcin DBTIMEZONE devuelve el valor de la zona horaria de la base de datos. El tipo de
retorno es un offset de zona horaria (un tipo de carcter del formato '[+|-]TZH:TZM') o un
nombre de regin de zona horaria, dependiendo de cmo haya especificado el usuario el valor de
zona horaria de la base de datos en las sentencias CREATE DATABASE o ALTER DATABASE
ms recientes. El ejemplo de la diapositiva muestra que la zona horaria de la base de datos se
define en "05:00", ya que el parmetro TIME_ZONE est en el formato:
TIME_ZONE =
'[+ | -] hh:mm'
La funcin SESSIONTIMEZONE devuelve el valor de la zona horaria de la sesin actual. El tipo
de retorno es un offset de zona horaria (un tipo de carcter del formato '[+|-]TZH:TZM') o un
nombre de regin de zona horaria, dependiendo de cmo haya especificado el usuario el valor de
zona horaria de la sesin en la sentencia ALTER SESSION ms reciente. El ejemplo de la
diapositiva muestra que la zona horaria de la sesin tiene un offset con respecto a UTC de 8
horas Observe que la zona horaria de la base de datos es diferente a la de la sesin actual.
168
[(fractional_seconds_precision)]_
TIMESTAMP
[(fractional_seconds_precision)]_
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
[(fractional_seconds_precision)]_
WITH LOCAL TIME ZONE
169
Tipo de Datos
TIMESTAMP
Campos
YEAR, MONTH, DAY, HOUR, MINUTE,
SECOND con fracciones de segundo
YEAR, MONTH, DAY, HOUR, MINUTE,
SECOND con fracciones de segundo,
TIMEZONE_HOUR y TIMEZONE_
MINUTE o TIMEZONE_REGION
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Este tipo de datos contiene los valores de fecha de ao, mes y da, adems de los valores
de hora, minuto y segundo, donde la precisin de fracciones de segundo es el nmero de
dgitos de la parte fraccional del campo de fecha/hora SECOND. Los valores aceptados de
fractional_seconds_precision significativos son de 0 a 9. El valor por
defecto es 6.
TIMESTAMP (fractional_seconds_precision) WITH TIME ZONE
Este tipo de datos contiene todos los valores de TIMESTAMP adems del valor de
desplazamiento de zona horaria.
TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE
Este tipo de datos contiene todos los valores de TIMESTAMP, con las siguientes excepciones:
Los datos se normalizan en la zona horaria de la base de datos cuando se almacena en la
base de datos.
Cuando se recuperan los datos, los usuarios los ven en la zona horaria de la sesin.
170
Campos TIMESTAMP
Valores Vlidos
YEAR
MONTH
De 01 a 12
DAY
De 01 a 31
HOUR
De 00 a 23
MINUTE
De 00 a 59
SECOND
TIMEZONE_HOUR
De 12 a 14
TIMEZONE_MINUTE
De 00 a 59
Campo de Fecha/Hora
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Campos TIMESTAMP
Cada tipo de datos de fecha/hora est compuesto por varios de estos campos. Las fechas/horas
son asignables y comparables mutuamente slo si tienen los mismos campos de fecha/hora.
171
-- when hire_date is
of type DATE
SELECT hire_date
FROM emp5;
SELECT hire_date
FROM emp5;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Nota: El tipo de datos de fecha de Oracle por defecto aparece como se muestra en el ejemplo.
Sin embargo, el tipo de datos de fecha tambin contiene informacin adicional como horas,
minutos, segundos, a.m. y p.m. Para obtener la fecha en este formato, puede aplicar una
mscara de formato o una funcin al valor de fecha.
172
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
UTC son las siglas en ingls de Hora Universal Coordinada (lo que antes se conoca como
Hora del Meridiano de Greenwich). Dos valores TIMESTAMP WITH TIME ZONE se
consideran idnticos si representan el mismo instante en UTC, independientemente de los
offsets TIME ZONE almacenados en los datos. Por ejemplo:
TIMESTAMP '1999-04-15 8:00:00 -8:00'
es lo mismo que
TIMESTAMP '1999-04-15 11:00:00 -5:00'.
Es decir, 8:00 a.m. Hora Oficial del Pacfico es lo mismo que 11:00 a.m. Hora Oficial
Oriental.
Tambin se puede especificar como:
TIMESTAMP '1999-04-15 8:00:00 US/Pacific'
173
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
En el ejemplo de la diapositiva, se crea una nueva tabla, web_orders, con una columna del
tipo de datos TIMESTAMP WITH TIME ZONE. Esta tabla se rellena siempre que se realice
un pedido por Web (web_order). El registro de hora y la zona horaria del usuario que
realiza el pedido se inserta basndose en el valor de CURRENT_DATE. De este modo, una
compaa basada en Web garantiza el envo y puede estimar su tiempo de entrega basndose
en la zona horaria de la persona que realiza el pedido.
174
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
TIMESTAMP[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE
A diferencia de TIMESTAMP WITH TIME ZONE, puede especificar columnas del tipo
TIMESTAMP WITH LOCAL TIME ZONE como parte de una clave primaria o nica. El
desplazamiento de zona horaria es la diferencia (en horas y minutos) entre la hora local y
UTC. No hay ningn literal para TIMESTAMP WITH LOCAL TIME ZONE.
175
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
176
YEAR, MONTH
Tipo de Datos
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
177
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 5-19
178
Campos INTERVAL
MONTH
De 00 a 11
DAY
HOUR
De 00 a 23
MINUTE
De 00 a 59
SECOND
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Campos INTERVAL
INTERVAL YEAR TO MONTH puede tener campos YEAR y MONTH.
INTERVAL DAY TO SECOND puede tener campos DAY, HOUR, MINUTE y SECOND.
El subjuego real de campos que componen un elemento de cualquiera de los dos tipos de
intervalo se define mediante un cualificador de intervalo y este subjuego se conoce como
precisin del elemento.
Los intervalos ao-mes son asignables y comparables mutuamente slo con otros intervalos
ao-mes y los intervalos da-hora son asignables y comparables mutuamente slo con otros
intervalos da-hora.
179
Por ejemplo:
'312-2' assigned to INTERVAL YEAR(3) TO MONTH
Indicates an interval of 312 years and 2 months
'312-0' assigned to INTERVAL YEAR(3) TO MONTH
Indicates 312 years and 0 months
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
180
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Restriccin: El campo inicial debe ser ms significativo que el campo final. Por ejemplo,
INTERVAL '0-1' MONTH TO YEAR no es vlido.
La base de datos Oracle soporta dos tipos de datos de intervalo: INTERVAL YEAR TO
MONTH e INTERVAL DAY TO SECOND; el tipo de columna, el argumento PL/SQL, la
variable y el tipo de retorno deben ser de uno de los dos. Sin embargo, para literales de
intervalo el sistema reconoce otros tipos de intervalo ANSI como, por ejemplo, INTERVAL
'2' YEAR o INTERVAL '10' HOUR. En estos casos, cada intervalo se convierte a uno de
los dos tipos soportados.
En el ejemplo anterior, se crea la tabla WARRANTY, que contiene una columna
warranty_time que toma el tipo de datos INTERVAL YEAR(3) TO MONTH. Se
insertan en ella valores diferentes para indicar aos y meses para diversos productos. Cuando
se recuperan estas filas de la tabla, se ve que un valor de mes ha desplazado el valor de ao
mediante un (-)
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 5-22
181
Por ejemplo:
INTERVAL '6 03:30:16' DAY TO SECOND
Indicates an interval of 6 days 3 hours 30 minutes
and 16 seconds
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
182
Tipo de Datos
INTERVAL DAY TO SECOND: Ejemplo
CREATE TABLE lab
( exp_id number, test_time INTERVAL DAY(2) TO
SECOND);
INSERT INTO lab VALUES (100012, '90 00:00:00');
INSERT INTO lab VALUES (56098,
INTERVAL '6 03:30:16' DAY
TO SECOND);
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
183
EXTRACT
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
EXTRACT
La expresin EXTRACT extrae y devuelve el valor de un campo de fecha/hora especificado de
una expresin de valor de fecha/hora o intervalo. Puede extraer cualquiera de los
componentes mencionados en la siguiente sintaxis mediante la funcin EXTRACT. La sintaxis
de la funcin EXTRACT es:
SELECT
184
TZ_OFFSET
'Europe/London'.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
TZ_OFFSET
La funcin TZ_OFFSET devuelve el offset de zona horaria correspondiente al valor
introducido. El valor de retorno es dependiente de la fecha en la que se ejecut la sentencia.
Por ejemplo, si la funcin TZ_OFFSET devuelve el valor 08:00, indica que en la zona
horaria en la que se ejecut el comando son ocho horas menos que en UTC. Puede introducir
un nombre vlido de zona horaria, un offset de zona horaria desde UTC (que simplemente se
devuelve a s mismo) o las palabras clave SESSIONTIMEZONE o DBTIMEZONE. La sintaxis
de la funcin TZ_OFFSET es:
TZ_OFFSET ( ['time_zone_name'] '[+ | -] hh:mm' ]
[ SESSIONTIMEZONE] [DBTIMEZONE]
Fold Motor Company tiene las oficinas centrales en Michigan, EE.UU., que est en la zona
horaria US/Eastern. El presidente de la compaa, Mr. Fold, desea realizar una conferencia
telefnica con el vicepresidente de operaciones canadienses y el vicepresidente de
operaciones europeas, que estn en las zonas horarias Canada/Yukon y Europe/London,
respectivamente. Mr. Fold quiere conocer la hora en cada uno de estos lugares para asegurarse
de que los supervisores senior podrn asistir a la reunin. Para ayudarle, su secretario, Mr.
Scott, emite las consultas que se muestran en el ejemplo y obtiene los siguientes resultados:
En la zona horaria 'US/Eastern' son cuatro horas menos que en UTC.
En la zona horaria 'Canada/Yukon' son siete horas menos que en UTC.
En la zona horaria 'Europe/London' es una hora ms que en UTC.
185
TZ_OFFSET (continuacin)
Para obtener un listado de valores de nombres de zona horaria vlidos, puede consultar la
vista de rendimiento dinmica V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
186
SELECT FROM_TZ(TIMESTAMP
'2000-03-28 08:00:00', 'Australia/North')
FROM DUAL;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
187
Muestre la cadena de caracteres '1999-12-01 11:00:00 8:00' como un valor TIMESTAMP WITH TIME ZONE.
SELECT
TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00',
'YYYY-MM-DD HH:MI:SS TZH:TZM')
FROM DUAL;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
188
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
189
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
TO_DSINTERVAL
TO_DSINTERVAL convierte una cadena de caracteres de tipo de datos CHAR, VARCHAR2,
NCHAR o NVARCHAR2 a un tipo INTERVAL DAY TO SECOND.
En el ejemplo anterior, se obtiene una fecha posterior en 100 das y 10 horas a la fecha
de contratacin.
TO_YMINTERVAL
La funcin TO_YMINTERVAL convierte una cadena de caracteres de tipo de datos CHAR,
VARCHAR2, NCHAR o NVARCHAR2 a un tipo INTERVAL YEAR TO MONTH.
En el siguiente ejemplo, se obtiene una fecha posterior en un ao y dos meses a la fecha
de contratacin.
SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') ytm
FROM employees;
HIRE_DATE
--------17-JUN-87
21-SEP-89
13-JAN-93
03-JAN-90
21-MAY-91
YTM
--------17-AUG-88
21-NOV-90
13-MAR-94
03-MAR-91
21-JUL-92
190
Horario de Verano
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
191
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 5-33
192
Resumen
En esta leccin, ha aprendido a utilizar estas
funciones:
CURRENT_DATE
TZ_OFFSET
CURRENT_TIMESTAMP
FROM_TZ
LOCALTIMESTAMP
TO_TIMESTAMP
TO_TIMESTAMP_TZ DBTIMEZONE
SESSIONTIMEZONE
TO_YMINTERVAL
EXTRACT
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen
Esta leccin ha tratado algunas de las funciones de fecha/hora disponibles en la base de
datos Oracle.
193
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
194
Prctica 5
1. Modifique la sesin para definir NLS_DATE_FORMAT en DD-MON-YYYY
HH24:MI:SS.
2. a. Escriba consultas para mostrar los offsets de zona horaria (TZ_OFFSET) para las
siguientes zonas horarias.
- US/Pacific-New
Singapore
Egypt
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
d. Modifique la sesin para definir el valor del parmetro TIME_ZONE en el offset
de zona horaria Singapore.
e. Muestre los valores de CURRENT_DATE, CURRENT_TIMESTAMP y
LOCALTIMESTAMP para esta sesin.
Nota: La salida podra ser diferente, segn la fecha en que se ejecute
el comando.
195
Prctica 5 (continuacin)
4. Escriba una consulta para extraer el valor de YEAR de la columna HIRE_DATE de la
tabla EMPLOYEES para los empleados que trabajan en el departamento 80.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
196
Prctica 5 (continuacin)
6. Examine y ejecute el archivo de comandos lab05_06.sql para crear la tabla
SAMPLE_DATES y rellenarla.
a. Seleccione en la tabla y vea los datos.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
197
Prctica 5 (continuacin)
8. Cree una consulta para imprimir los apellidos y el nmero de aos de servicio para
cada empleado. Si el empleado lleva contratado cinco aos o ms, imprima 5 years
of service. Si el empleado lleva contratado 10 aos o ms, imprima 10 years
of service. Si el empleado lleva contratado 15 aos o ms, imprima 15 years
of service. Si no se cumple ninguna de estas condiciones, imprima maybe
next year!. Ordene los resultados por la columna HIRE_DATE. Utilice la
tabla EMPLOYEES.
Indicacin: Utilice TO_YMINTERVAL y expresiones CASE.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 5-39
198
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 5-40
199
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
200
Objetivos
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
En esta leccin, aprender a escribir subconsultas de varias columnas, as como subconsultas
en la clusula FROM de una sentencia SELECT. Tambin aprender a solucionar problemas
mediante subconsultas escalares correlacionadas y la clusula WITH.
201
Consulta principal
WHERE (MANAGER_ID, DEPARTMENT_ID) IN
Subconsulta
100
102
124
90
60
50
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
202
Comparaciones de Columnas
Las comparaciones de columnas en una subconsulta
de varias columnas pueden ser:
Comparaciones entre pares
Comparaciones entre no pares
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
203
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
204
AND
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
AND
205
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
206
SELECT
employee_id, last_name
FROM
employees e
ORDER BY (SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
207
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
208
Subconsultas Correlacionadas
Las subconsultas correlacionadas se utilizan para el
procesamiento fila a fila. Cada consulta se ejecuta una
vez para cada fila de la consulta externa.
OBTENGA
fila candidata de consulta externa
EJECUTE
consulta interna mediante valor de fila candidata
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
UTILICE
valores de la consulta interna para calificar o
descalificar la fila candidata
Subconsultas Correlacionadas
Oracle Server realiza una consulta correlacionada cuando la subconsulta hace referencia a una
columna desde una tabla a la que se hace referencia en la sentencia principal. Una subconsulta
correlacionada se evala una vez para cada fila procesada por la sentencia principal. La
sentencia principal puede ser una sentencia SELECT, UPDATE o DELETE.
Subconsultas Anidadas frente a Subconsultas Correlacionadas
Con una subconsulta anidada normal, la consulta SELECT interna se ejecuta primero y una
vez, y devuelve valores que sern utilizados por la consulta principal. Sin embargo, una
subconsulta correlacionada se ejecuta una vez para cada fila candidata considerada por la
consulta externa. Dicho de otro modo, la consulta interna est controlada por la consulta
externa.
Ejecucin de Subconsultas Anidadas
La consulta interna se ejecuta primero y encuentra un valor.
La consulta externa se ejecuta una vez y utiliza el valor de la consulta interna.
Ejecucin de Subconsultas Correlacionadas
Obtenga una fila candidata (recuperada por la consulta externa).
Ejecute la consulta interna mediante el valor de la fila candidata.
Utilice los valores resultantes de la consulta interna para calificar o descalificar la fila
candidata.
Repita el proceso hasta que no queden filas candidatas.
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 6-10
209
Subconsultas Correlacionadas
La subconsulta hace referencia a una columna de una
tabla en la consulta principal.
SELECT column1, column2, ...
outer
FROM
table1
WHERE column1 operator
(SELECT
FROM
WHERE
column1, column2
table2
expr1 =
outer.expr2);
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
210
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
211
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
212
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Operador EXISTS
Con las sentencias SELECT anidadas, son vlidos todos los operadores lgicos. Adems,
puede utilizar el operador EXISTS. Este operador se utiliza frecuentemente con subconsultas
correlacionadas para probar si existe un valor recuperado por la consulta externa en el juego
de resultados de los valores recuperados por la consulta interna. Si la subconsulta devuelve al
menos una fila, el operador devuelve TRUE. Si el valor no existe, devuelve FALSE. De forma
anloga, NOT EXISTS prueba si un valor recuperado por la consulta externa no forma parte
del juego de resultados de los valores recuperados por la consulta interna.
213
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Observe que la consulta SELECT interna no necesita devolver un valor especfico, por lo que
se puede seleccionar una constante.
214
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Solucin Alternativa
Se puede utilizar una construccin NOT IN como alternativa para un operador NOT
EXISTS, como se muestra en el siguiente ejemplo:
SELECT department_id, department_name
FROM
departments
WHERE department_id NOT IN(SELECT department_id
FROM
employees);
Sin embargo, NOT IN se evala como FALSE si cualquier miembro del juego es un valor
NULL. Por tanto, la consulta no devolver ninguna fila incluso aunque haya filas en la tabla
DEPARTMENTS que satisfagan la condicin WHERE.
215
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
216
UPDATE empl6 e
SET
department_name =
(SELECT department_name
FROM
departments d
WHERE e.department_id = d.department_id);
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
217
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 6-19
218
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
219
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Ejemplo
En este ejemplo se utilizan dos tablas. Estas tablas son:
La tabla EMPL6, que proporciona detalles de todos los empleados actuales
La tabla EMP_HISTORY, que proporciona detalles de empleados anteriores
EMP_HISTORY contiene datos relacionados con empleados anteriores, por lo que sera
errneo que el registro del mismo empleado existiera en las tablas EMPL6 y EMP_HISTORY.
Puede suprimir dichos registros errneos mediante la subconsulta correlacionada que se
muestra en la diapositiva.
220
Clusula WITH
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Clusula WITH
Mediante la clusula WITH, puede definir un bloque de consulta antes de utilizarlo en una
consulta. La clusula WITH (conocida formalmente como subquery_factoring_clause)
le permite reutilizar el mismo bloque de consulta en una sentencia SELECT cuando se produce
ms de una vez dentro de una consulta compleja. Esto resulta particularmente til cuando una
consulta tiene muchas referencias al mismo bloque de consulta y hay presentes uniones y
agregaciones.
Mediante la clusula WITH, puede reutilizar la misma consulta cuando resulta caro evaluar el
bloque de consulta y se produce ms de una vez dentro de una consulta compleja. Mediante la
clusula WITH, Oracle Server recupera los resultados de un bloque de consulta y los almacena en
el tablespace temporal del usuario. Esto puede mejorar el rendimiento.
Ventajas de la Clusula WITH
Hace que la consulta resulte fcil de leer
Evala una clusula slo una vez, incluso aunque aparezca varias veces en la consulta
En la mayora de los casos puede mejorar el rendimiento para las consultas grandes
221
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
222
WITH
dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM
employees e, departments d
WHERE
e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost
AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM
dept_costs)
SELECT *
FROM
dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
223
Resumen
En esta leccin, ha aprendido lo siguiente:
Una subconsulta de varias columnas devuelve ms
de una columna.
Las comparaciones de varias columnas pueden ser
entre pares y entre no pares.
Una subconsulta de varias columnas tambin se
puede utilizar en la clusula FROM de una sentencia
SELECT.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen
Puede utilizar subconsultas de varias columnas para combinar varias condiciones WHERE en
una sola clusula WHERE. Las comparaciones de columnas en una subconsulta de varias
columnas pueden ser entre pares y entre no pares.
Puede utilizar una subconsulta para definir una tabla en la que pueda operar una consulta que
la contenga.
Las subconsultas escalares se pueden utilizar en:
Parte de expresin y condicin de DECODE y CASE
Todas las clusulas de SELECT excepto GROUP BY
Una clusula SET y clusula WHERE de una sentencia UPDATE
224
Resumen
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen (continuacin)
Oracle Server realiza una consulta correlacionada cuando la subconsulta hace referencia a una
columna desde una tabla a la que se hace referencia en la sentencia principal. Una subconsulta
correlacionada se evala una vez para cada fila procesada por la sentencia principal. La
sentencia principal puede ser una sentencia SELECT, UPDATE o DELETE. Mediante la
clusula WITH, puede reutilizar la misma consulta cuando resulta caro volver a evaluar el
bloque de consulta y se produce ms de una vez dentro de una consulta compleja.
225
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
226
Prctica 6
1. Escriba una consulta para mostrar el apellido, el nmero de departamento y el salario de
cualquier empleado cuyo nmero de departamento y salario se correspondan con el
nmero de departamento y el salario de cualquier empleado que gane una comisin.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
3. Cree una consulta para mostrar el apellido, la fecha de contratacin y el salario de todos
los empleados que tengan el mismo salario y la misma comisin que Kochhar.
Nota: No muestre a Kochhar en el juego de resultados.
4. Cree una consulta para mostrar los empleados que ganen un salario que sea ms alto que
el salario de todos los supervisores de ventas (JOB_ID = 'SA_MAN'). Ordene los
resultados por salario en orden descendente.
227
Prctica 6 (continuacin)
5. Muestre los detalles del identificador de empleado, el apellido y el identificador de
departamento de los empleados que vivan en ciudades cuyo nombre empiece por T.
6. Escriba una consulta para buscar todos los empleados que ganen ms que el salario
medio de su departamento.
Muestre el apellido, el salario, el identificador de departamento y el salario medio del
departamento. Ordene por salario medio. Utilice alias para las columnas recuperadas por
la consulta como se muestra en el ejemplo de salida.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
228
Prctica 6 (continuacin)
7. Busque todos los empleados que no sean supervisores.
a. Hgalo primero mediante el operador NOT EXISTS.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
b. Esto se puede conseguir mediante el operador NOT IN? Cmo o por qu no?
8. Escriba una consulta para mostrar los apellidos de los empleados que ganen menos que
el salario medio en sus departamentos.
229
Prctica 6 (continuacin)
9. Escriba una consulta para mostrar los apellidos de los empleados que tienen uno o ms
colegas en su departamento con fechas de contratacin posteriores pero salarios
ms altos.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
10. Escriba una consulta para mostrar los identificadores de empleado, los apellidos, y los
nombres de departamento de todos los empleados.
Nota: Utilice una subconsulta escalar para recuperar el nombre de departamento en la
sentencia SELECT.
230
Prctica 6 (continuacin)
11. Escriba una consulta para mostrar los nombres de departamento de los departamentos
cuyo costo de salario total supere un octavo (1/8) del costo de salario total de toda la
compaa. Utilice la clusula WITH para escribir esta consulta. Asigne a la consulta el
nombre SUMMARY.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 6-32
231
Recuperacin Jerrquica
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
232
Objetivos
Al finalizar esta leccin, debera estar capacitado para:
Interpretar el concepto de consulta jerrquica
Crear un informe en estructura de rbol
Formatear datos jerrquicos
Excluir ramas de la estructura de rbol
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
En esta leccin, aprender a utilizar consultas jerrquicas para crear informes en estructura
de rbol.
233
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Mediante consultas jerrquicas, puede recuperar datos basndose en una relacin jerrquica
natural entre filas de una tabla. Una base de datos relacional no almacena registros de forma
jerrquica. Sin embargo, si existe una relacin jerrquica entre las filas de una sola tabla, un
proceso denominado desplazamiento por el rbol permite que se construya la jerarqua. Una
consulta jerrquica es un mtodo de informar de las ramas de un rbol en un orden especfico.
Imagine un rbol genealgico con los miembros mayores de la familia situados cerca de la
base o del tronco del rbol y los ms jvenes representados como ramas del rbol. Las ramas
pueden tener ms ramas, y as sucesivamente.
Una consulta jerrquica es posible cuando existe una relacin entre filas en una tabla. Por
ejemplo, en la diapositiva, se ve que los empleados con el identificador de puesto AD_VP,
ST_MAN, SA_MAN y MK_MAN estn bajo las rdenes directas del presidente de la compaa.
Lo sabemos porque la columna MANAGER_ID de estos registros contiene el identificador de
empleado 100, que pertenece al presidente (AD_PRES).
Nota: Los rboles jerrquicos se utilizan en diversos campos como, por ejemplo, la
genealoga humana (rboles genealgicos), la cra de ganado (reproduccin), la gerencia
empresarial (jerarquas de los supervisores), la manufactura (ensamblaje de productos), la
investigacin evolutiva (desarrollo de especies) y la investigacin cientfica.
234
Whalen
Higgins
De Haan
Mourgos
Matos
Hartstein
Vargas
Fay
Lorentz
Abel
Taylor
Grant
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Gietz Ernst
Zlotkey
235
Consultas Jerrquicas
Condicin WHERE:
expr comparison_operator expr
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
236
Punto de Partida
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Mediante la tabla EMPLOYEES, parta del empleado Kochhar. Una condicin START WITH
puede contener una subconsulta.
... START WITH employee_id = (SELECT employee_id
FROM
employees
237
Direccin
De arriba abajo
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
De abajo arriba
238
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Para calificarse como fila secundaria, una fila debe tener un valor de MANAGER_ID igual
al valor EMPLOYEE_ID de la fila principal y debe tener un valor SALARY superior a
15.000 dlares.
239
SELECT
PRIOR
FROM
START
CONNECT
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
240
Kochhar
De Haan
Mourgos
Zlotkey
Matos
Vargas
Hartstein
Nivel 3
principal/secundario/hoja
Fay
Lorentz
Abel
Taylor
Grant
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Gietz Ernst
Nivel 4
hoja
Nivel
Nodo raz
Secundario de un nodo raz
Secundario de un secundario y as sucesivamente.
241
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
242
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 7-12
243
Eliminacin de Ramas
CONNECT BY PRIOR
employee_id = manager_id
AND last_name != 'Higgins'
Kochhar
Kochhar
Whalen
Higgins
Whalen
Higgins
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Gietz
Gietz
Eliminacin de Ramas
Puede utilizar las clusulas WHERE y CONNECT BY para eliminar el rbol; es decir, para
controlar qu nodos o qu filas se muestran. El predicado que utilice funciona como
condicin booleana.
Ejemplos
Partiendo de la raz, desplcese de arriba abajo y elimine el empleado Higgins del resultado,
pero procese las filas secundarias.
SELECT
FROM
WHERE
START
CONNECT
Partiendo de la raz, desplcese de arriba abajo y elimine el empleado Higgins del resultado y
todas las filas secundarias.
SELECT
FROM
START
CONNECT
AND
244
Resumen
En esta leccin, ha aprendido lo siguiente:
Puede utilizar consultas jerrquicas para ver una
relacin jerrquica entre filas de una tabla.
Puede especificar la direccin y el punto de
partida de la consulta.
Puede eliminar nodos o ramas mediante la
eliminacin.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen
Puede utilizar consultas jerrquicas para recuperar datos basndose en una relacin jerrquica
natural entre filas de una tabla. La pseudocolumna LEVEL cuenta lo lejos que se ha
desplazado hacia abajo en un rbol jerrquico. Puede especificar la direccin de la consulta
mediante la clusula CONNECT BY PRIOR. Puede especificar el punto de partida mediante
la clusula START WITH. Puede utilizar las clusulas WHERE y CONNECT BY para eliminar
las ramas del rbol.
245
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
246
Prctica 7
1. Observe los siguientes ejemplos de salida. Son resultado de una consulta jerrquica?
Explique por qu o por qu no.
Imagen 1:
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Imagen 2:
247
Prctica 7 (continuacin)
Imagen 3:
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
3. Cree un informe que muestre la jerarqua de los supervisores del empleado Lorentz.
Muestre primero el supervisor inmediato.
248
Prctica 7 (continuacin)
4. Cree un informe con sangrado que muestre la jerarqua de supervisores partiendo del
empleado cuyo LAST_NAME es Kochhar. Imprima el apellido del empleado, el
identificador de supervisor y el identificador de departamento. Asigne nombres de alias
a las columnas como se muestra en la salida de ejemplo.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
249
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
250
Objetivos
Al final de esta leccin, debera estar capacitado para
utilizar el soporte de expresiones normales en SQL
para buscar, hacer corresponder y sustituir cadenas
siempre en trminos de expresiones normales.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Copyright 2004, Oracle. Todos
.
los derechos reservados.
Objetivos
En esta leccin, aprender a utilizar la funcin de soporte de expresiones normales que se ha
introducido en la base de datos Oracle 10g.
251
ABC
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Varias funciones
nuevas para soportar
expresiones
normales
252
Metacaracteres
Smbolo
Descripcin
^/$
{m}
{m,n}
[: :]
()
[==]
[..]
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
\n
[]
Metacaracteres
Los metacaracteres son caracteres especiales que tienen un significado especial como, por
ejemplo, un comodn, un carcter de repeticin, un carcter de no correspondencia o un rango
de caracteres. Puede utilizar varios smbolos de metacaracteres predefinidos en la
correspondencia de patrones.
253
Uso de Metacaracteres
Problem: Find 'abc' within a string:
Solution:
'abc'
Matches:
abc
Does not match:
'def'
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Copyright 2004, Oracle. Todos
.
los derechos reservados.
Uso de Metacaracteres
1. En el primer ejemplo, se realiza una correspondencia sencilla.
2. En el segundo ejemplo, el carcter any se define como un '.'. En este ejemplo se busca
el carcter a seguido de cualquier carcter, seguido del carcter c.
3. El tercer ejemplo busca una o ms incidencias de la letra a. El carcter + se utiliza
aqu para indicar una correspondencia de uno o ms de los caracteres anteriores.
Puede buscar tambin listas de caracteres sin correspondencia. Una lista de caracteres sin
correspondencia le permite definir un juego de caracteres para los que una correspondencia no
es vlida. Por ejemplo, para buscar cualquier cosa menos los caracteres a, b o c, puede
definir ^ para indicar una no correspondencia.
Expression:
[^abc]
Matches:
abcdef
Matches:
ghi
Does not match: abc
Para hacer corresponder cualquier letra que no est entre a e i, puede utilizar:
Expression:
[^a-i]
Matches:
hijk
Matches:
lmn
Does not match: abcdefghi
254
Descripcin
Una o ms Cuantificador
de signo ms
Cero o ms Cuantificador
de asterisco
{m}
{m,}
{m,n}
Se corresponde con
m incidencias exactamente
al menos m incidencias
al menos m, pero no ms de n
incidencias de la subexpresin
anterior
Lista de caracteres de
correspondencia
[^]
Subexpresin o
agrupamiento
Referencia a expresin
anterior
Carcter de escape
Sintaxis de
Metacarcter
\n
\
^
$
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
()
[]
[:class:]
255
REGEXP_INSTR
REGEXP_SUBSTR
REGEXP_REPLACE
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Copyright 2004, Oracle. Todos
.
los derechos reservados.
256
REGEXP_LIKE
REGEXP_INSTR
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
Valor de bsqueda
pattern
Expresin normal
occurrence
position
return_option
replacestr
match_option
257
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Ejemplo de REGEXP_LIKE
En esta consulta, en la tabla EMPLOYEES, se muestran todos los empleados cuyos nombres
contienen Steven o Stephen. En la expresin utilizada,
'^Ste(v|ph)en$' :
^ indica el inicio de la sentencia
$ indica el fin de la sentencia
| indica o bien/o
258
SELECT street_address,
REGEXP_INSTR(street_address,'[^[:alpha:]]')
FROM
locations
WHERE
REGEXP_INSTR(street_address,'[^[:alpha:]]')> 1;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
259
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
indica espacio
] finaliza la expresin
+ indica 1 o ms
indica espacio
260
Sustitucin de Patrones
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Sustitucin de Patrones
En este ejemplo se examina COUNTRY_NAME. La base de datos Oracle reformatea este
patrn con un espacio despus de cada carcter no nulo de la cadena. Se muestran los
resultados.
261
Expresiones Normales y
Restricciones de Control
ALTER TABLE emp8
ADD CONSTRAINT email_addr
CHECK(REGEXP_LIKE(email,'@'))NOVALIDATE ;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
262
Resumen
En esta leccin, ha aprendido a utilizar el soporte de
expresiones normales en SQL y PL/SQL para buscar,
hacer corresponder y sustituir cadenas siempre en
trminos de expresiones normales.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
Resumen
En esta leccin, ha aprendido a utilizar las funciones de soporte de expresiones normales que
se han introducido en la base de datos Oracle 10g.
263
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
.
264
Prctica 8
1. Escriba una consulta para buscar en la tabla EMPLOYEES todos los empleados cuyos
nombres empiecen por Ne o Na.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 8-16
265
Prctica 8 (continuacin)
3. Cree una consulta que muestre St sustituido por Street en la columna STREET_
ADDRESS de la tabla LOCATIONS. Procure que no afecte a ninguna fila que ya
contenga Street. Muestre slo las filas que se vean afectadas.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 8-17
266
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II 8-18
267
____________________________
Apndice A
Soluciones a la Prctica
____________________________
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
268
Prctica 1: Soluciones
Para contestar a la pregunta 6 y a las posteriores, se deber conectar a la base de datos
mediante iSQL*Plus. Para ello, inicie el explorador Internet Explorer desde el escritorio
del cliente. Introduzca la direccin URL en formato http://machinename:5561/isqlplus/ y
utilice la cuenta oraxx y la contrasea y el identificador de servicio correspondientes (en
formato Tx) que le proporcione el instructor para conectarse a la base de datos.
1. Qu privilegio se debe otorgar a un usuario para conectarse a Oracle Server? Se
trata de un privilegio de objeto o del sistema?
El privilegio del sistema CREATE SESSION
2. Qu privilegio se debe otorgar a un usuario para crear tablas?
El privilegio CREATE TABLE
3. Si crea una tabla, quin puede transferir privilegios a otros usuarios en su tabla?
Puede hacerlo usted mismo o cualquier usuario a quien haya otorgado dichos
privilegios mediante WITH GRANT OPTION.
4. Usted es el DBA. Est creando muchos usuarios que requieren los mismos privilegios
del sistema.
Qu debera utilizar para facilitar el trabajo?
Crear un rol que contenga los privilegios del sistema y otorgar el rol a los
usuarios.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
7.
*
departments;
269
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
10. Consulte todas las filas de la tabla DEPARTMENTS del otro equipo mediante el
sinnimo.
Team 1 executes this SELECT statement.
SELECT *
FROM
team2;
Team 2 executes this SELECT statement.
SELECT *
FROM
team1;
270
table_name
user_tables;
12. Consulte la vista de diccionario de datos ALL_TABLES para ver informacin sobre
todas las tablas a las que puede acceder. Excluya las tablas de su propiedad.
SELECT table_name, owner
FROM
all_tables
WHERE
owner <> 'Oraxx';
13. Revoque el privilegio SELECT del otro equipo.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
14. Elimine la fila que insert en la tabla DEPARTMENTS en el paso 8 y guarde los
cambios.
Team 1 executes this INSERT statement.
DELETE FROM departments
WHERE department_id = 500;
COMMIT;
Team 2 executes this INSERT statement.
DELETE FROM departments
WHERE department_id = 510;
COMMIT;
271
Prctica 2: Soluciones
1. Cree la tabla DEPT2 basada en el siguiente diagrama de instancia de tabla. Guarde la
sintaxis en un archivo de comandos denominado lab_02_01.sql y, a
continuacin, ejecute la sentencia en el archivo de comandos para crear la tabla.
Confirme que la tabla se ha creado.
ID
NAME
Data type
NUMBER
VARCHAR2
Length
25
Column Name
Key Type
Nulls/Unique
FK Table
FK Column
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
DESCRIBE dept2
2. Rellene la tabla DEPT2 con datos de la tabla DEPARTMENTS. Incluya slo las
columnas que necesite.
INSERT INTO dept2
SELECT department_id, department_name
FROM
departments;
272
emp2
NUMBER(7),
VARCHAR2(25),
VARCHAR2(25),
NUMBER(7));
DESCRIBE emp2
VARCHAR2(50));
DESCRIBE emp2
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
SELECT
FROM
WHERE
table_name
user_tables
table_name IN ('DEPT2', 'EMP2');
273
DESCRIBE employees2
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
274
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
16. Confirme que las restricciones se han agregado consultando la vista USER_
CONSTRAINTS.
Tenga en cuenta los tipos y los nombres de las restricciones.
SELECT
FROM
WHERE
constraint_name, constraint_type
user_constraints
table_name IN ('EMP2', 'DEPT2');
17. Muestre los tipos y los nombres de objeto de la vista del diccionario de datos
USER_OBJECTS para las tablas EMP2 y DEPT2. Observe que se han creado tablas
nuevas y un nuevo ndice.
SELECT
FROM
WHERE
OR
object_name, object_type
user_objects
object_name LIKE 'EMP%'
object_name LIKE 'DEPT%';
275
Deptno
Dname
Primary Key
Yes
Data Type
Number
VARCHAR2
Length
30
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
276
Prctica 3: Soluciones
1. Ejecute el archivo de comandos lab_03_01.sql en la carpeta de prcticas para
crear la tabla SAL_HISTORY.
2. Muestre la estructura de la tabla SAL_HISTORY.
DESC sal_history
3. Ejecute el archivo de comandos lab_03_03.sql en la carpeta de prcticas para
crear la tabla MGR_HISTORY.
4. Muestre la estructura de la tabla MGR_HISTORY.
DESC mgr_history
5. Ejecute el archivo de comandos lab_03_05.sql en la carpeta de prcticas para
crear la tabla SPECIAL_SAL.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
DESC special_sal
277
c.
d.
special_sal;
sal_history;
8. a.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
b.
c.
d.
e.
f.
278
ALL
sales_info VALUES (employee_id, week_id, sales_MON)
sales_info VALUES (employee_id, week_id, sales_TUE)
sales_info VALUES (employee_id, week_id, sales_WED)
sales_info VALUES (employee_id, week_id,
sales_THUR)
INTO sales_info VALUES (employee_id, week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI FROM sales_source_data;
Muestre los registros de la tabla SALES_INFO.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
h.
279
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
MERGE INTO EMP_HIST f USING EMP_DATA h
ON (f.first_name = h.first_name
AND f.last_name = h.last_name)
WHEN MATCHED THEN
UPDATE SET f.email = h.email
WHEN NOT MATCHED THEN
INSERT (f.first_name
, f.last_name
, f.email)
VALUES (h.first_name
, h.last_name
, h.email);
280
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II A-14
281
Prctica 4: Soluciones
1. Escriba una consulta para mostrar lo siguiente para los empleados cuyo identificador
de supervisor sea menor que 120:
- Identificador de supervisor
- Identificador de puesto y salario total de todos los identificadores de puesto de
los empleados que estn a las rdenes del mismo supervisor
- Salario total de esos supervisores
- Salario total de esos supervisores, independientemente de los identificadores de
puesto
SELECT manager_id,job_id,sum(salary)
FROM
employees
WHERE manager_id < 120
GROUP BY ROLLUP(manager_id,job_id);
2. Observe la salida de la pregunta 1. Escriba una consulta mediante la funcin
GROUPING para determinar si los valores NULL de las columnas correspondientes a
las expresiones GROUP BY los genera la operacin ROLLUP.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
3. Escriba una consulta para mostrar lo siguiente para los empleados cuyo identificador
de supervisor sea menor que 120:
- Identificador de supervisor
- Puesto y salarios totales de todos los puestos de empleados que estn a las
rdenes del mismo supervisor
- Salario total de esos supervisores
- Valores desde varias tablas para mostrar el salario total de todos los puestos,
independientemente del supervisor
- Salario total independientemente de todos los cargos
SELECT manager_id, job_id, sum(salary)
FROM
employees
WHERE manager_id < 120
GROUP BY CUBE(manager_id, job_id);
282
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II A-16
283
Prctica 5: Soluciones
1. 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';
2. a. Escriba consultas para mostrar los offsets de zona horaria (TZ_OFFSET), para
las siguientes zonas horarias.
US/Pacific-New
SELECT TZ_OFFSET ('US/Pacific-New') from dual;
Singapore
SELECT TZ_OFFSET ('Singapore') from dual;
Egypt
SELECT TZ_OFFSET ('Egypt') from dual;
b. Modifique la sesin para definir el valor del parmetro TIME_ZONE en el offset
de zona horaria US/Pacific-New.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
284
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
b.
c.
285
SELECT e.last_name
(CASE extract(year from e.hire_date)
WHEN 1998 THEN 'Needs Review'
ELSE 'not this year!'
END )
AS "Review "
FROM
employees e
ORDER BY e.hire_date;
8. Cree una consulta para imprimir los apellidos y el nmero de aos de servicio para
cada empleado. Si el empleado lleva contratado cinco aos o ms, imprima 5 years
of service. Si el empleado lleva contratado 10 aos o ms, imprima 10 years
of service. Si el empleado lleva contratado 15 aos o ms, imprima 15 years
of service. Si no se cumple ninguna de estas condiciones, imprima maybe
next year!. Ordene los resultados por la columna HIRE_DATE. Utilice la tabla
EMPLOYEES.
Indicacin: Utilice TO_YMINTERVAL y expresiones CASE.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
SELECT e.last_name, hire_date, sysdate,
(CASE
WHEN (sysdate -TO_YMINTERVAL('15-0'))>=
hire_date THEN
'15 years of service'
WHEN (sysdate -TO_YMINTERVAL('10-0'))>=
hire_date
THEN '10 years of service'
WHEN (sysdate - TO_YMINTERVAL('5-0'))>=
hire_date
THEN '5 years of service'
ELSE 'maybe next year!'
END) AS "Awards"
FROM
employees e;
286
Prctica 6: Soluciones
1. Escriba una consulta para mostrar el apellido, el nmero de departamento y el salario
de cualquier empleado cuyo nmero de departamento y salario se correspondan con el
nmero de departamento y el salario de cualquier empleado que gane una comisin.
SELECT last_name, department_id, salary
FROM
employees
WHERE (salary, department_id) IN
(SELECT salary, department_id
FROM
employees
WHERE
commission_pct IS NOT NULL);
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
287
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
6. Escriba una consulta para buscar todos los empleados que ganen ms que el salario
medio de su departamento. Muestre el apellido, el salario, el identificador de
departamento y el salario medio del departamento. Ordene por salario medio. Utilice
alias para las columnas recuperadas por la consulta como se muestra en el ejemplo de
salida.
288
outer.last_name
employees outer
outer.employee_id
(SELECT inner.manager_id
FROM
employees inner);
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
289
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
11. Escriba una consulta para mostrar los nombres de departamento de los departamentos
cuyo costo de salario total supere un octavo (1/8) del costo de salario total de toda la
compaa. Utilice la clusula WITH para escribir esta consulta. Asigne a la consulta el
nombre SUMMARY.
WITH
summary AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name)
SELECT department_name, dept_total
FROM summary
WHERE dept_total > ( SELECT SUM(dept_total) * 1/8
FROM summary )
ORDER BY dept_total DESC;
290
Prctica 7: Soluciones
1. Observe los siguientes ejemplos de salida. Son resultado de una consulta jerrquica?
Explique por qu o por qu no.
Imagen 1: No es una consulta jerrquica; el informe simplemente se
clasifica en orden descendente por SALARY.
Imagen 2: No es una consulta jerrquica; hay dos tablas implicadas.
Imagen 3: S, definitivamente se trata de una consulta jerrquica, ya que
muestra la estructura de rbol que representa la lnea de supervisores de
la tabla EMPLOYEES.
2. Genere un informe que muestre un organigrama del departamento de Mourgos.
Imprima los apellidos, los salarios y los identificadores de departamento.
SELECT last_name, salary, department_id
FROM employees
START WITH last_name = 'Mourgos'
CONNECT BY PRIOR employee_id = manager_id;
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
3. Cree un informe que muestre la jerarqua de los supervisores del empleado Lorentz.
Muestre primero el supervisor inmediato.
SELECT last_name
FROM employees
WHERE last_name != 'Lorentz'
START WITH last_name = 'Lorentz'
CONNECT BY PRIOR manager_id = employee_id;
4. Cree un informe con sangrado que muestre la jerarqua de supervisores partiendo del
empleado cuyo LAST_NAME es Kochhar. Imprima el apellido del empleado, el
identificador de supervisor y el identificador de departamento. Asigne nombres de
alias a las columnas como se muestra en la salida de ejemplo.
COLUMN name FORMAT A20
SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)2,'_')
name,manager_id mgr, department_id deptno
FROM employees
START WITH last_name = 'Kochhar'
CONNECT BY PRIOR employee_id = manager_id
/
COLUMN name CLEAR
291
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II A-25
292
Prctica 8: Soluciones
1. Escriba una consulta para buscar en la tabla EMPLOYEES todos los empleados cuyos
nombres empiecen por Ne o Na.
SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^N(e|a).');
2. Cree una consulta que elimine los espacios de la columna STREET_ADDRESS de la
tabla LOCATIONS en la visualizacin.
SELECT regexp_replace (street_address, ' ','')
FROM locations;
3. Cree una consulta que muestre St sustituido por Street en la columna
STREET_ADDRESS de la tabla LOCATIONS.Procure que no afecte a ninguna fila
que ya contenga Street. Muestre slo las filas que se vean afectadas.
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II A-26
293
_____________________
Apndice B
Descripciones de
Tablas y Datos
_____________________
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
294
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-2
295
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-3
296
Tabla REGIONS
DESCRIBE regions
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-4
297
Tabla COUNTRIES
DESCRIBE countries
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-5
298
Tabla LOCATIONS
DESCRIBE locations;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-6
299
Tabla DEPARTMENTS
DESCRIBE departments
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-7
300
Tabla JOBS
DESCRIBE jobs
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-8
301
Tabla EMPLOYEES
DESCRIBE employees
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-9
302
Tabla EMPLOYEES
Las cabeceras de las columnas COMMISSION_PCT, MANAGER_ID y DEPARTMENT_ID
estn definidas como COMM, MGRID y DEPTID en la siguiente captura de pantalla para que
se ajusten a los valores de la tabla a lo largo de la pgina.
SELECT * FROM employees;
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-10
303
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-11
304
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-12
305
Tabla JOB_HISTORY
DESCRIBE job_history
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-13
306
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II B-14
307
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
308
Objetivos
Al finalizar este apndice, debera estar capacitado
para:
Describir el tipo de problemas que se solucionan
mediante SQL para generar SQL
Escribir un archivo de comandos que genere un
archivo de comandos de sentencias DROP TABLE
Escribir un archivo de comandos que genere un
archivo de comandos de sentencias INSERT INTO
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
En este apndice, aprender a escribir un archivo de comandos SQL para generar un archivo
de comandos SQL.
309
Diccionario de datos
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Archivo de comandos SQL
Descripcin
310
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
311
SPOOL dropem.sql
SENTENCIA SQL
SPOOL OFF
SET FEEDBACK ON
SET PAGESIZE 24
SET ECHO ON
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
312
La Imagen Completa
SET FEEDBACK ON
SET PAGESIZE 24
SET ECHO ON
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
La Imagen Completa
La salida del comando de la diapositiva se guarda en un archivo denominado dropem.sql
mediante la opcin de salida File de iSQL*Plus. El archivo contiene los siguientes datos.
Este archivo ya se puede iniciar desde iSQL*Plus. Para ello, localice el archivo de comandos,
crguelo y ejectelo.
Nota: Por defecto, los archivos se envan a la cola de espera a la carpeta ORACLE_HOME\
ORANT\BIN en Windows NT.
313
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
SET PAGESIZE 24
SET HEADING ON ECHO ON FEEDBACK ON
314
Resultado
'''X'''
'X'
''''
'
''''||department_name||''''
'Administration'
''', '''
','
''');'
');
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
315
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
316
Cuando se ejecuta el primer ejemplo de la diapositiva, se pide al usuario los valores para
DEPTNO y HIREDATE:
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
317
Resumen
En este apndice, ha aprendido lo siguiente:
Puede escribir un archivo de comandos SQL para
generar otro archivo de comandos SQL.
Los archivos de comandos utilizan a menudo el
diccionario de datos.
Puede capturar la salida en un archivo.
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen
SQL se puede utilizar para generar archivos de comandos SQL. Estos archivos de comandos
se pueden utilizar para evitar una codificacin repetida, borrar o volver a crear objetos,
obtener ayuda del diccionario de datos y generar predicados dinmicos que contengan
parmetros de tiempo de ejecucin.
Se pueden utilizar comandos de iSQL*Plus para capturar los informes generados por las
sentencias SQL y limpiar la salida que se genera como, por ejemplo, mediante la supresin de
cabeceras, mensajes de feedback, etc.
318
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II C-12
319
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
320
Objetivos
Al finalizar este apndice, debera estar capacitado
para:
Describir la arquitectura de Oracle Server y sus
componentes principales
Mostrar las estructuras implicadas en la conexin
de un usuario a una instancia Oracle
Enumerar las etapas de procesamiento:
Consultas
Sentencias DML
Validaciones
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Objetivos
En este apndice se presenta la arquitectura de Oracle Server. Para ello, se describen las
estructuras de archivos, procesos y memoria implicados en el establecimiento de una
conexin a base de datos y en la ejecucin de un comando SQL.
321
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
322
Archivos de control
Archivos de datos
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Archivo de
parmetros
Archivo de
contraseas
Archivos log
archivados
323
Archivos de control
Archivos de control
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Archivos de control
Al iniciar la instancia y montar la base de datos, se lee el archivo de control. Las entradas del
archivo de control especifican los archivos fsicos que componen la base de datos.
Al agregar archivos adicionales a la base de datos, el archivo de control se actualiza
automticamente.
La ubicacin de los archivos de control se especifica en un parmetro de inicializacin.
Para protegerse de un fallo de la base de datos debido a la prdida del archivo de control,
debera multiplexar el archivo de control en al menos tres dispositivos fsicos distintos. Si
especifica varios archivos a travs del parmetro de inicializacin, el servidor de bases de
datos Oracle puede mantener varias copias del archivo de control.
324
Grupo 2
Grupo 3
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Grupo 1
325
Archivo de
datos 1
Archivo de
datos 2
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Tablespace USERS
326
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Segmento
Extensiones
Bloques
de datos
Bloques de
sistema operativo
327
Pool para
Streams
Pool grande
Pool Java
Cach de
buffers de la
base de datos
Buffer de
redo log
SMON
(Monitor
del
Sistema)
PMON
(Monitor
de
Procesos)
Punto de
control
CKPT
DBW0
(Escritor de
Base de
Datos)
LGWR
(Escritor
de Log)
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
ARC0
(Proceso de
Archivado)
328
Proceso
del
servidor 1
PGA
Proceso
del
servidor 2
PGA
Proceso en
segundo
plano
PGA
SGA
Pool para
Streams
Pool grande
Pool Java
Cach de
buffers de la
base de datos
Buffer de
redo log
Pool
compartido
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
329
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-11
330
Procesos Oracle
Proceso
Proceso
Proceso
Proceso
del servidor del servidor del servidor del servidor
SGA
rea Global del Sistema
PMON
Monitor de
procesos
SMON
Monitor del
sistema
CKPT
Punto de
control
LGWR
Escritor
de Log
ARC0
Proceso de
Archivado
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
DBW0
Escritor de
base
de datos
Procesos Oracle
Al llamar a un programa o una herramienta Oracle como, por ejemplo, Enterprise Manager,
Oracle Server crea un proceso del servidor para ejecutar comandos emitidos por la aplicacin.
Oracle tambin crea un juego de procesos en segundo plano para una instancia que
interactan entre s y con el sistema operativo para gestionar las estructuras de memoria,
realizar E/S asncronamente para escribir datos en disco y realizar tareas de mantenimiento
general.
Los procesos en segundo plano que estn presentes dependen de las funciones que se estn
utilizando en la base de datos. Los procesos en segundo plano ms comunes son los
siguientes:
SMON (Monitor del sistema): Realiza una recuperacin de fallo cuando se inicia la
instancia despus de un fallo
PMON (Monitor de procesos): Realiza una limpieza de procesos cuando falla un
proceso del usuario
DBWn (Escritor de base de datos): Escribe bloques modificados de la cach de
buffers de base de datos a los archivos en disco
CKPT (Punto de control): Seala DBWn en puntos de control y actualiza todos los
archivos de datos y los archivos de control de la base de datos para indicar el punto de
control ms reciente
LGWR (Escritor de log): Escribe entradas de redo en disco
ARCn (Proceso de archivado): Copia los archivos redo log en el almacenamiento de
archivado cuando los archivos log estn llenos o se produce un cambio de log
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-12
331
Archivo de
parmetros
Archivo de
contraseas
Base de datos
Archivos
log archivados
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
332
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
333
Servidor
Oracle Server
Servidor
Usuario
Cliente
Servidor de aplicaciones
Servidor
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Usuario
Servidor
Explorador
334
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-16
335
Anlisis:
Busca una sentencia idntica
Comprueba la sintaxis, los nombres de objetos y
los privilegios
Bloquea los objetos que se utilizan durante el
anlisis
Crea y almacena el plan de ejecucin
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
336
Pool Compartido
Pool compartido
Cach de
biblioteca
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Cach de
diccionario
de datos
337
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-19
338
Cach de
buffers de
base de datos
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
339
No compartido
Slo puede escribirlo el proceso del servidor
Contiene:
rea de ordenacin
Informacin de sesin
Estado del cursor
Espacio de la pila
Proceso del
servidor
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
PGA
340
SGA
Cach de
buffers de
base de
datos
UPDATE
employees ...
4
Proceso
del servidor
Pool compartido
Archivos
de datos
Buffer de
redo log
3
Archivos
de control
Archivos
redo log
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de datos
341
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-23
342
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
343
Segmento de Rollback
Imagen antigua
Segmento de
rollback
Imagen
nueva
Tabla
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Sentencia DML
Segmento de Rollback
Antes de realizar un cambio, el proceso del servidor guarda el valor de los datos antiguo en un
segmento de rollback. Esta imagen anterior se utiliza para:
Deshacer los cambios si se hace rollback de la transaccin
Proporcionar consistencia de lectura al asegurarse de que otras transacciones no vean los
cambios no validados realizados por la sentencia DML
Recuperar la consistencia del estado de la base de datos en caso de un fallo
Los segmentos de rollback como, por ejemplo, tablas e ndices, existen en los archivos de
datos, mientras que los bloques de rollback se introducen en el buffer de base de datos a
medida que se necesiten. El DBA crea los segmentos de rollback.
Los cambios realizados en los segmentos de rollback se registran en el buffer de redo log.
344
Procesamiento COMMIT
1
Instancia
SGA
Proceso
del servidor
4
3
Cach de
buffers de
base de
datos
Pool compartido
Buffer de
redo log
LGWR
Proceso
del usuario
Archivos
de datos
Archivos
de control
Archivos
redo log
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de datos
Oracle Server utiliza un mecanismo de validacin rpido que garantiza que los cambios
validados se puedan recuperar en caso de fallo de la instancia.
Nmero de Cambio del Sistema
Siempre que se valida una transaccin, Oracle Server asigna un SCN (nmero de cambio del
sistema) de validacin a la transaccin. El SCN se incrementa regularmente y es nico en la
base de datos. Lo utiliza Oracle Server como un registro de hora interno para sincronizar los
datos y proporcionar consistencia de lectura cuando se recuperan datos de los archivos de
datos. El uso del SCN permite que Oracle Server realice comprobaciones de consistencia sin
depender de la fecha ni de la hora del sistema operativo.
Pasos para el Procesamiento de COMMIT
A continuacin, se muestran los pasos que se deben seguir cuando se emite COMMIT:
El proceso del servidor coloca un registro de validacin, junto con el SCN, en el buffer
de redo log.
LGWR realiza una escritura contigua de todas las entradas de buffers de redo log hasta
el registro de validacin (incluido) en los archivos redo log. Despus, Oracle Server
puede garantizar que los cambios no se perdern si falla una instancia.
345
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-27
346
Resumen
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Resumen
Archivos de la Base de Datos Oracle
La base de datos Oracle incluye los siguientes archivos:
Archivos de control: Poseen la informacin necesaria para verificar la integridad de la
base de datos, incluidos los nombres de los dems archivos de la base de datos (Los
archivos de control suelen estar duplicados).
Archivos de datos: Poseen los datos de la base de datos, incluidos tablas, ndices,
segmentos de rollback y segmentos temporales
Redo logs en lnea: Contienen los cambios realizados en los archivos de datos (Los
redo logs en lnea se utilizan en la recuperacin y suelen estar duplicados).
Otros archivos que se suelen utilizar con la base de datos son:
Archivo de parmetros: Define las caractersticas de una instancia Oracle
Archivo de contraseas: Autentica los usuarios con privilegios de la base de datos
Redo logs archivados: Son copias de seguridad de los redo logs en lnea
347
Resumen (continuacin)
Estructuras de la Memoria SGA
La SGA (rea Global del Sistema) tiene tres estructuras principales:
Pool compartido: Almacena en el diccionario de datos las sentencias SQL que se han
ejecutado ms recientemente y los datos de uso ms reciente del diccionario de datos
Cach de buffers de base de datos: Almacena los datos de uso ms reciente
Buffer de redo log: Registra los cambios realizados en la base de datos mediante la
instancia
Procesos en Segundo Plano
Una instancia Oracle de produccin incluye los siguientes procesos:
DBW0 (Escritor de base de datos): Escribe los datos cambiados en los archivos de
datos
LGWR (Escritor de log): Registra los cambios realizados en los archivos de datos en los
archivos redo log en lnea
SMON (Monitor del sistema): Comprueba la consistencia e inicia la recuperacin de la
base de datos cuando sta se abre
PMON (Monitor de procesos): Limpia los recursos si falla uno de los procesos
CKPT (Proceso de punto de control): Actualiza la informacin de estado de base de
datos despus de un punto de control
ARC0 (Proceso de archivado): Hace una copia de seguridad del redo log en lnea para
asegurar la recuperacin despus de un fallo del medio fsico (Este proceso es opcional,
aunque se incluye normalmente en una instancia de produccin).
Dependiendo de la configuracin, la instancia puede incluir tambin otros procesos.
Pasos para el Procesamiento de Sentencias SQL
Los pasos que se utilizan para procesar una sentencia SQL son:
Anlisis: Compila la sentencia SQL
Ejecucin: Identifica las filas seleccionadas o aplica cambios DML a los datos
Recuperacin: Devuelve las filas consultadas por una sentencia SELECT
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-29
348
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-30
349
_________
ndice
_________
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
350
A
ACCESS PARAMETERS 02-33, 02-35
Activacin de Restricciones 02-15, 02-16
Actualizacin Correlacionada 06-17, 06-18
Adicin de una columna 02-05
Agrupamiento Concatenado 04-21, 04-22, 04-23
ALTER 01-12
ALTER SESSION 05-04,, 05-09, 05-13, 05-17
ALTER TABLE 02-03,, 02-19, 06-16, 08-13
ALTER USER 01-11, 01-19
ALL INSERT 03-02, 03-16, 03-21, 03-35
Arquitectura de la Base de Datos D-1...D-30
B
Borrado de una Columna 02-07
C
Clasificacin de Filas 07-10
Clusula WITH 06-22, 06-23, 06-24
Columna Compuesta 04-17, 04-19, 04-23
Comparaciones entre No Pares 06-04
Comparaciones entre Pares 06-04, 06-25
CONNECT BY 06-07, 07-0507-14
CONNECT BY PRIOR 07-05 07-14
Consulta de Versiones 03-32
Consulta de Versiones de Flashback 02-32
Consulta Externa 03-07, 06-08, 06-10, 06-12, 06-13, 06-14
Consulta Interna 06-08, 06-10, 06-10, 06-12, 06-14, 06-15
Consultas Jerrquicas 03-05
Correlacin 06-13
Crear Base de Datos 05-09, C-03
Crear ndice 02-20, 02-21, 02-23, 02-38, 02-39
CUBE 04-06,, 04-24
CURRENT_DATE 05-05, 05-06, 05-06, 05-15, 05-34, 05-35
CURRENT_TIMESTAMP 05-05, 05-07, 05-08, 05-17, 05-34, 05-35
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
D
DBTIMEZONE 05-04, 05-09, 05-26, 05-34
DEFAULT DIRECTORY 02-33, 02-35
Depurar 02-26, 02-28
Desactivacin de Restricciones 02-15
Desplazamiento por el rbol 07-07...07-09
DROP TABLE 02-26, 02-28, C-02, C-06
E
Eliminacin del rbol 07-13, 07-14
EXIST 06-14,, 06-16, 06-20, 06-21, 06-24, 06-26, 06-27
EXTRACT 05-25
351
F
Fecha/Hora 05-0505-35
Filas de Valores Derivados de Varias Tablas 04-06
Filas Superagregadas 04-06, 04-08, 04-09
FIRST INSERT 03-16, 03-22, 03-23
FLASHBACK TABLE 02-26, 02-27, 02-28
FROM_TZ 05-28
Funcin de Fecha/Hora 05-34, 05-35
Funciones de Conversin 05-28...05-31
G
GROUP BY 03-07, 03-23, 04-03 ,, 04-23, 06-07, 06-20, 06-24, 06-25
GROUP BY ROLLUP 04-12, 04-17, 04-19
GROUPING 04-03,, 04-23
GROUPING SET 04-13, 04-15, 04-17, 04-21, 04-23
H
HAVING 03-05, 04-03, 04-05, 04-07, 04-09, 06-20, C-04
Hora del Meridiano de Greenwich 05-03, 05-06, 05-14
Horario de Verano 05-03, 05-28, 05-32,
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
I
ndices Basados en Funciones 02-23, 02-24
Informe en Estructura de rbol 07-02
Informes de Datos Derivados de Varias Tablas 04-09
INSERT 01-12, 01-15, 01-18, 02-06, 02-31, 03-03,, 03-06, 03-11,, 03-30
INSERT ALL Incondicional 02-19
INSERT Condicional 02-20 ...02-23
INTERVAL 05-18-05-24
INTERVAL DAY TO SECOND 05-22, 05-24
INTERVAL YEAR TO MONTH 05-21...05-22
L
LEVEL 07-05, 07-10, 07-11, 07-14,
LOCALTIMESTAMP 05-05, 05-08, 05-08, 05-34, 05-35
LPAD 07-11
M
MERGE 03-27...03-30
Metacaracteres 08-04...08-06
Modificacin de una Columna 02-06
N
NLS_Date_Language 05-29
Nodo Raz 07-10
Nodo Secundario 07-10
NOT EXIST 01-16, 06-14, 06-16
NOT IN 03-11, 06-05, 06-06, 06-16
352
O
ON DELETE CASCADE 02-12
ORACLE_LOADER 02-35
ORDER BY 02-23, 04-03, 04-04, 04-05, 04-07, 04-09, 06-08,
ORGANIZATION EXTERNAL 02-33, 02-35
P
PIVOTING 03-16, 03-24, 03-25
Pseudocolumna 07-05, 07-10, 07-14, 07-15
R
REGEXP_INSTR 8-7
REGEXP_LIKE 8-7
REGEXP_REPLACE 8-7
REGEXP_SUBSTR 8-7
REJECT LIMIT 02-33, 02-35
Relacin Principal-Secundario 07-04
Restriccin 01-17, 02-07, 02-1002-20, 06-07, 08-1, C-03
Restricciones de Control 08-13
Restricciones Diferidas 02-13
Restricciones en Cascada 02-18, 02-19
ROLLUP 04-06 ... 04-23
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
S
Seguimiento de Cambios 02-31
SESSIONTIMEZONE 05-06 ,, 05-09, 05-26
SET TIME_ZONE 05-04, 05-06 ,, 05-09, 05-17
SET UNUSED 02-08
Soporte de Expresiones Normales 8-1,, 8-13
START WITH 07-05, 07-06, 07-11, 07-14, 08-10
Subconsulta 03-04... 03-11, 03-14, 03-17, 06-03 06_26, 07-06, 07-07
Subconsulta Correlacionada 06-10 06-13
Subconsulta Correlacionada para Actualizar Fila 06-17, 06-18
Subconsulta Correlacionada para Suprimir 06-20, 06-21
Subconsulta Escalar 06-07...06-09
Subconsultas de Varias Columnas 06-03, 06-07
Sustitucin de Patrones 08-12
T
Tabla Externa 02-29, 02-31, 02-35, 02-37
TIMESTAMP 05-10...05-17
TIMESTAMP WITH LOCAL TIMEZONE 05-16, 05-17
TIMESTAMP WITH TIME ZONE 05-15
TO_DSINTERVAL 05-30
TO_YMINTERVAL 05-31
TZ_OFFSET 05-26, 05-34
U
UNION 04-07, 04-10, 04-13, 04-17, 04-23
UNION ALL 04-07, 04-10, 04-13, 04-13, 04-17, 04-23
353
V
V$TIMEZONE_NAME 05-28
Valores Derivados de Varias Tablas 04-09, 04-23
Versiones de Filas 03-36
VERSIONS BETWEEN 03-34
Z
Zona Horaria 05-01... 05-34
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II ndice-5
354
B
g
10
e I
cl I
ra ls
O ta o
n
n
os e m
at m u
D da Al
n
l
de Fu de
e
a
as L
SQ Gu
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II ndice-6
355