Documente Academic
Documente Profesional
Documente Cultură
O ta o
ra ls
l
cl I
n
e I
10
n
1
Introducción a Oracle 10g: SQL Fundamentals II
Contenido
Prefacio
I Introducción
Objetivos I-2
Objetivos del Curso I-3
Visión General del Curso I-4
Aplicación del Curso 1-5
Resumen I-6
Resumen 1-19
at m u
Objetivos 2-2
a
iii
2
Introducción a Oracle 10g: SQL Fundamentals II
Resumen 3-35
Práctica 3: Visión General 3-36
n
iv
3
Introducción a Oracle 10g: SQL Fundamentals II
Resumen 4-23
as L í
Objetivos 5-2
SQ Gu
CURRENT_TIMESTAMP 5-7
LOCALTIMESTAMP 5-8
at m u
4
Introducción a Oracle 10g: SQL Fundamentals II
Búsqueda de Empleados que Tengan al Menos una Persona a sus Órdenes 6-15
SQ Gu
7 Recuperación Jerárquica
O ta o
Objetivos 7-2
Ejemplo de Datos de la Tabla EMPLOYEES 7-3
ra ls
vi
5
Introducción a Oracle 10g: SQL Fundamentals II
Resumen 7-14
Práctica 7: Visión General 7-15
Objetivos C-2
Uso de SQL para Generar SQL C-3
SQ Gu
de Fu de
Resumen C-11
os e m
Objetivos D-2
Arquitectura de la Base de Datos Oracle: Visión General D-3
O ta o
vii
6
Introducción a Oracle 10g: SQL Fundamentals II
Índice
Prácticas Adicionales
O ta o
ra ls
l
cl I
n
e I
10
n
viii
7
g
10
8
e I
cl I
ra ls
Introducción a Oracle 10g: SQL Fundamentals II
O ta o
n n
os e m
at m u
Prefacio
D da Al
n l
de Fu de
e a
as L í
B SQ Gu
g
10
9
e I
cl I
ra ls
Introducción a Oracle 10g: SQL Fundamentals II
O ta o
n n
os e m
at m u
D da Al
Prefacio - 2
n l
de Fu de
e a
as L í
B SQ Gu
Introducción a Oracle 10g: SQL Fundamentals II
Perfil
Requisitos
• Base de Datos Oracle 10g: Conceptos Fundamentales de SQL I
O ta o
ra ls
l
cl I
n
e I
10
n
Prefacio - 3
10
Introducción a Oracle 10g: SQL Fundamentals II
Publicaciones Relacionadas
Publicaciones Adicionales
• Boletines de versión de sistema
• Guías de usuario y de instalación
• Archivos read-me
• Artículos de IOUG (International Oracle User’s Group)
• Oracle Magazine
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Prefacio - 4
11
Introducción a Oracle 10g: SQL Fundamentals II
Convenciones Tipográficas
O ta o
ra ls
l
cl I
n
e I
10
n
Prefacio - 5
12
Introducción a Oracle 10g: SQL Fundamentals II
impresas, títulos de
n
libros y cursos,
variables es el nombre de usuario.
O ta o
Comillas Títulos de capítulo y Este tema se trata en la Unidad II, Lección 3, “Trabajo con
cl I
n
de lección en Objetos”.
referencias cruzadas,
e I
iniciales en
mayúsculas
Prefacio - 6
13
Introducción a Oracle 10g: SQL Fundamentals II
O ta o
ra ls
l
cl I
n
e I
10
n
Prefacio - 7
14
g
10
15
e I
cl I
ra ls
Introducción a Oracle 10g: SQL Fundamentals II
O ta o
n n
os e m
at m u
D da Al
Prefacio - 8
n l
de Fu de
e a
as L í
B SQ Gu
g
10
16
e I
cl I
ra ls
Introducción a Oracle 10g: SQL Fundamentals II
O ta o
n n
os e m
Introducción
at m u
D da Al
n l
de Fu de
e a
as L í
B SQ Gu
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
REGIONS COUNTRIES
as L í
e
SQ Gu
de Fu de
EMPLOYEES: La tabla EMPLOYEES contiene información sobre todos los empleados como
nombre y apellido, identificador de puesto, salario, fecha de contratación, identificador de
os e m
tabla COUNTRIES.
n
COUNTRIES: Esta tabla contiene los nombres de país, los identificadores de país y los
e I
tabla LOCATIONS.
REGIONS: Esta tabla contiene identificadores de región y nombres de región de los diferentes
n
Resumen
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
22
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
En esta lección, aprenderá a controlar el acceso a base de datos para objetos específicos y a
agregar nuevos usuarios con diferentes niveles de privilegios de acceso.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Administrador
de la base
de datos
Usuarios
B
as L í
e
SQ Gu
de Fu de
seguridad de los datos. La seguridad del sistema cubre el acceso y el uso de la base de datos
ra ls
en el nivel del sistema como, por ejemplo, nombre de usuario y contraseña, el espacio en
l
disco asignado a los usuarios y las operaciones del sistema que pueden realizar los usuarios.
cl I
La seguridad de datos cubre el acceso y el uso de los objetos de base de datos y las acciones
n
Privilegios
Privilegios
D da Al
Los privilegios son el derecho a ejecutar sentencias SQL en particular. El DBA (administrador
at m u
sistema para obtener acceso a la base de datos y privilegios de objeto para manipular el
n
contenido de los objetos de la base de datos. A los usuarios también se les puede otorgar el
a
privilegio de otorgar privilegios adicionales a otros usuarios o a roles, que son grupos
especificados de privilegios relacionados.
O ta o
Esquemas
ra ls
l
Un esquema es una recopilación 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.
cl I
n
Para obtener más información, consulte el manual de referencia Oracle Database 10g
e I
Los usuarios y los roles tienen a su disposición más de 100 privilegios del sistema distintos.
Los privilegios del sistema suelen ser proporcionados por el administrador de la base de datos.
at m u
usuarios de Oracle
DROP USER La persona a la que se otorga el privilegio puede borrar otro
ra ls
usuario.
l
DROP ANY TABLE La persona a la que se otorga el privilegio puede borrar una tabla
cl I
de cualquier esquema.
n
BACKUP ANY TABLE La persona a la que se otorga el privilegio puede realizar copias
e I
cualquier esquema.
g
Creación de Usuarios
CREATE USER HR
IDENTIFIED BY HR;
User created.
B
as L í
e
SQ Gu
de Fu de
Creación de un Usuario
D da Al
Para crear el usuario, el DBA ejecuta la sentencia CREATE USER. El usuario no tiene ningún
privilegio en ese momento. Por tanto, el DBA puede otorgar privilegios a ese usuario. Estos
at m u
En la sintaxis:
user es el nombre del usuario que se va a crear
O ta o
“CREATE USER”.
cl I
n
e I
10
n
– CREATE VIEW
–
as L í
CREATE PROCEDURE
e
SQ Gu
de Fu de
del usuario
l
cl I
En la sintaxis:
n
los usuarios
n
Nota: Los privilegios del sistema actuales se pueden encontrar en la vista de diccionario
g
SESSION_PRIVS.
El DBA utiliza la sentencia GRANT para asignar privilegios del sistema al usuario. Una vez
at m u
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
os e m
O ta o
ra ls
l
cl I
n
e I
10
n
¿Qué es un Rol?
Usuarios
Gestor
Privilegios
B
¿Qué es un Rol?
D da Al
Un usuario puede tener acceso a varios roles y se puede asignar a varios usuarios el mismo
os e m
rol. Los roles se suelen crear para una aplicación de base de datos.
n
a
Sintaxis
l
En la sintaxis:
n
Una vez creado el rol, el DBA puede utilizar la sentencia GRANT para asignar el rol a
10
• Cree un rol
CREATE ROLE manager;
Role created.
• Otorgue privilegios a un rol
GRANT create table, create view
TO manager;
Grant succeeded.
Grant succeeded.
as L í
e
SQ Gu
de Fu de
Creación de un Rol
D da Al
Si se otorga a los usuarios varios roles, reciben todos los privilegios asociados a esos roles.
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Cambio de Contraseñas
ALTER USER HR
IDENTIFIED BY employ;
User altered.
B
as L í
e
SQ Gu
de Fu de
Cambio de Contraseñas
D da Al
El DBA crea una cuenta e inicializa una contraseña para cada usuario. La contraseña se puede
cambiar mediante la sentencia ALTER USER.
at m u
Sintaxis
os e m
n
En la sintaxis:
user es el nombre del usuario
O ta o
opciones. Debe tener el privilegio ALTER USER para cambiar cualquier otra opción.
cl I
Para obtener más información, consulte el manual Oracle Database 10g SQL Reference.
n
Nota: SQL*Plus dispone de un comando PASSWORD (PASSW) que se puede utilizar para
e I
cambiar la contraseña de un usuario cuando éste está conectado. Este comando no está
disponible en iSQL*Plus.
10
n
Privilegios de Objeto
Privilegios
de Objeto Tabla Vista Secuencia Procedimiento
ALTER √ √
DELETE √ √
EXECUTE √
INDEX √
INSERT √ √
REFERENCES √
B
SELECT √ √ √
as L í
UPDATE √ √
e
SQ Gu
de Fu de
Privilegios de Objeto
D da Al
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
os e m
n
cl I
n
e I
10
n
Privilegios de Objeto
esquema contenidos en el esquema del usuario. Un usuario puede otorgar cualquier privilegio
de objeto en cualquier objeto de esquema que sea propiedad del usuario a cualquier otro
os e m
n
a otros usuarios.
ra ls
En la sintaxis:
l
TO scott, manager;
Grant succeeded.
as L í
e
SQ Gu
de Fu de
Instrucciones
D da Al
• Para otorgar privilegios en un objeto, éste debe estar en el esquema o le deben haber
otorgado los privilegios de objeto con la cláusula WITH GRANT OPTION.
at m u
ese objeto.
El primer ejemplo de la diapositiva otorga a los usuarios Sue y Rich el privilegio para
O ta o
Si Sue o Rich quieren utilizar ahora una sentencia SELECT para obtener datos de la tabla
EMPLOYEES, la sintaxis que deben utilizar es:
cl I
n
desde el sinónimo:
10
Nota: Los DBA suelen asignar privilegios del sistema; cualquier usuario propietario de un
g
Transferencia de Privilegios
ON alice.departments
TO PUBLIC;
as L í
Grant succeeded.
e
SQ Gu
de Fu de
La persona a la que se otorga un privilegio que se otorgue con la cláusula WITH GRANT
OPTION lo puede transferir a otros usuarios y roles. Los privilegios de objeto otorgados con
at m u
El ejemplo de la diapositiva otorga al usuario Scott acceso a la tabla DEPARTMENTS con los
n
privilegios para consultar la tabla y agregarle filas. El ejemplo muestra también que Scott
a
PUBLIC.
cl I
El segundo ejemplo permite a todos los usuarios del sistema consultar datos de la tabla
n
DEPARTMENTS de Alice.
e I
10
n
en columnas específicas
as L í
Si intenta realizar una operación no autorizada, como suprimir una fila de una tabla para la
que no tiene el privilegio DELETE, Oracle Server no permite que la operación se realice.
at m u
Si recibe el mensaje de error de Oracle Server “table or view does not exist”, es porque ha
os e m
• Ha intentado realizar una operación en una tabla o en una vista para la que no tiene el
privilegio adecuado
O ta o
Puede acceder al diccionario de datos para ver los privilegios de los que dispone. El gráfico
ra ls
cl I
n
e I
10
n
especifique y de cualquier otro usuario a quien el usuario revocado hubiera otorgado esos
privilegios.
os e m
n
a
En la sintaxis:
CASCADE es necesario para eliminar cualquier restricción de integridad referencial realizada
O ta o
Nota: Si revoca los privilegios de un usuario que debe dejar la compañía, debe volver a
cl I
otorgar cualquier privilegio que este usuario hubiera otorgado a otros usuarios. Si borra la
n
cuenta de usuario sin revocarle los privilegios, esta acción no afectará a los privilegios del
e I
Nota: Si se otorga un privilegio a un usuario con la cláusula WITH GRANT OPTION, ese
os e m
usuario también puede otorgar el privilegio con la cláusula WITH GRANT OPTION, de
n
forma que es posible una larga cadena de personas a las que se otorgan privilegios, aunque no
a
otorgados.
ra ls
Por ejemplo, si el usuario A otorga un privilegio SELECT en una tabla al usuario B con la
l
privilegio SELECT con la cláusula WITH GRANT OPTION y el usuario C puede otorgar al
n
usuario D el privilegio SELECT. Si el usuario A revoca los privilegios del usuario B, los
e I
Resumen
Resumen
D da Al
Los DBA establecen la seguridad de base de datos inicial para los usuarios asignándoles
privilegios.
at m u
• El DBA crea usuarios que deben tener una contraseña. El DBA es responsable además
de establecer los privilegios iniciales del sistema para un usuario.
os e m
n
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
O ta o
recopilación de privilegios del sistema o de objeto a varios usuarios. Los roles facilitan
el mantenimiento del otorgamiento y de la revocación de privilegios.
ra ls
l
• 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.
e I
• Con los enlaces de base de datos, puede acceder a datos en bases de datos remotas. No
10
Forme un equipo con otros alumnos para este ejercicio sobre el control del acceso a los objetos
de base de datos.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 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 dirección URL en formato http://machinename:5561/isqlplus/ y utilice
la cuenta oraxx y la contraseña 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, ¿quién 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é debería utilizar para facilitar el trabajo?
_____________________________________________________________________
5. ¿Qué comando se utiliza para cambiar la contraseña?
_____________________________________________________________________
B
…
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 1 (continuación)
8. Agregue una nueva fila a su tabla DEPARTMENTS. El equipo 1 debe agregar Education
como número de departamento 500. El equipo 2 debe agregar Human Resources como
número de departamento 510. Consulte la tabla del otro equipo.
9. Cree un sinónimo para la tabla DEPARTMENTS del otro equipo.
10. Consulte todas las filas de la tabla DEPARTMENTS del otro equipo mediante el sinónimo.
Team 1 SELECT statement results:
…
B
as L í
e
SQ Gu
de Fu de
O ta o
ra ls
l
…
cl I
n
e I
10
n
Práctica 1 (continuación)
11. Consulte el diccionario de datos USER_TABLES para ver información sobre las tablas
que son de su propiedad.
12. Consulte la vista de diccionario de datos ALL_TABLES para ver información 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
continuación.
B
as L í
…
e
SQ Gu
de Fu de
14. Elimine la fila que insertó en la tabla DEPARTMENTS en el paso 8 y guarde los cambios.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
46
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
Esta lección contiene información sobre la creación de índices y restricciones, así como sobre
la modificación de objetos existentes. También recibirá información sobre tablas externas y la
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
Después de crear una tabla, puede que necesite cambiar la estructura de tabla porque ha
omitido una columna, se debe cambiar la definición de columna o debe eliminar columnas.
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
Puede agregar columnas a una tabla, modificar columnas y borrar columnas de una tabla
mediante la sentencia ALTER TABLE.
at m u
En la sintaxis:
os e m
DEFAULT expr especifica el valor por defecto para una nueva columna
ra ls
l
cl I
n
e I
10
n
…
as L í
e
SQ Gu
de Fu de
última.
El ejemplo de la diapositiva agrega una columna denominada JOB_ID a la tabla DEPT80.
os e m
n
Nota: Si una tabla ya contiene filas cuando se agrega una columna, la nueva columna es nula
inicialmente para todas las filas. No puede agregar una columna NOT NULL obligatoria a una
O ta o
tabla que contiene datos en otras columnas. Sólo puede agregar una columna NOT NULL a
ra ls
cl I
n
e I
10
n
Puede modificar una definición de columna mediante la sentencia ALTER TABLE con la
cláusula MODIFY. La modificación de columnas puede incluir cambios en el tipo de datos de
at m u
Instrucciones
n
columna
n
• Puede cambiar el tipo de datos si la columna contiene sólo valores nulos. La excepción
e I
son las conversiones CHAR a VARCHAR2, que se pueden realizar con datos en las
columnas.
10
• Puede convertir una columna CHAR al tipo de datos VARCHAR2 o convertir una
columna VARCHAR2 al tipo de datos CHAR sólo si la columna contiene valores nulos o
n
si no cambia el tamaño.
g
• Un cambio en el valor por defecto de una columna sólo afecta a las siguientes
inserciones en la tabla.
Puede borrar una columna de una tabla mediante la sentencia ALTER TABLE con la cláusula
DROP COLUMN.
at m u
Instrucciones
os e m
• Mediante la sentencia ALTER TABLE, sólo se puede borrar una columna cada vez.
a
• Una columna no se puede borrar si forma parte de una restricción o de una clave de
ra ls
• El borrado de una columna puede tardar si la columna tiene muchos valores. En este
cl I
caso, es posible que sea mejor definirla como no utilizada y borrarla cuando haya menos
n
Nota: Hay columnas que no se pueden borrar nunca, como las que forman parte de la clave de
partición de una tabla particionada o las columnas que forman parte de la clave primaria de
10
La opción SET UNUSED marca una o más columnas como no utilizadas para que se puedan
borrar cuando la demanda de recursos del sistema sea menor. La especificación de esta
at m u
cláusula no elimina realmente las columnas de destino de cada fila de la tabla (es decir, no
restaura el espacio en disco que utilizan estas columnas). Por lo tanto, el tiempo de respuesta
os e m
n
es más rápido que si ejecuta la cláusula DROP. Las columnas no utilizadas se tratan como si
a
se hubieran borrado, incluso aunque sus datos de columna sigan estando en las filas de la
tabla. Si una columna se ha marcado como no utilizada, no se puede acceder a ella. Una
O ta o
DESCRIBE y puede agregar una nueva columna a la tabla con el mismo nombre que una
columna no utilizada. La información SET UNUSED se almacena en la vista de diccionario
cl I
n
USER_UNUSED_COL_TABS.
e I
Nota: Las instrucciones para definir una columna como UNUSED son parecidas a las que se
aplican al borrado de una columna.
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Puede agregar una restricción para tablas existentes mediante la sentencia ALTER TABLE
con la cláusula ADD.
at m u
En la sintaxis:
os e m
Instrucciones
cl I
• Puede agregar, borrar, activar o desactivar una restricción, pero no puede modificar su
n
estructura.
e I
• Puede agregar una restricción NOT NULL a una columna existente mediante la cláusula
MODIFY de la sentencia ALTER TABLE.
10
Nota: Puede definir una columna NOT NULL sólo si la tabla está vacía o si la columna tiene
n
REFERENCES emp2(employee_id);
Table altered.
as L í
e
SQ Gu
de Fu de
El primer ejemplo de la diapositiva modifica la tabla EMP2 para agregar una restricción
PRIMARY KEY en la columna EMPLOYEE_ID. Observe que, como no se proporciona un
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
ON DELETE CASCADE
ON DELETE CASCADE
D da Al
La acción 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
at m u
suprimen los datos de la clave principal, también se suprimen todas las filas de la tabla
secundaria que dependen de los valores de la clave principal suprimida. Para especificar esta
os e m
n
cl I
n
e I
10
n
Diferir Restricciones
Cambio de un atributo
SET CONSTRAINTS dept2_id_pk IMMEDIATE específico de restricción
B
Diferir Restricciones
D da Al
de la validación. Si se viola una restricción diferida, la validación provoca que se haga rollback
de la transacción. Si una restricción es inmediata (no diferida), se comprueba al final de cada
os e m
n
provoca una acción (por ejemplo, DELETE CASCADE), esa acción se toma siempre como
parte de la sentencia que la provocó, independientemente de que la restricción sea diferida o
O ta o
inmediata. Utilice la restricción SET CONSTRAINTS para especificar, para una transacción en
particular, si se comprueban las restricciones diferibles después de cada sentencia DML o en el
ra ls
l
inicialmente inmediatas. Estos atributos pueden ser diferentes para cada restricción.
Supuesto de uso: La política de la compañía dicta que el número de departamento 40 se
10
Table altered.
as L í
e
SQ Gu
de Fu de
Para borrar una restricción, puede identificar el nombre de restricción desde las vistas de
diccionario de datos USER_CONSTRAINTS y USER_CONS_COLUMNS. Utilice a
at m u
Sintaxis
a
En la sintaxis:
l
column
constraint es el nombre de la restricción
e I
Al borrar una restricción de integridad, Oracle Server ya no fuerza esa restricción y ya no está
10
Desactivación de Restricciones
Puede desactivar una restricción sin borrarla ni volverla a crear mediante la sentencia ALTER
TABLE con la cláusula DISABLE.
at m u
Sintaxis
os e m
Instrucciones
• Puede utilizar la cláusula DISABLE en las sentencias CREATE TABLE y
cl I
n
ALTER TABLE.
• La cláusula CASCADE desactiva las restricciones de integridad dependientes.
e I
Activación de Restricciones
Puede activar una restricción sin borrarla ni volverla a crear mediante la sentencia ALTER
TABLE con la cláusula ENABLE.
at m u
Sintaxis
os e m
En la sintaxis:
O ta o
Instrucciones
l
• Si activa una restricción, esa restricción se aplica a todos los datos de la tabla. Todos los
cl I
O ta o
ra ls
l
cl I
n
e I
10
n
Restricciones en Cascada
Restricciones en Cascada
D da Al
Esta sentencia ilustra el uso de la cláusula CASCADE CONSTRAINTS. Suponga que se crea la
tabla TEST1 de este modo:
at m u
fk NUMBER,
a
col1 NUMBER,
col2 NUMBER,
O ta o
ALTER TABLE test1 DROP (col1); —la restricción de varias columnas ck1
e I
Restricciones en Cascada
Ejemplo:
Si se borran también todas las columnas a las que hacen referencia las restricciones definidas en
a
válido ejecutar la siguiente sentencia sin la cláusula CASCADE CONSTRAINTS para la tabla
ra ls
e I
10
n
Se pueden crear dos tipos de índices. Un tipo es el índice único. Oracle Server crea
automáticamente un índice único si se define una columna o un grupo de columnas en una
at m u
tabla para tener una restricción PRIMARY KEY o UNIQUE. El nombre del índice es el
nombre que se asigna a la restricción.
os e m
n
El otro tipo de índice es el no único y lo puede crear un usuario. Por ejemplo, puede crear un
a
índice de columna FOREIGN KEY que se utilizará en uniones para mejorar la velocidad de
recuperación.
O ta o
CREATE INDEX.
l
Para obtener más información, consulte Oracle Database 10g SQL Reference.
cl I
n
Nota: Puede crear manualmente un índice único, pero se recomienda que cree una restricción
única, lo que crea implícitamente un índice único.
e I
10
n
nombres a los índices en el momento de la creación de la clave primaria para que sean
diferentes al nombre de la restricción PRIMARY KEY. El siguiente ejemplo muestra el
os e m
n
first_name VARCHAR2(20),
ra ls
last_name VARCHAR2(25));
l
Table created.
cl I
n
new_emp2(employee_id);
emp_id_idx2;
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Index created.
B
SELECT *
FROM dept2
as L í
Los índices basados en funciones definidos con las palabras clave UPPER(column_name)
o LOWER(column_name) permiten búsquedas no sensibles a mayúsculas/minúsculas. Por
at m u
Oracle Server utiliza el índice únicamente si esa función en particular se utiliza en una
consulta. Por ejemplo, la siguiente sentencia puede utilizar el índice, pero sin la cláusula
ra ls
l
FROM employees
e I
Oracle Server trata los índices con columnas marcadas como DESC como índices basados en
funciones. Las columnas marcadas como DESC se clasifican en orden descendente.
Eliminación de un Índice
Eliminación de un Índice
D da Al
Los índices no se pueden modificar. Para cambiar un índice, debe borrarlo y volverlo a crear.
Para eliminar una definición de índice del diccionario de datos, emita la sentencia DROP
at m u
INDEX. Para borrar un índice, debe ser el propietario del índice o tener el privilegio DROP
ANY INDEX.
os e m
n
En la sintaxis:
a
Nota: Si borra una tabla, los índices y las restricciones se borran automáticamente, pero las
vistas y las secuencias permanecen.
ra ls
l
cl I
n
e I
10
n
La base de datos Oracle 10g presenta una nueva función para borrar tablas. Al borrar una
tabla, la base de datos no libera inmediatamente el espacio asociado a la tabla. En su lugar, la
at m u
base de datos cambia el nombre de la tabla y la coloca en una papelera de reciclaje, de donde
se podrá recuperar después con la sentencia FLASHBACK TABLE si se da cuenta de que
os e m
n
borró la tabla por error. Si desea liberar de forma inmediata el espacio asociado a la tabla en
a
Especifique PURGE sólo si desea borrar la tabla y liberar el espacio asociado a ella en un solo
ra ls
paso. Si especifica PURGE, la base de datos no coloca la tabla y sus objetos dependientes en
l
la papelera de reciclaje.
cl I
una seguridad mejorada si desea evitar que aparezca material sensible en la papelera de
reciclaje.
10
Nota: No puede hacer rollback de una sentencia DROP TABLE con la cláusula PURGE, ni
n
tampoco puede recuperar la tabla si la ha borrado con la cláusula PURGE. Esta función no
g
FLASHBACK TABLE[schema.]table[,
[ schema.]table ]...
B
TABLE, para restaurar el estado de una tabla a un punto anterior en el tiempo en el caso de
que la haya suprimido o modificado de forma accidental. El comando FLASHBACK TABLE
os e m
n
es una herramienta de reparación de autoservicio para restaurar datos de una tabla junto con
a
los atributos asociados como, por ejemplo, índices o vistas. Esto se consigue cuando la base
de datos está online haciendo rollback sólo de los cambios posteriores en la tabla en cuestión.
O ta o
Sintaxis
e I
Puede llamar a una operación de flashback en tabla en una o más tablas, incluso en tablas de
diferentes esquemas. Para especificar el punto en el tiempo al que desea revertir, proporcione
10
un registro de hora válido. Por defecto, los disparadores de base de datos están desactivados
n
para todas las tablas implicadas. Para sustituir este comportamiento por defecto, especifique
g
información sobre objetos borrados. Las tablas borradas y los objetos asociados, como
n
a
índices, restricciones, tablas anidadas, etc., no se eliminan y siguen ocupando espacio. Siguen
ocupando las cuotas de espacio de usuario, hasta que se purgan específicamente de la papelera
O ta o
de reciclaje o hasta que se produce una situación poco probable en la que las deba purgar la
base de datos debido a restricciones de espacio de tablespace.
ra ls
Se puede considerar a cada usuario propietario de una papelera de reciclaje, ya que, a menos
l
que un usuario tenga el privilegio SYSDBA, los únicos objetos a los que puede acceder en la
cl I
papelera de reciclaje son los de su propiedad. Un usuario puede ver sus objetos en la papelera
n
Al borrar un usuario, los objetos que pertenecen a ese usuario no se colocarán en la papelera
de reciclaje y se purgarán todos los objetos de la papelera de reciclaje.
n
PURGE RECYCLEBIN;
Tablas Externas
B
as L í
e
SQ Gu
de Fu de
Tablas Externas
D da Al
Una tabla externa es una tabla de sólo lectura cuyos metadatos se almacenan en la base de
datos pero cuyos datos se almacenan fuera de la base de datos. Esta definición de tabla
at m u
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.
os e m
n
Los datos de tabla externa se pueden consultar y unir directamente y en paralelo sin necesidad
a
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.
O ta o
La diferencia principal entre las tablas externas y las normales es que las tablas organizadas
ra ls
externamente son de sólo lectura. No son posibles las operaciones DML y no se pueden crear
l
índices en ellas. Sin embargo, se puede crear una tabla externa (y, por tanto, descargar datos)
cl I
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
que reside un origen de datos externo. Puede utilizar nombres de directorio al hacer referencia
a un origen de datos externo, en lugar de predefinir el nombre de ruta de acceso de sistema
os e m
n
Debe tener privilegios del sistema CREATE ANY DIRECTORY para crear directorios. Al
crear un directorio, se le otorgan automáticamente los privilegios de objeto READ y WRITE, y
O ta o
puede otorgar privilegios READ y WRITE a otros usuarios y roles. El DBA también puede
otorgar estos privilegios a otros usuarios y roles.
ra ls
l
Un usuario necesita privilegios READ para todos los directorios que se utilizan en las tablas
externas a las que haya que acceder y privilegios WRITE para las ubicaciones de los archivos
cl I
Además, es necesario un privilegio WRITE cuando el marco de tablas externas se utilice para
e I
descargar datos.
10
recargarlos después en una base de datos Oracle. Se trata de una operación que sólo se realiza
g
una vez y que se puede hacer al crear la tabla. Después de la creación y del relleno inicial, no
se puede actualizar, insertar ni suprimir ninguna fila.
DEFAULT DIRECTORY …
ACCESS PARAMETERS (… )
LOCATION (…)
D da Al
PARALLEL 4
at m u
SELECT * FROM …;
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
en el diccionario de datos que se pueden utilizar para acceder a datos externos. Utilice la
cláusula ORGANIZATION para especificar el orden en que se almacenarán las filas de datos
os e m
n
de sólo lectura y que está ubicada fuera de la base de datos. Observe que los archivos externos
deben existir ya fuera de la base de datos.
O ta o
datos externos para la base de datos. Si no especifica TYPE, Oracle utiliza el controlador de
cl I
Utilice la cláusula DEFAULT DIRECTORY para especificar uno o más objetos de directorio
e I
de base de datos Oracle que se correspondan con directorios del sistema de archivos en los
que puedan residir orígenes de datos externos.
10
La cláusula opcional ACCESS PARAMETERS le permite asignar valores a los parámetros del
n
O ta o
ra ls
l
cl I
n
e I
10
n
PARALLEL 5
REJECT LIMIT 200;
as L í
Table created.
e
SQ Gu
de Fu de
ORACLE_LOADER
Suponga que hay un archivo plano que tiene registros en el siguiente formato:
at m u
10,jones,11-Dec-1934
os e m
20,smith,12-Jun-1972
n
a
Los registros se delimitan con nuevas líneas y todos los campos llevan una coma ( , ) al final.
El nombre del archivo es: /emp_dir/emp.dat
O ta o
Para convertir este archivo en el origen de datos para una tabla externa cuyos metadatos
residirán en la base de datos, debe seguir estos pasos:
ra ls
l
El ejemplo de la diapositiva ilustra la especificación de tabla para crear una tabla externa para
e I
el archivo:
10
/emp_dir/emp.dat
n
O ta o
ra ls
l
cl I
n
e I
10
n
SELECT *
FROM oldemp
B
OLDEMP
as L í
emp.dat
e
SQ Gu
de Fu de
Una tabla externa no describe ningún dato que esté almacenado en la base de datos. Tampoco
describe cómo se almacenan los datos en el origen externo. En realidad, describe cómo debe
at m u
presentar los datos al servidor el nivel de tabla externa. Corresponde al controlador de acceso
y al nivel de tabla externa realizar las transformaciones necesarias en los datos del archivo de
os e m
n
Es importante recordar que la descripción de los datos del origen de datos está separada de la
l
definición de la tabla externa. El archivo de origen puede contener más o menos campos que
cl I
el número de columnas de la tabla. Además, los tipos de datos del origen de datos pueden ser
n
diferentes a las columnas de la tabla. El controlador de acceso se asegura de que los datos del
e I
origen de datos se procesen para que coincidan con la definición de la tabla externa.
10
n
Resumen
Resumen
D da Al
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
at m u
metadatos se almacenan en la base de datos, pero cuyos datos se almacenan fuera de la base
a
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
O ta o
CREATE TABLE.
ra ls
l
cl I
n
e I
10
n
En esta práctica, utilizará el comando ALTER TABLE para modificar columnas y agregar
restricciones. Utilizará el comando CREATE INDEX para crear índices al crear una tabla,
at m u
junto con el comando CREATE TABLE. Creará tablas externas. Borrará columnas y utilizará
la operación FLASHBACK.
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 2
1. Cree la tabla DEPT2 basada en el siguiente gráfico de instancia de tabla. Guarde la
sintaxis en un archivo de comandos denominado lab02_01.sql y, a continuación,
ejecute la sentencia en el archivo de comandos para crear la tabla. Confirme que la tabla
se ha creado.
Column Name ID NAME
Key Type
Nulls/Unique
FK Table
FK Column
Data type NUMBER VARCHAR2
Length 7 25
2. Rellene la tabla DEPT2 con datos de la tabla DEPARTMENTS. Incluya sólo las
B
se ha creado.
SQ Gu
de Fu de
FK Table
at m u
FK Column
os e m
Length 7 25 25 7
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 2 (continuación)
4. Modifique la tabla EMP2 para permitir apellidos de empleado más largos. Confirme la
modificación.
5. Confirme que las tablas DEPT2 y EMP2 se han almacenado en el diccionario de datos.
(Indicación: USER_TABLES)
13. Agregue una restricción PRIMARY KEY de nivel de tabla a la tabla EMP2 en la
cl I
n
Práctica 2 (continuación)
14. Cree una restricción PRIMARY KEY a la tabla DEPT2 mediante la columna ID. Se
debe asignar un nombre a la restricción en el momento de la creación. Asigne a la
restricción 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 restricción 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.
19. Borre las tablas EMP2 y DEPT2 de forma que no se puedan restaurar. Verifique la
papelera de reciclaje.
e
Length 4 30
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
88
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
En esta lección aprenderá a manipular datos en la base de datos Oracle mediante subconsultas.
También recibirá información sobre sentencias de inserciones de varias tablas, la sentencia
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
Las subconsultas se pueden utilizar para recuperar datos de una tabla que podrá utilizar como
entrada en una inserción (INSERT) en una tabla diferente. Así, le resultará fácil copiar
at m u
grandes volúmenes de datos de una tabla a otra con una sola sentencia SELECT. De forma
parecida, puede utilizar subconsultas para realizar actualizaciones y supresiones masivas en la
os e m
n
cláusula WHERE de las sentencias UPDATE y DELETE. También puede utilizar subconsultas
a
en la cláusula FROM de una sentencia SELECT. Esto se conoce como vista en línea.
O ta o
ra ls
l
cl I
n
e I
10
n
4 rows created.
Puede utilizar sentencias INSERT para agregar filas a una tabla en la que los valores se
deriven de tablas existentes. En lugar de la cláusula VALUES, utilice una subconsulta.
at m u
Sintaxis
os e m
En la sintaxis:
table es el nombre de la tabla
O ta o
FROM employees;
Para obtener más información, consulte Oracle Database 10g SQL Reference.
n
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.
B
as L í
e
SQ Gu
de Fu de
Puede utilizar una subconsulta en lugar del nombre de tabla en la cláusula INTO de la
sentencia INSERT.
at m u
La lista de selección de esta subconsulta debe tener el mismo número de columnas que la lista
os e m
se deben seguir las reglas de las columnas de la tabla base. Por ejemplo, no se puede agregar
a
Esta aplicación de las subconsultas evita tener que crear una vista únicamente para realizar
ra ls
cl I
n
e I
10
n
…
B
as L í
e
SQ Gu
de Fu de
El ejemplo muestra los resultados de la subconsulta que se utilizó para identificar la tabla para
la sentencia INSERT.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
…
e
SQ Gu
de Fu de
Puede utilizar una subconsulta en la cláusula FROM de una sentencia SELECT, lo cual es muy
parecido al uso de las vistas. Una subconsulta en la cláusula FROM de una sentencia SELECT
at m u
se denomina también vista en línea. Una subconsulta en la cláusula FROM de una sentencia
SELECT define un origen de datos para una sentencia SELECT en particular y sólo para esa
os e m
n
sentencia SELECT. El ejemplo de la diapositiva muestra los apellidos de los empleados, los
a
salarios, los números de departamento y los salarios medios de todos los empleados que ganan
más que el salario medio en su departamento. La subconsulta de la cláusula FROM se
O ta o
denomina b y la consulta externa hace referencia a la columna SALAVG con este alias.
ra ls
l
cl I
n
e I
10
n
Para actualizar varias columnas en la cláusula SET de una sentencia UPDATE, puede escribir
varias subconsultas.
at m u
Sintaxis
os e m
UPDATE table
n
SET column =
a
(SELECT column
FROM table
O ta o
WHERE condition)
[ ,
ra ls
l
column =
(SELECT column
cl I
FROM table
n
WHERE condition)]
e I
[WHERE condition ] ;
Nota: Si no se actualiza ninguna fila, se devuelve el mensaje “0 rows updated”.
10
n
UPDATE empl3
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.
B
as L í
e
SQ Gu
de Fu de
Puede utilizar subconsultas en sentencias UPDATE para actualizar las filas de una tabla. El
ejemplo de la diapositiva actualiza la tabla EMPL3 basándose en los valores de la tabla
at m u
empleado 100.
a
O ta o
ra ls
l
cl I
n
e I
10
n
Puede utilizar subconsultas para suprimir filas de una tabla basándose en valores de otra tabla.
En el ejemplo de la diapositiva se suprimen todos los empleados que están en el departamento
at m u
principal, que suprime filas de datos de la tabla EMPLOYEES basándose en este número de
departamento.
O ta o
ra ls
l
cl I
n
e I
10
n
INSERT INTO
*
as L í
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
e
SQ Gu
de Fu de
Especifique WITH CHECK OPTION para indicar que, si se utiliza la subconsulta en lugar de
una tabla en una sentencia INSERT, UPDATE o DELETE, en esa tabla no se permiten
at m u
identifica filas que están en el departamento 50, pero el identificador de departamento no está
a
en la subconsulta.
ra ls
l
cl I
n
e I
10
n
un valor nulo.
os e m
La opción DEFAULT le ahorra tener que codificar el valor por defecto en los programas o
n
consultar el diccionario para encontrarlo, que es lo que se debía hacer antes de que se
a
introdujese esta función. Es problemático codificar el valor por defecto si éste cambia, porque
también habría que cambiar el código de forma consecuente. No se suele acceder al
O ta o
cl I
n
e I
10
n
En el primer ejemplo de la diapositiva, la sentencia INSERT utiliza un valor por defecto para
n
la columna MANAGER_ID. Si no hay ningún valor por defecto definido para la columna, se
a
Nota: Al crear una tabla, puede especificar un valor por defecto para una columna. Esto se
cl I
e I
10
n
Table_c
e
SQ Gu
de Fu de
En una sentencia INSERT de varias tablas, se insertan filas calculadas derivadas de las filas
devueltas de la evaluación de una subconsulta en una o más tablas.
at m u
Las sentencias INSERT de varias tablas pueden desempeñar un papel muy útil en el supuesto
os e m
de un almacén de datos. Debe cargar el almacén de datos con regularidad para que pueda
n
cumplir su propósito de facilitar el análisis de negocio. Para ello, se deben extraer y copiar
a
datos de uno o más sistemas operativos al almacén de datos. El proceso de extracción de datos
del sistema de origen y su transferencia al almacén de datos se suele denominar ETL (siglas
O ta o
Durante la extracción, se deben identificar y extraer los datos deseados de diferentes orígenes
l
como, por ejemplo, aplicaciones y sistemas de bases de datos. Después de la extracción, los
cl I
transformaciones se pueden realizar durante este proceso. Por ejemplo, una sentencia SQL
que acceda directamente a un destino remoto a través de un gateway puede concatenar dos
10
Una vez cargados los datos en la base de datos Oracle, las transformaciones de datos se
g
pueden ejecutar mediante operaciones SQL. Una sentencia INSERT de varias tablas es una de
las técnicas para implementar transformaciones de datos SQL.
Las sentencias INSERT de varias tablas ofrecen las ventajas de la sentencia INSERT ...
SELECT cuando hay varias tablas implicadas como destinos. Con la funcionalidad anterior a
at m u
la base de datos Oracle9i, era necesario tratar con n sentencias INSERT ... SELECT
independientes, procesando los mismos datos de origen n veces y aumentando la carga de
os e m
n
Como sucede con la sentencia INSERT ... SELECT existente, la nueva sentencia se puede
paralelizar y utilizar con el mecanismo de carga directa para obtener un rendimiento más
O ta o
rápido.
ra ls
Cada registro de cualquier flujo de entrada como, por ejemplo, una tabla de base de datos no
l
relacional, se puede convertir ahora en varios registros para un entorno de tabla de base de
cl I
datos más relacional. Para implementar esta funcionalidad de forma alternativa, había que
n
• INSERT de pivoting
a
Se utilizan diferentes cláusulas para indicar el tipo de inserción (INSERT) que se ejecutará.
O ta o
ra ls
l
cl I
n
e I
10
n
• Sintaxis
INSERT [ALL] [conditional_insert_clause]
[insert_into_clause values_clause] (subquery)
• conditional_insert_clause
[ALL] [FIRST]
[WHEN condition THEN] [insert_into_clause values_clause]
[ELSE] [insert_into_clause values_clause]
B
as L í
e
SQ Gu
de Fu de
La diapositiva muestra el formato genérico para las sentencias INSERT de varias tablas.
at m u
resultados de la evaluación de cualquier otra cláusula WHEN. Para cada cláusula WHEN cuya
condición se evalúe como verdadera, Oracle Server ejecuta la lista correspondiente de
n
cláusulas INTO.
destino.
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
FROM employees
as L í
restricciones a las filas que se recuperan mediante la sentencia SELECT. Todas las filas
l
la sentencia SELECT que se deben insertar en cada una de las tablas. Cada fila devuelta
e I
mediante la sentencia SELECT da como resultado dos inserciones, una para la tabla
SAL_HISTORY y una para la tabla MGR_HISTORY.
10
Se puede interpretar que el feedback 8 rows created significa que se realizó un total de
n
En la diapositiva se especifica la sentencia con un problema para una sentencia INSERT ALL
condicional. La solución a este problema se muestra en la página siguiente.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
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
as L í
e
SQ Gu
de Fu de
La sentencia INSERT se conoce como ALL INSERT condicional, ya que se aplica una
ra ls
restricción más a las filas que se recuperan mediante la sentencia SELECT. De las filas
l
recuperadas mediante la sentencia SELECT, sólo aquéllas en las que el valor de la columna
cl I
SAL sea mayor que 10000 se insertarán en la tabla SAL_HISTORY y, de forma parecida, sólo
n
las filas en las que el valor de la columna MGR sean mayor que 200 se insertarán en la tabla
e I
MGR_HISTORY.
Observe que, a diferencia del ejemplo anterior, en el que se insertaron ocho filas en las tablas,
10
Se puede interpretar que el feedback 4 rows created significa que se realizó un total de
g
O ta o
ra ls
l
cl I
n
e I
10
n
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
B
GROUP BY department_id;
as L í
8 rows created.
e
SQ Gu
de Fu de
El ejemplo de la diapositiva inserta filas en más de una tabla mediante una única sentencia
INSERT. La sentencia SELECT recupera los detalles de identificador de departamento,
at m u
excepción para los departamentos cuyo salario total sea mayor que 25.000 dólares. La
a
condición WHEN ALL > 25000 se evalúa en primer lugar. Si el salario total de un
departamento es mayor que 25.000 dólares, el registro se inserta en la tabla SPECIAL_SAL,
O ta o
como verdadera, Oracle Server ejecuta la cláusula INTO correspondiente y salta las cláusulas
l
Para las filas que no satisfacen la primera condición WHEN (WHEN SAL > 25000), el resto de
n
las condiciones se evalúa igual que una sentencia INSERT condicional y los registros
e I
columna HIREDATE.
Se puede interpretar que el feedback 8 rows created significa que se realizó un total de
n
INSERT de Pivoting
INSERT de Pivoting
D da Al
El pivoting es una operación en la que se debe crear una transformación tal que cada registro
de cualquier flujo de entrada como, por ejemplo, una tabla de base de datos no relacional, se
at m u
debe convertir en varios registros para un entorno de tablas de base de datos más relacional.
os e m
Para solucionar el problema que se menciona en la diapositiva, debe crear una transformación
n
tal que cada registro de la tabla de base de datos no relacional original, SALES_SOURCE_
a
DATA, se convierta en cinco registros para la tabla SALES_INFO del almacén de datos. Esta
operación se suele conocer como pivoting.
O ta o
cl I
n
e I
10
n
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
as L í
e
SQ Gu
de Fu de
representante de ventas cada día de la semana, durante una semana con un identificador de
semana en particular.
os e m
n
a
DESC SALES_SOURCE_DATA
O ta o
ra ls
l
cl I
n
e I
10
n
DESC SALES_INFO
Observe en el ejemplo anterior que mediante una inserción (INSERT) de pivoting, una fila de
as L í
O ta o
ra ls
l
cl I
n
e I
10
n
Sentencia MERGE
Sentencias MERGE
D da Al
Oracle Server soporta la sentencia MERGE para operaciones INSERT, UPDATE y DELETE.
Mediante esta sentencia, puede actualizar, insertar o suprimir una fila condicionalmente en
at m u
una tabla, con lo que se evitan varias sentencias DML. La decisión de actualizar, insertar o
suprimir en la tabla destino se basa en una condición de la cláusula ON.
os e m
n
Hay que tener privilegios de objeto INSERT y UPDATE en la tabla destino y el privilegio de
a
destino.
ra ls
MERGE, sin embargo, es fácil de utilizar y se expresa de forma más sencilla como una única
e I
sentencia SQL.
10
procedentes de varios orígenes, algunos de los cuales pueden estar duplicados. Con la
g
VALUES (column_values);
as L í
e
SQ Gu
de Fu de
Fusión de Filas
D da Al
En la sintaxis:
os e m
a insertar
a
Cláusula USING identifica el origen de los datos que se van a actualizar o insertar;
puede ser una tabla, una vista o una subconsulta
O ta o
de unión
cl I
Para obtener más información, consulte Oracle Database 10g SQL Reference, “MERGE”.
e I
10
n
Fusión de Filas
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
os e m
n
UPDATE SET
a
c.first_name = e.first_name,
c.last_name = e.last_name,
O ta o
c.email = e.email,
c.phone_number = e.phone_number,
ra ls
c.hire_date = e.hire_date,
l
c.job_id = e.job_id,
c.salary = e.salary,
cl I
n
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
e I
c.department_id = e.department_id
WHEN NOT MATCHED THEN
10
Fusión de Filas
TRUNCATE TABLE empl3;
SELECT *
FROM empl3;
no rows selected
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
...
WHEN NOT MATCHED THEN
INSERT VALUES...;
SELECT *
B
FROM empl3;
as L í
20 rows selected.
e
SQ Gu
de Fu de
está vacía, la condición devuelve false (no hay correspondencias). La lógica recae en la
cláusula WHEN NOT MATCHED y el comando MERGE inserta las filas de la tabla
O ta o
en las dos tablas (en las tablas EMPL3 y EMPLOYEES), las filas existentes en la tabla EMPL3
cl I
e I
10
n
SELECT
…
B
as L í
Puede suceder que, de algún modo, haya datos en la tabla que se hayan cambiado
incorrectamente. Para investigar esto, puede utilizar varias consultas de flashback para ver los
at m u
datos de filas en puntos concretos en el tiempo. Lo que es más eficaz, puede utilizar la
función Consulta de Versiones de Flashback para ver todos los cambios efectuados en una fila
os e m
durante un período de tiempo. Esta función le permite agregar una cláusula VERSIONS a una
n
sentencia SELECT que especifique un SCN o rango de registro de hora en el que desee ver
a
cambios en los valores de fila. La consulta también puede devolver metadatos asociados
como, por ejemplo, la transacción responsable del cambio.
O ta o
Es más, después de identificar una transacción errónea, puede utilizar la función Consulta de
Versiones de Flashback para identificar otros cambios que haya realizado la transacción.
ra ls
Puede utilizar entonces la función Consulta de Versiones de Flashback para restaurar la tabla
l
Puede utilizar una consulta en una tabla con una cláusula VERSIONS para producir todas las
n
versiones de todas las filas que existen o que hayan existido entre el momento en que se
e I
incluye una cláusula VERSIONS se conoce como consulta de versiones. Los resultados de
una consulta de versiones se comportan como si se hubiera aplicado la cláusula WHERE a las
n
versiones de las filas. La consulta de versiones devuelve versiones de las filas sólo en
g
transacciones.
SCN (número de cambio del sistema): Oracle Server asigna un SCN (número de cambio del
sistema) para identificar los registros de rehacer para cada transacción validada.
En el ejemplo de la diapositiva, se recupera el salario del empleado 107 (1). El salario del
empleado 107 se aumenta en un 30 por ciento y se valida el cambio (2). Se muestran las
at m u
en una tabla que utilice el método de acceso a índices, la misma consulta de la misma tabla con
a
una cláusula VERSIONS continúa utilizando el método de acceso a índices. Las versiones de
las filas devueltas por la consulta de versiones son versiones de las filas en las transacciones. La
O ta o
La cláusula VERSIONS es una extensión SQL únicamente para consultas. Puede tener
operaciones DML y DDL que utilicen una cláusula VERSIONS dentro de las subconsultas. La
10
consulta de versiones recupera todas las versiones validadas de las filas seleccionadas. Los
cambios realizados por la transacción activa actual no se devuelven. La consulta de versiones
n
recupera todas las encarnaciones de las filas. Esto significa en esencia que las versiones
devueltas incluyen las versiones suprimidas y subsiguientes reinsertadas de las filas.
O ta o
ra ls
l
cl I
n
e I
10
n
Puede utilizar la cláusula VERSIONS BETWEEN para recuperar todas las versiones de las
filas que existen o que han existido entre el momento en que se emitió la consulta y un punto
at m u
pasado en el tiempo.
os e m
momento de la consulta. El valor NULL para START_DATE para la última versión indica que
n
Resumen
En esta lección 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
– INSERT incondicional
– INSERT de pivoting
– ALL INSERT condicional
– FIRST INSERT condicional
• Fusionar filas en una tabla
B
Resumen
D da Al
En esta lección ha aprendido a manipular datos en la base de datos Oracle mediante subconsultas.
También ha recibido información sobre sentencias INSERT de varias tablas, la sentencia MERGE
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
En esta práctica, agregará filas a la tabla emp_data, actualizará y suprimirá datos de la tabla
y realizará un seguimiento de las transacciones.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 3
1. Ejecute el archivo de comandos lab_03_01.sql en la carpeta de prácticas para
crear la tabla SAL_HISTORY.
2. Muestre la estructura de la tabla SAL_HISTORY.
cl I
n
e I
10
n
Práctica 3 (continuación)
b. Muestre los registros de la tabla SPECIAL_SAL.
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 3 (continuación)
d. Muestre los registros de la tabla MGR_HISTORY.
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 3 (continuación)
8. a. Ejecute el archivo de comandos lab_03_08a.sql en la carpeta de prácticas
para crear la tabla SALES_SOURCE_DATA.
b. Ejecute el archivo de comandos lab_03_08b.sql en la carpeta de prácticas
para insertar registros en la tabla SALES_SOURCE_DATA.
c. Muestre la estructura de la tabla SALES_SOURCE_DATA.
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 3 (continuación)
g. Escriba una consulta para:
Recuperar los detalles de identificador de empleado, identificador de semana, ventas
el lunes, ventas el martes, ventas el miércoles, ventas el jueves y ventas el viernes
de la tabla SALES_SOURCE_DATA.
Crear tal transformación que cada registro recuperado de la tabla SALES_
SOURCE_DATA se convierta en varios registros para la tabla SALES_INFO.
Indicación: Utilice una sentencia INSERT de pivoting.
h. Muestre los registros de la tabla SALES_INFO.
b. Fusione los datos de la tabla EMP_DATA creada en la última práctica en los datos de
SQ Gu
la tabla EMP_HIST. Suponga que los datos de la tabla externa EMP_DATA son los
de Fu de
son idénticos.
os e m
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 3 (continuación)
…
B
as L í
e
SQ Gu
de Fu de
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
130
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
cl I
n
e I
10
n
• Ejemplo:
SELECT AVG(salary), STDDEV(salary),
COUNT(commission_pct),MAX(hire_date)
B
FROM employees
as L í
Funciones de Grupo
D da Al
Puede utilizar la cláusula GROUP BY para dividir las filas de una tabla en grupos. Puede
utilizar entonces las funciones de grupo para devolver información de resumen para cada
at m u
grupo. Las funciones de grupo pueden aparecer en listas de selección y en cláusulas ORDER
BY y HAVING. Oracle Server aplica las funciones de grupo a cada grupo de filas y devuelve
os e m
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
O ta o
VARIANCE operan sólo en valores numéricos. MAX y MIN pueden operar en valores de datos
numéricos, de carácter o de fecha. COUNT devuelve el número de filas no nulas para la
ra ls
contratación máxima para los empleados cuyo JOB_ID empiece por SA.
n
• 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
10
sustituir con un valor los valores nulos, utilice la función NVL. COUNT devuelve un
número o cero.
n
• Sintaxis:
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
• Ejemplo:
SELECT department_id, job_id, SUM(salary),
COUNT(employee_id)
B
FROM employees
GROUP BY department_id, job_id ;
as L í
e
SQ Gu
de Fu de
e I
10
n
Cláusula HAVING
D da Al
Se forman los grupos y se calculan las funciones de grupo antes de que se aplique la cláusula
HAVING a los grupos. La cláusula HAVING puede ir delante de la cláusula GROUP BY, pero
at m u
se recomienda colocar primero la cláusula GROUP BY, porque resulta más lógico.
os e m
2. Aplica las funciones de grupo a los grupos y muestra los grupos que cumplen los
criterios de la cláusula HAVING
O ta o
ra ls
l
cl I
n
e I
10
n
normales y las filas subtotales. La operación CUBE de la cláusula GROUP BY agrupa las filas
seleccionadas basándose en los valores de todas las combinaciones posibles de expresiones de
os e m
n
las especificaciones y devuelve una sola fila de información resumida para cada grupo. Puede
a
utilizar el operador CUBE para generar filas de valores derivados de varias tablas.
Nota: Al trabajar con ROLLUP y CUBE, asegúrese de que las columnas que vayan después de
O ta o
GROUP BY tengan relaciones significativas y reales entre sí, ya que, de lo contrario, los
ra ls
cl I
n
e I
10
n
Operador ROLLUP
Operador ROLLUP
D da Al
Nota
ra ls
BY) sin un operador ROLLUP, se deben enlazar n+1 sentencias SELECT con UNION
cl I
ALL. Esto hace que la ejecución de la consulta resulte ineficiente, ya que cada sentencia
n
SELECT provoca acceso a tablas. El operador ROLLUP recopila sus resultados con un
e I
solo acceso a tablas. El operador ROLLUP es útil cuando hay muchas columnas
implicadas en la generación de subtotales.
10
• Los subtotales y los totales se generan con ROLLUP. CUBE genera totales también, pero
n
2
B
3
as L í
e
SQ Gu
de Fu de
En el ejemplo de la diapositiva:
• Los salarios totales de todos los identificadores de puesto de un departamento para los
at m u
JOB_ID, 2 indica un grupo totalizado sólo por DEPARTMENT_ID y 3 indica la suma total.
l
El operador ROLLUP crea subtotales que acumulan desde el nivel más detallado hasta la suma
cl I
calcula los valores agregados estándar para los grupos especificados en la cláusula GROUP
e I
Operador CUBE
Operador CUBE
D da Al
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 sólo una
os e m
n
fracción de posibles combinaciones de subtotales, CUBE genera subtotales para todas las
a
El operador CUBE se utiliza con una función agregada para generar filas adicionales en un
juego de resultados. Las columnas incluidas en la cláusula GROUP BY son de referencia
ra ls
en la lista de selecciones se aplica a estos grupos para generar valores de resumen para las filas
cl I
De hecho, todas las posibles combinaciones de las columnas o las expresiones de la cláusula
GROUP BY se utilizan para generar superagregados. Si tiene n columnas o expresiones en la
10
3
B
as L í
4
e
SQ Gu
de Fu de
cuyo identificador es menor que 60) se muestra mediante la cláusula GROUP BY.
• Salario total de los departamentos cuyo identificador es menor que 60.
os e m
n
En este ejemplo, 1 indica la suma total. 2 indica las filas totalizadas sólo por JOB_ID. 3
indica algunas de las filas totalizadas por DEPARTMENT_ID y JOB_ID. 4 indica algunas
ra ls
El operador CUBE también ha realizado la operación ROLLUP para mostrar los subtotales de
cl I
los departamentos cuyo identificador es menor que 60 y el salario total de los de los
n
Además, el operador CUBE muestra el salario total de todos los puestos, independientemente
del departamento.
10
Nota: De forma parecida al operador ROLLUP, para generar subtotales en n dimensiones (es
n
decir, n columnas de la cláusula GROUP BY) sin un operador CUBE, se deben enlazar 2n
g
sentencias SELECT con UNION ALL. Así pues, un informe de tres dimensiones requiere que
se enlacen 23 = 8 sentencias SELECT con UNION ALL.
Función GROUPING
La función 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
B
[WHERE condition]
[GROUP BY [ROLLUP][CUBE] group_by_expression]
as L í
[HAVING having_expression]
[ORDER BY column];
e
SQ Gu
de Fu de
Función GROUPING
D da Al
La función GROUPING se puede utilizar con los operadores CUBE o ROLLUP para entender
mejor el modo en que se ha obtenido un valor de resumen.
at m u
La función GROUPING utiliza una sola columna como argumento. El valor de expr en la
función GROUPING se debe corresponder con una de las expresiones de la cláusula GROUP
os e m
estas posibilidades:
• Se ha utilizado la expresión para calcular el valor agregado.
10
Un valor de 1 devuelto por la función GROUPING basándose en una expresión indica una de
g
estas posibilidades:
• No se ha utilizado la expresión 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
Introducción a Oracle 10g: SQL Fundamentals II
1
2
B
as L í
3
e
SQ Gu
de Fu de
AD_ASST dentro del departamento 10. Para calcular este valor de resumen, se han tenido en
cuenta las columnas DEPARTMENT_ID y JOB_ID. Así pues, se devuelve un valor de 0 para
os e m
n
Observe el valor de resumen 4400 de la segunda fila (etiquetado como 2). Este valor es el
salario total del departamento 10 y se ha calculado teniendo en cuenta la columna
O ta o
En la última fila, observe el valor de resumen 54800 (etiquetado como 3). Es el salario total
e I
para los departamentos cuyo identificador es menor que 50 y todos los cargos. Para calcular
este valor de resumen, no se ha tenido en cuenta ninguna de las columnas DEPARTMENT_ID
10
GROUPING SETS
GROUPING SETS
D da Al
especificar varios agrupamientos (que también pueden incluir operadores ROLLUP o CUBE),
a
en lugar de varias sentencias SELECT combinadas mediante los operadores UNION ALL.
Por ejemplo:
O ta o
FROM employees
l
GROUP BY
GROUPING SETS
cl I
n
Sin esta función, se requieren varias consultas combinadas junto con UNION ALL para
g
O ta o
ra ls
l
cl I
n
e I
10
n
…
B
as L í
2
…
e
SQ Gu
de Fu de
Se calculan los salarios medios de cada uno de estos grupos. El juego de resultados muestra el
a
• El salario medio de todos los empleados con el identificador de puesto AD_MGR a las
cl I
• El salario medio de todos los empleados con el identificador de puesto FI_MGR del
departamento 100 es de 12000.
10
O ta o
ra ls
l
cl I
n
e I
10
n
Columnas Compuestas
Columnas Compuestas
D da Al
Una columna compuesta es una recopilación de columnas que se tratan como una unidad
durante el cálculo de agrupamientos. Especifique las columnas entre paréntesis como en la
at m u
siguiente sentencia:
ROLLUP (a, (b, c), d)
os e m
n
Aquí, (b, c) forma una columna compuesta y se trata como una unidad. Por lo general, las
a
columnas compuestas son útiles en ROLLUP, CUBE y GROUPING SETS. Por ejemplo, en
CUBE o ROLLUP, las columnas compuestas provocarían el salto de la agregación en
O ta o
determinados niveles.
Es decir, GROUP BY ROLLUP(a, (b, c))es equivalente a
ra ls
GROUP BY ()
n
Aquí, (b, c) se trata como una unidad y ROLLUP no se aplica en (b, c). Es como si se
e I
Nota: GROUP BY( ) normalmente es una sentencia SELECT con valores NULL para las
columnas a y b y sólo la función agregada. Esto se utiliza generalmente para generar sumas
n
totales.
g
GROUP BY c
SQ Gu
(La expresión GROUPING SETS tiene una columna GROUP BY b UNION ALL
compuesta). GROUP BY b, c
D da Al
cl I
n
e I
10
n
2
…
3
B
as L í
4
e
SQ Gu
de Fu de
Observe el ejemplo:
SELECT department_id, job_id,manager_id, SUM(salary)
at m u
FROM employees
GROUP BY ROLLUP( department_id,job_id, manager_id);
os e m
n
Esta consulta hace que Oracle Server calcule los siguientes agrupamientos:
a
1. (job_id, manager_id)
2. (department_id, job_id, manager_id)
O ta o
3. (department_id)
4. Suma total
ra ls
l
Si sólo le interesan grupos específicos, no puede limitar el cálculo a esos agrupamientos sin
utilizar columnas compuestas. Con las columnas compuestas, esto es posible si se trata las
cl I
n
columnas JOB_ID y MANAGER_ID como una unidad durante la acumulación. Las columnas
entre paréntesis se tratan como una unidad durante los cálculos ROLLUP y CUBE. Esto se
e I
paréntesis, le indica a Oracle Server que trate JOB_ID y MANAGER_ID como una unidad,
que es una columna compuesta.
n
FROM employees
as L í
GROUP BY ();
En ausencia de un optimizador que busque en los bloques de consulta para generar el plan de
ejecución, la consulta anterior necesitaría tres exploraciones de la tabla base, EMPLOYEES.
e
Esto podría resultar muy ineficiente. Por tanto, se recomienda utilizar columnas compuestas.
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Agrupamientos Concatenados
Columnas Concatenadas
D da Al
• Uso por las aplicaciones: El SQL generado por aplicaciones OLAP suele implicar la
concatenación de juegos de agrupamientos, en la que cada juego de agrupamientos
e I
2 …
…
3
…
4 5
B
as L í
e
SQ Gu
de Fu de
• (department_id,manager_id)(4)
a
• (department_id) (5)
Se calcula el salario total de cada uno de estos grupos.
O ta o
ra ls
l
cl I
n
e I
10
n
Resumen
diversos modos:
as L í
– Columnas compuestas
– Juegos de agrupamientos concatenados
e
SQ Gu
de Fu de
Resumen
D da Al
UNION ALL.
• Dentro de la cláusula GROUP BY, puede combinar expresiones de varias formas:-{}-
ra ls
de modo que Oracle Server las trate como una unidad al calcular operaciones
cl I
ROLLUP o CUBE.
n
En esta practica, utilizará los operadores ROLLUP y CUBE como extensiones de la cláusula
GROUP BY. Utilizará también GROUPING SETS.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 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 estén a las órdenes del mismo supervisor
- Salario total de esos supervisores
- Salario total de esos supervisores, independientemente de los identificadores de
puesto
B
as L í
…
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 4 (continuación)
2. Observe la salida de la pregunta 1. Escriba una consulta mediante la función
GROUPING para determinar si los valores NULL de las columnas correspondientes a
las expresiones GROUP BY los genera la operación ROLLUP.
…
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 4 (continuación)
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 estén 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
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 4 (continuación)
4. Observe la salida de la pregunta 3. Escriba una consulta mediante la función
GROUPING para determinar si los valores NULL en las columnas correspondientes a
las expresiones GROUP BY los genera la operación CUBE.
B
as L í
…
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 4 (continuación)
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.
…
B
as L í
…
e
SQ Gu
de Fu de
…
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
160
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
O ta o
ra ls
l
cl I
n
e I
10
n
Zonas Horarias
-08:00 +07:00
+02:00 +10:00
-05:00
B
12:00 en Greenwich.
e
SQ Gu
de Fu de
Zonas Horarias
D da Al
Las horas del día se miden según la rotación de la Tierra. La hora en cualquier momento
concreto depende del lugar en el que se esté. Cuando son las doce del mediodía en
at m u
Greenwich, Inglaterra, se conoce como Hora del Meridiano de Greenwich, o GMT. GMT es
a
el estándar horario que sirve de referencia al resto de zonas horarias del mundo. Es la misma
durante todo el año y no se ve afectada por el horario de invierno o de verano. El meridiano es
O ta o
una línea imaginaria que va del Polo Norte al Polo Sur. Se conoce como longitud cero y es la
línea a partir de la cual se miden todas las demás líneas de longitud. Todas las horas se miden
ra ls
l
en relación 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).
cl I
n
e I
10
n
La base de datos Oracle soporta el almacenamiento de la zona horaria en sus datos de fecha y
hora, además de en fracciones de segundo. El comando ALTER SESSION se puede utilizar
at m u
para cambiar los valores de zona horaria en una sesión de usuario. Los valores de zona horaria
se pueden definir en un offset absoluto, una zona horaria especificada, una zona horaria de
os e m
n
O ta o
ra ls
l
cl I
n
e I
10
n
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
– Devuelve el registro de hora actual de la sesión de
usuario
– Tiene un tipo de datos TIMESTAMP
B
as L í
e
SQ Gu
de Fu de
hora local y UTC. El tipo de datos TIMESTAMP WITH TIME ZONE tiene el formato:
TIMESTAMP [ (fractional_seconds_precision) ] WITH TIME ZONE
O ta o
dígitos de la parte fraccional del campo de fecha/hora SECOND y puede ser un número en el
l
Estas funciones son sensibles a NLS, es decir, los resultados estarán en los formatos de
n
CURRENT_DATE
CURRENT_DATE
D da Al
La máscara de formato ([+ | -] hh:mm) indica las horas y los minutos antes o después
l
de UTC (Hora Universal Coordinada, lo que antes se conocía como Hora del Meridiano
cl I
de Greenwich).
n
Observe en la salida que el valor de CURRENT_DATE cambia cuando el valor del parámetro
e I
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP
D da Al
desplazamiento de zona horaria refleja la hora local actual de la sesión SQL. La sintaxis de la
función CURRENT_TIMESTAMP es:
os e m
n
CURRENT_TIMESTAMP (precision)
a
segundo del valor horario devuelto. Si omite la precisión, el valor por defecto es 6.
El ejemplo de la diapositiva ilustra que CURRENT_TIMESTAMP es sensible a la zona horaria
ra ls
e I
10
n
LOCALTIMESTAMP
LOCALTIMESTAMP
D da Al
LOCAL_TIMESTAMP es:
os e m
LOCAL_TIMESTAMP (TIMESTAMP_precision)
n
a
cl I
n
e I
10
n
DBTIMEZONE y SESSIONTIMEZONE
DBTIMEZONE y SESSIONTIMEZONE
D da Al
El DBA define la zona horaria por defecto de la base de datos especificando la cláusula SET
TIME_ZONE de la sentencia CREATE DATABASE. Si se omite, la zona horaria por defecto de
at m u
la base de datos es la del sistema operativo. La zona horaria de la base de datos no se puede
cambiar para una sesión con una sentencia ALTER SESSION.
os e m
n
retorno es un offset de zona horaria (un tipo de carácter del formato '[+|-]TZH:TZM') o un
nombre de región de zona horaria, dependiendo de cómo haya especificado el usuario el valor de
O ta o
zona horaria de la base de datos en las sentencias CREATE DATABASE o ALTER DATABASE
ra ls
más recientes. El ejemplo de la diapositiva muestra que la zona horaria de la base de datos se
l
de retorno es un offset de zona horaria (un tipo de carácter del formato '[+|-]TZH:TZM') o un
nombre de región de zona horaria, dependiendo de cómo haya especificado el usuario el valor de
10
horas Observe que la zona horaria de la base de datos es diferente a la de la sesión actual.
– TIMESTAMP
[(fractional_seconds_precision)]_
as L í
El tipo de datos TIMESTAMP contiene los campos de fecha/hora YEAR, MONTH, DAY, HOUR,
MINUTE y SECOND, y fracciones de segundo.
at m u
El tipo de datos TIMESTAMP WITH TIME ZONE contiene los campos de fecha/hora
os e m
de segundo.
a
El tipo de datos TIMESTAMP WITH TIME ZONE contiene los campos de fecha/hora
O ta o
fraccional del campo de fecha/hora SECOND y puede ser un número del rango de 0 a 9. El
cl I
e I
10
n
TIMESTAMP (fractional_seconds_precision)
at m u
Este tipo de datos contiene los valores de fecha de año, mes y día, además de los valores
de hora, minuto y segundo, donde la precisión de fracciones de segundo es el número de
os e m
dígitos de la parte fraccional del campo de fecha/hora SECOND. Los valores aceptados de
n
defecto es 6.
O ta o
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
e I
base de datos.
10
• Cuando se recuperan los datos, los usuarios los ven en la zona horaria de la sesión.
n
Campos TIMESTAMP
Campos TIMESTAMP
D da Al
Cada tipo de datos de fecha/hora está compuesto por varios de estos campos. Las fechas/horas
son asignables y comparables mutuamente sólo si tienen los mismos campos de fecha/hora.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
…
as L í
…
e
SQ Gu
de Fu de
Nota: El tipo de datos de fecha de Oracle por defecto aparece como se muestra en el ejemplo.
e I
Sin embargo, el tipo de datos de fecha también contiene información adicional como horas,
minutos, segundos, a.m. y p.m. Para obtener la fecha en este formato, puede aplicar una
10
UTC son las siglas en inglés de Hora Universal Coordinada (lo que antes se conocía como
Hora del Meridiano de Greenwich). Dos valores TIMESTAMP WITH TIME ZONE se
at m u
es lo mismo que
TIMESTAMP '1999-04-15 11:00:00 -5:00'.
O ta o
Es decir, 8:00 a.m. Hora Oficial del Pacífico es lo mismo que 11:00 a.m. Hora Oficial
ra ls
Oriental.
l
e I
10
n
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
at m u
un pedido por Web (web_order). El registro de hora y la zona horaria del usuario que
realiza el pedido se inserta basándose en el valor de CURRENT_DATE. De este modo, una
os e m
n
compañía basada en Web garantiza el envío y puede estimar su tiempo de entrega basándose
a
cl I
n
e I
10
n
TIMESTAMP[(fractional_seconds_precision)]
as L í
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
at m u
desplazamiento de zona horaria es la diferencia (en horas y minutos) entre la hora local y
UTC. No hay ningún literal para TIMESTAMP WITH LOCAL TIME ZONE.
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
En el ejemplo de la diapositiva, se crea una nueva tabla, SHIPPING , con una columna del
tipo de datos TIMESTAMP WITH LOCAL TIME ZONE. Para rellenar esta tabla, se insertan
at m u
en ella dos días desde el valor CURRENT_TIMESTAMP cada vez que se realice un pedido. La
salida de la tabla DATE_TAB muestra que los datos se almacenan sin el offset de zona
os e m
n
horaria. El comando ALTER SESSION se emite para cambiar la zona horaria a la zona
a
horaria local del lugar de entrega. Una segunda consulta en la misma tabla refleja ahora los
datos con la zona horaria local reflejada en el valor de hora, de modo que se puede notificar al
O ta o
cl I
n
e I
10
n
Los tipos de datos INTERVAL se utilizan para almacenar la diferencia entre dos valores de
fecha/hora. Hay dos clases de intervalos: intervalos año-mes e intervalos día-hora. Un
at m u
El cualificador de intervalo también puede especificar la precisión del campo inicial, que es el
l
número de dígitos del campo inicial o único (que en caso del campo final es SECOND)
cl I
de la parte fraccional del valor SECOND. Si no se especifica, el valor por defecto para la
e I
precisión de campo inicial es de 2 dígitos y el valor por defecto para la precisión de fracciones
de segundo es de 6 dígitos
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Campos INTERVAL
Campos INTERVAL
D da Al
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
os e m
año-mes y los intervalos día-hora son asignables y comparables mutuamente sólo con otros
intervalos día-hora.
ra ls
l
cl I
n
e I
10
n
• 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
'0-3' assigned to INTERVAL YEAR TO MONTH
B
y 3 meses:
• INTERVAL '123-3' YEAR(3) TO MONTH
cl I
n
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
e I
insertan en ella valores diferentes para indicar años y meses para diversos productos. Cuando
g
se recuperan estas filas de la tabla, se ve que un valor de mes ha desplazado el valor de año
mediante un (-)
• Por ejemplo:
INTERVAL '6 03:30:16' DAY TO SECOND
Indicates an interval of 6 days 3 hours 30 minutes
and 16 seconds
cl I
n
e I
10
n
Tipo de Datos
INTERVAL DAY TO SECOND: Ejemplo
En el ejemplo anterior, está creando la tabla de prácticas con una columna test_time del
tipo de datos INTERVAL DAY TO SECOND. Inserte en ella a continuación el valor
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
EXTRACT
EXTRACT
D da Al
[TIMEZONE_HOUR] [TIMEZONE_MINUTE]
[TIMEZONE_REGION] [TIMEZONE_ABBR]
O ta o
realizar una extracción de una fecha/hora con un valor de zona horaria, el valor devuelto está
en UTC.
e I
para los empleados que están bajo las órdenes del supervisor cuyo EMPLOYEE_ID es 100.
g
TZ_OFFSET
TZ_OFFSET
D da Al
Por ejemplo, si la función 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
os e m
n
un nombre válido de zona horaria, un offset de zona horaria desde UTC (que simplemente se
a
Fold Motor Company tiene las oficinas centrales en Michigan, EE.UU., que está en la zona
horaria US/Eastern. El presidente de la compañía, Mr. Fold, desea realizar una conferencia
cl I
n
respectivamente. Mr. Fold quiere conocer la hora en cada uno de estos lugares para asegurarse
de que los supervisores senior podrán asistir a la reunión. Para ayudarle, su secretario, Mr.
10
Scott, emite las consultas que se muestran en el ejemplo y obtiene los siguientes resultados:
n
TZ_OFFSET (continuación)
Para obtener un listado de valores de nombres de zona horaria válidos, puede consultar la
vista de rendimiento dinámica V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;
B
as L í
e
…
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
TZD opcional. TZD es una cadena de zona horaria abreviada con información de horario de
verano. TZR representa la región de zona horaria en cadenas de entrada de fecha/hora.
ra ls
Pacífico/EE.UU. y 'PDT' para la hora en horario de verano del Pacífico/EE.UU., etc. Para
cl I
ver un listado de valores válidos para los elementos con formato TZR y TZD, consulte la vista
n
TIME ZONE.
n
FROM DUAL;
as L í
e
SQ Gu
de Fu de
TO_TIMESTAMP es:
TO_TIMESTAMP (char,[fmt],['nlsparam'])
os e m
n
El parámetro fmt opcional especifica el formato de char si se omite. La cadena debe estar
a
Si omite nlsparams, esta función utiliza el idioma de fecha por defecto para la sesión. El
l
NCHAR o NVARCHAR2 a un valor del tipo de datos TIMESTAMP WITH TIME ZONE. La
e I
El parámetro opcional fmt especifica el formato de char. Si se omite, una cadena debe
n
estar en el formato por defecto del tipo de datos TIMESTAMP WITH TIME ZONE. El
g
TO_YMINTERVAL (char)
donde char es la cadena de caracteres que se va a convertir.
ra ls
l
En el ejemplo de la diapositiva se calcula una fecha posterior en un año y dos meses a la fecha
de contratación del empleado que trabaja en el departamento 20 de la tabla EMPLOYEES.
cl I
n
un valor negativo. El ejemplo devuelve una fecha anterior en dos años y cuatro meses a
la fecha de contratación de los empleados que trabajan en el departamento 20 de la
tabla EMPLOYEES.
…
e
SQ Gu
de Fu de
TO_DSINTERVAL
D da Al
En el ejemplo anterior, se obtiene una fecha posterior en 100 días y 10 horas a la fecha
de contratación.
os e m
n
a
TO_YMINTERVAL
La función TO_YMINTERVAL convierte una cadena de caracteres de tipo de datos CHAR,
O ta o
de contratación.
SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') ytm
cl I
FROM employees;
n
e I
HIRE_DATE YTM
--------- ---------
10
17-JUN-87 17-AUG-88
21-SEP-89 21-NOV-90
n
13-JAN-93 13-MAR-94
03-JAN-90 03-MAR-91
g
21-MAY-91 21-JUL-92
…
Horario de Verano
La mayoría de las naciones occidentales adelanta el reloj una hora en los meses de verano.
Este período se denomina horario de verano. El horario de verano se extiende desde el primer
at m u
domingo de abril al último domingo de octubre en la mayor parte de Estados Unidos, México
y Canadá. Las naciones de la Unión Europea también utilizan el horario de verano. El horario
os e m
n
de verano de Europa comienza una semana antes que en Norteamérica, pero termina a la vez.
a
La base de datos Oracle determina automáticamente, para cualquier región de zona horaria, si
el horario de verano está en vigor y devuelve los valores de hora local de la manera
O ta o
determine si el horario de verano está en vigor en una región determinada en todos los casos,
l
excepto en la hora del cambio. La hora del cambio se produce durante el período en que el
cl I
horario de verano entra en vigor o deja de estar en vigor. Por ejemplo, en la región oriental de
n
EE.UU., cuando el horario de verano entra en vigor, la hora cambia de 01:59:59 a.m. a
e I
3:00:00 a.m. El intervalo de una hora entre 02:00:00 y 02:59:59 a.m. no existe. Cuando el
horario de verano deja de estar en vigor, la hora cambia de 02:00:00 a.m. a 01:00:01 a.m. y el
10
O ta o
ra ls
l
cl I
n
e I
10
n
Resumen
Resumen
D da Al
O ta o
ra ls
l
cl I
n
e I
10
n
EXTRACT.
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 5
1. Modifique la sesión 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
SESSIONTIMEZONE.
cl I
n
e I
10
n
Práctica 5 (continuación)
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
as L í
e
SQ Gu
de Fu de
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 5 (continuación)
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.
estado de revisión.
as L í
e
SQ Gu
de Fu de
D da Al
at m u
…
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 5 (continuación)
8. Cree una consulta para imprimir los apellidos y el número de años de servicio para
cada empleado. Si el empleado lleva contratado cinco años o más, imprima 5 years
of service. Si el empleado lleva contratado 10 años o más, imprima 10 years
of service. Si el empleado lleva contratado 15 años o más, 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.
Indicación: Utilice TO_YMINTERVAL y expresiones CASE.
…
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
200
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
En esta lección, aprenderá a escribir subconsultas de varias columnas, así como subconsultas
en la cláusula FROM de una sentencia SELECT. También aprenderá a solucionar problemas
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
Consulta principal
WHERE (MANAGER_ID, DEPARTMENT_ID) IN
Subconsulta
100 90
102 60
124 50
B
columnas.
e
SQ Gu
de Fu de
Hasta ahora, ha escrito subconsultas de una sola fila y subconsultas de varias filas en las que
sólo se devuelve una columna mediante la sentencia interna SELECT y esto se utiliza para
at m u
FROM table
l
FROM table
e I
WHERE condition);
El gráfico de la diapositiva ilustra que los valores de MANAGER_ID y DEPARTMENT_ID de
10
Comparaciones de Columnas
Las comparaciones de columnas en una subconsulta de varias columnas pueden ser entre
pares y entre no pares.
at m u
cláusula WHERE. Cada fila candidata de la sentencia SELECT debe tener las dos mismas
n
ó 174.
O ta o
Una subconsulta de varias columnas también puede ser una comparación entre no pares. En
una comparación entre no pares, cada columna de la cláusula WHERE de la sentencia SELECT
ra ls
SELECT interna. Las columnas individuales se pueden corresponder con cualquier valor
cl I
recuperado por la sentencia SELECT interna. Pero colectivamente, se deben satisfacer todas
n
las condiciones múltiples de la sentencia SELECT principal para que se muestre la fila. El
e I
mostrarán los registros de los empleados con EMPLOYEE_ID 199 ó 174. Ésta es la salida de
cl I
la consulta de la diapositiva:
n
e I
10
n
FROM employees
as L í
El ejemplo muestra una comparación entre no pares de las columnas. Muestra los valores de
EMPLOYEE_ID, MANAGER_ID y DEPARTMENT_ID de cualquier empleado cuyo
at m u
174 ó 199.
Primero, se ejecuta la subconsulta para recuperar los valores de MANAGER_ID para los
empleados con el valor de EMPLOYEE_ID 199 ó 174. De forma parecida, se ejecuta la
O ta o
segunda subconsulta para recuperar los valores de DEPARTMENT_ID para los empleados con
ra ls
de la diapositiva:
n
Una subconsulta que devuelve exactamente un valor de columna de una fila se conoce
también como subconsulta escalar. Las subconsultas de varias columnas que se escriben para
at m u
comparar dos o más columnas, mediante una cláusula WHERE compuesta y operadores
lógicos, no se califican como subconsultas escalares.
os e m
Sin embargo, las subconsultas escalares no son expresiones válidas en los siguientes casos:
• Como valores por defecto para columnas y expresiones de comprobación aleatoria para
e I
agrupamientos
• En la cláusula RETURNING de sentencias DML
10
• En cláusulas CONNECT BY
• En sentencias que no estén relacionadas con consultas como, por ejemplo, CREATE
PROFILE
El primer ejemplo de la diapositiva demuestra que las subconsultas escalares se pueden utilizar
en expresiones CASE. La consulta interna devuelve el valor 20, que es el identificador de
at m u
cl I
n
e I
10
n
…
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
sentencia principal. Las subconsultas correlacionadas se explican más adelante en esta lección.
l
cl I
n
e I
10
n
Subconsultas Correlacionadas
EJECUTE
consulta interna mediante valor de fila candidata
B
UTILICE
valores de la consulta interna para calificar o
as L í
Subconsultas Correlacionadas
D da Al
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
at m u
correlacionada se evalúa una vez para cada fila procesada por la sentencia principal. La
sentencia principal puede ser una sentencia SELECT, UPDATE o DELETE.
os e m
n
Con una subconsulta anidada normal, la consulta SELECT interna se ejecuta primero y una
vez, y devuelve valores que serán utilizados por la consulta principal. Sin embargo, una
O ta o
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
ra ls
l
externa.
cl I
• Utilice los valores resultantes de la consulta interna para calificar o descalificar la fila
g
candidata.
• Repita el proceso hasta que no queden filas candidatas.
Subconsultas Correlacionadas
Una subconsulta correlacionada es una forma de leer todas las filas de una tabla y comparar
los valores de cada fila con datos relacionados. Se utiliza siempre que una subconsulta deba
at m u
devolver un resultado o un juego de resultados diferente para cada fila candidata considerada
por la consulta principal. Dicho de otro modo, utilice una subconsulta correlacionada para
os e m
n
responder a una pregunta de varias partes cuya respuesta dependa del valor de cada fila
a
Nota: Puede utilizar los operadores ANY y ALL en una subconsulta correlacionada.
l
cl I
n
e I
10
n
externa, se evalúa la
as L í
consulta interna.
e
SQ Gu
de Fu de
El ejemplo de la diapositiva determina qué empleados ganan más que el salario medio de su
departamento. En este caso, la subconsulta correlacionada calcula específicamente el salario
at m u
alias no sólo hace que toda la sentencia SELECT resulte más legible, sino que sin él, la
consulta no funcionaría correctamente, ya que la sentencia interna no podría distinguir la
O ta o
cl I
n
e I
10
n
El ejemplo de la diapositiva muestra los detalles de los empleados que han cambiado de puesto
al menos dos veces. Oracle Server evalúa una subconsulta correlacionada de esta manera:
at m u
1. Seleccione una fila de la tabla especificada en la consulta externa. Ésta será la fila
candidata actual.
os e m
n
Operador EXISTS
D da Al
Con las sentencias SELECT anidadas, son válidos todos los operadores lógicos. Además,
puede utilizar el operador EXISTS. Este operador se utiliza frecuentemente con subconsultas
at m u
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
os e m
n
menos una fila, el operador devuelve TRUE. Si el valor no existe, devuelve FALSE. De forma
a
análoga, 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.
O ta o
ra ls
l
cl I
n
e I
10
n
mediante la condición:
WHERE manager_id = outer.employee_id.
os e m
n
Observe que la consulta SELECT interna no necesita devolver un valor específico, por lo que
a
cl I
n
e I
10
n
Solución Alternativa
at m u
Se puede utilizar una construcción NOT IN como alternativa para un operador NOT
EXISTS, como se muestra en el siguiente ejemplo:
os e m
FROM departments
WHERE department_id NOT IN(SELECT department_id
O ta o
FROM employees);
ra ls
l
cl I
Sin embargo, NOT IN se evalúa como FALSE si cualquier miembro del juego es un valor
n
NULL. Por tanto, la consulta no devolverá ninguna fila incluso aunque haya filas en la tabla
e I
O ta o
ra ls
l
cl I
n
e I
10
n
UPDATE empl6 e
SET department_name =
(SELECT department_name
FROM departments d
B
correlacionada.
A continuación, se muestra otro ejemplo para una actualización correlacionada.
os e m
n
La tabla REWARDS tiene una lista de empleados que han excedido las expectativas en su
O ta o
rendimiento. Utilice una subconsulta correlacionada para actualizar filas en la tabla EMPL6
basada en filas de la tabla REWARDS.
ra ls
UPDATE empl6
l
WHERE employee_id =
employees.employee_id
e I
AND payraise_date =
(SELECT MAX(payraise_date)
10
FROM rewards
WHERE employee_id = employees.employee_id))
n
WHERE employees.employee_id
g
O ta o
ra ls
l
cl I
n
e I
10
n
En el caso de una sentencia DELETE, puede utilizar una subconsulta correlacionada para
suprimir sólo las filas que también existen en otra tabla. Si decide que sólo va a mantener los
at m u
código ilustra cómo se puede realizar la operación anterior mediante una supresión (DELETE)
correlacionada:
O ta o
(SELECT employee_id
l
FROM employees E
cl I
AND START_DATE =
e I
(SELECT MIN(start_date)
FROM job_history JH
10
FROM job_history JH
g
Ejemplo
at m u
EMP_HISTORY contiene datos relacionados con empleados anteriores, por lo que sería
erróneo que el registro del mismo empleado existiera en las tablas EMPL6 y EMP_HISTORY.
O ta o
cl I
n
e I
10
n
Cláusula WITH
Cláusula WITH
D da Al
Mediante la cláusula WITH, puede definir un bloque de consulta antes de utilizarlo en una
consulta. La cláusula WITH (conocida formalmente como subquery_factoring_clause)
at m u
le permite reutilizar el mismo bloque de consulta en una sentencia SELECT cuando se produce
más de una vez dentro de una consulta compleja. Esto resulta particularmente útil cuando una
os e m
n
consulta tiene muchas referencias al mismo bloque de consulta y hay presentes uniones y
a
agregaciones.
Mediante la cláusula WITH, puede reutilizar la misma consulta cuando resulta caro evaluar el
O ta o
bloque de consulta y se produce más de una vez dentro de una consulta compleja. Mediante la
ra ls
cláusula WITH, Oracle Server recupera los resultados de un bloque de consulta y los almacena en
l
• Evalúa una cláusula sólo una vez, incluso aunque aparezca varias veces en la consulta
• En la mayoría de los casos puede mejorar el rendimiento para las consultas grandes
10
n
3. Compare el salario total calculado en el primer paso con el salario medio calculado en el
segundo paso. Si el salario total de un departamento en particular es mayor que el
O ta o
e I
10
n
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
B
FROM avg_cost)
ORDER BY department_name;
as L í
e
SQ Gu
de Fu de
tabla temporal. El optimizador selecciona la resolución adecuada según el costo o las ventajas
a
nombre de tabla.
• La cláusula WITH puede contener más de una consulta. Cada consulta se separa
entonces con una coma.
Resumen
Resumen
D da Al
Puede utilizar subconsultas de varias columnas para combinar varias condiciones WHERE en
una sola cláusula WHERE. Las comparaciones de columnas en una subconsulta de varias
at m u
Puede utilizar una subconsulta para definir una tabla en la que pueda operar una consulta que
n
la contenga.
a
cl I
n
e I
10
n
Resumen
Resumen (continuación)
D da Al
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
at m u
correlacionada se evalúa una vez para cada fila procesada por la sentencia principal. La
sentencia principal puede ser una sentencia SELECT, UPDATE o DELETE. Mediante la
os e m
n
cláusula WITH, puede reutilizar la misma consulta cuando resulta caro volver a evaluar el
a
bloque de consulta y se produce más de una vez dentro de una consulta compleja.
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 6
1. Escriba una consulta para mostrar el apellido, el número de departamento y el salario de
cualquier empleado cuyo número de departamento y salario se correspondan con el
número de departamento y el salario de cualquier empleado que gane una comisión.
…
2. Muestre el apellido, el nombre de departamento y el salario de cualquier empleado cuyo
salario y comisión se correspondan con el salario y la comisión de cualquier empleado
con el identificador de ubicación 1700.
…
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
3. Cree una consulta para mostrar el apellido, la fecha de contratación y el salario de todos
os e m
los empleados que tengan el mismo salario y la misma comisión que Kochhar.
n
a
4. Cree una consulta para mostrar los empleados que ganen un salario que sea más alto que
el salario de todos los supervisores de ventas (JOB_ID = 'SA_MAN'). Ordene los
cl I
n
Práctica 6 (continuación)
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 más 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
as L í
e
SQ Gu
de Fu de
…
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 6 (continuación)
7. Busque todos los empleados que no sean supervisores.
a. Hágalo primero mediante el operador NOT EXISTS.
…
B
b. ¿Esto se puede conseguir mediante el operador NOT IN? ¿Cómo o por qué no?
as L í
8. Escriba una consulta para mostrar los apellidos de los empleados que ganen menos que
e
O ta o
…
ra ls
l
cl I
n
e I
10
n
Práctica 6 (continuación)
9. Escriba una consulta para mostrar los apellidos de los empleados que tienen uno o más
colegas en su departamento con fechas de contratación posteriores pero salarios
más altos.
…
B
10. Escriba una consulta para mostrar los identificadores de empleado, los apellidos, y los
nombres de departamento de todos los empleados.
as L í
O ta o
ra ls
l
…
cl I
n
e I
10
n
Práctica 6 (continuación)
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
compañía. Utilice la cláusula WITH para escribir esta consulta. Asigne a la consulta el
nombre SUMMARY.
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Recuperación Jerárquica
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
232
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
En esta lección, aprenderá a utilizar consultas jerárquicas para crear informes en estructura
de árbol.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
…
B
as L í
e
SQ Gu
de Fu de
Mediante consultas jerárquicas, puede recuperar datos basándose en una relación jerárquica
natural entre filas de una tabla. Una base de datos relacional no almacena registros de forma
at m u
jerárquica. Sin embargo, si existe una relación jerárquica entre las filas de una sola tabla, un
proceso denominado desplazamiento por el árbol permite que se construya la jerarquía. Una
os e m
n
Imagine un árbol genealógico con los miembros mayores de la familia situados cerca de la
base o del tronco del árbol y los más jóvenes representados como ramas del árbol. Las ramas
O ta o
Una consulta jerárquica es posible cuando existe una relación entre filas en una tabla. Por
l
ST_MAN, SA_MAN y MK_MAN están bajo las órdenes directas del presidente de la compañía.
n
Fay
B
La tabla EMPLOYEES tiene una estructura de árbol que representa la línea de supervisores.
Para crear la jerarquía, se puede observar la relación entre valores equivalentes de las
at m u
del empleado.
a
e I
10
n
Consultas Jerárquicas
Condición WHERE:
expr comparison_operator expr
B
as L í
e
SQ Gu
de Fu de
Las consultas jerárquicas se pueden identificar por la presencia de las cláusulas CONNECT BY
y START WITH.
at m u
En la sintaxis:
SELECT Es la cláusula SELECT estándar
os e m
n
FROM table Especifica la tabla, la vista o la instantánea que contiene las columnas.
Puede seleccionar de una sola tabla.
ra ls
WHERE Restringe las filas devueltas por la consulta sin que afecte a otras filas de
l
la jerarquía.
cl I
START WITH Especifica las filas de raíz de la jerarquía (dónde comenzar). Esta
e I
La sentencia SELECT no puede contener una unión ni una consulta de una vista que contenga
una unión.
Punto de Partida
• Especifica la condición que se debe cumplir
• Acepta cualquier condición válida
START WITH column1 = value
La cláusula START WITH determina la fila o las filas que se deben utilizar como raíz
del árbol. La cláusula START WITH se puede utilizar en conjunción con cualquier
at m u
condición válida.
Ejemplos
os e m
n
a
Mediante la tabla EMPLOYEES, parta del empleado Kochhar. Una condición START WITH
puede contener una subconsulta.
ra ls
l
Si se omite la cláusula START WITH, el desplazamiento por el árbol parte de todas las filas
e I
de la tabla como filas de raíz. Si se utiliza una cláusula WHERE, el desplazamiento parte de
todas las filas que satisfacen la condición WHERE. Esto ya no refleja una jerarquía verdadera.
10
Nota: Las cláusulas CONNECT BY PRIOR y START WITH no son del estándar ANSI SQL.
n
Dirección
refiere a la fila principal. Para encontrar las filas secundarias de una fila principal, Oracle
Server evalúa la expresión PRIOR para la fila principal y las demás expresiones para cada fila
os e m
de la tabla. Las filas para las que la condición es verdadera son las filas secundarias de la
n
a
principal. Oracle Server selecciona siempre las filas secundarias evaluando la condición
CONNECT BY con respecto a una fila principal actual.
O ta o
Ejemplos
Desplácese de arriba abajo mediante la tabla EMPLOYEES. Defina una relación jerárquica en
ra ls
fila secundaria.
cl I
n
ejemplo anterior.
g
Ejemplo
os e m
MANAGER_ID, y los valores de SALARY son evaluados por las filas secundarias. El operador
PRIOR se aplica sólo al valor de EMPLOYEE_ID.
O ta o
Para calificarse como fila secundaria, una fila debe tener un valor de MANAGER_ID igual
l
15.000 dólares.
n
e I
10
n
…
as L í
e
SQ Gu
de Fu de
Desplazándose de arriba abajo, muestre los nombres de los empleados y su supervisor. Utilice
el empleado King como punto de partida. Imprima sólo una columna.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Nivel 1
raíz/principal
King
Nivel 3
Whalen Higgins Hunold Rajs Davies Matos Vargas principal/secundario/hoja
Fay
B
Nivel 4
hoja
e
SQ Gu
de Fu de
que salen una o varias ramas de una rama mayor se denominan nodos y el extremo de una
rama se denomina hoja, o nodo hoja. El diagrama de la diapositiva muestra los nodos del
os e m
n
árbol invertido con sus valores LEVEL. Por ejemplo, el empleado Higgins es principal y
a
Valor Nivel
1 Nodo raíz
ra ls
l
Zlotkey, Hartstein, Higgins y Hunold son secundarios y también principales (LEVEL = 2).
Whalen, Rajs, Davies, Matos, Vargas, Gietz, Ernst, Lorentz, Abel, Taylor, Grant y Fay son
10
cualquier nodo no raíz. Un nodo principal es cualquier nodo que tenga secundarios. Un nodo
hoja es cualquier nodo sin secundarios. El número de niveles devuelto por una consulta
jerárquica se puede ver limitado por la memoria de usuario disponible.
A los nodos de un árbol se les asignan números de niveles desde la raíz. Utilice la función
LPAD en conjunción con la pseudocolumna LEVEL para mostrar un informe jerárquico como
at m u
• LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')define el
formato de visualización.
ra ls
l
Dicho de otro modo, esto indica a SQL que tome LAST_NAME y lo rellene a la izquierda con
e I
el carácter '_' hasta que la longitud de la cadena resultante sea igual a los valores
determinados por LENGTH(last_name)+(LEVEL*2)-2.
10
Para King, LEVEL = 1. Por tanto, (2 * 1) – 2 = 2 – 2 = 0. Así pues, King no se rellena con
ningún carácter '_' y se muestra en la columna 1.
n
…
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Eliminación de Ramas
Gietz Gietz
e
SQ Gu
de Fu de
Eliminación de Ramas
D da Al
Puede utilizar las cláusulas 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
at m u
condición booleana.
Ejemplos
os e m
n
Partiendo de la raíz, desplácese de arriba abajo y elimine el empleado Higgins del resultado,
a
FROM employees
WHERE last_name != 'Higgins'
ra ls
Partiendo de la raíz, desplácese de arriba abajo y elimine el empleado Higgins del resultado y
n
Resumen
Resumen
D da Al
Puede utilizar consultas jerárquicas para recuperar datos basándose en una relación jerárquica
natural entre filas de una tabla. La pseudocolumna LEVEL cuenta lo lejos que se ha
at m u
la cláusula START WITH. Puede utilizar las cláusulas WHERE y CONNECT BY para eliminar
a
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 7
1. Observe los siguientes ejemplos de salida. ¿Son resultado de una consulta jerárquica?
Explique por qué o por qué no.
Imagen 1:
…
B
as L í
e
SQ Gu
de Fu de
Imagen 2:
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 7 (continuación)
Imagen 3:
3. Cree un informe que muestre la jerarquía de los supervisores del empleado Lorentz.
de Fu de
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 7 (continuación)
4. Cree un informe con sangrado que muestre la jerarquía 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
as L í
Parta de la persona de nivel más alto, excluya a todas las personas con el identificador
de Fu de
de puesto IT_PROG, a De Haan y a los empleados que estén a las órdenes de De Haan.
D da Al
at m u
os e m
n
a
…
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
250
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
O ta o
ra ls
l
cl I
n
e I
10
n
ABC
y manipulación normales
e
SQ Gu
de Fu de
Oracle amplían las capacidades de correspondencia de los operadores más allá del estándar
a
POSIX. Las expresiones normales son un método para describir patrones sencillos y
complejos de búsqueda y manipulación.
O ta o
aplicación basada en la Web. El uso va desde la simple búsqueda de las palabras “San
l
direcciones URL del texto, hasta la búsqueda más compleja de todas las palabras cuyo
n
Si se une al SQL nativo, el uso de expresiones normales permite operaciones muy potentes de
búsqueda y de manipulación de cualquier dato almacenado en una base de datos Oracle.
10
Puede utilizar esta función para solucionar fácilmente problemas que de otro modo resultarían
muy complejos de programar.
n
Metacaracteres
Símbolo Descripción
* Se corresponde con cero o más incidencias
| Operador de modificación para especificar correspondencias alternativas
^/$ Se corresponde con el inicio de línea/fin de línea
[] Expresión entre corchetes para una lista de correspondencia que se corresponde
con cualquiera de las expresiones representadas en la lista
{m} Se corresponde exactamente m veces
{m,n} Se corresponde al menos m veces pero no más de n veces
[: :] Especifica una clase de carácter y se corresponde con cualquier carácter de
esa clase
\ Puede tener 4 significados diferentes: 1. Se representa a sí mismo. 2. Presenta el
siguiente carácter. 3. Introduce un operador. 4. No hace nada.
+ Se corresponde con una o más incidencias
? Se corresponde con cero o una incidencia
. Se corresponde con cualquier carácter del juego de caracteres soportado,
excepto NULL
() Expresión de agrupamiento, que se trata como subexpresión única
B
Metacaracteres
D da Al
Los metacaracteres son caracteres especiales que tienen un significado especial como, por
ejemplo, un comodín, un carácter de repetición, un carácter de no correspondencia o un rango
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
Uso de Metacaracteres
Problem: Find 'abc' within a string:
Solution: 'abc' 1
Matches: abc
Does not match: 'def'
Problem: To find 'a' followed by any character, followed
by 'c'
Meta Character: any character is defined by '.'
Solution: 'a.c'
Matches: abc
2
Matches: adc
Matches: alc
Matches: a&c
Does not match: abb
Problem: To find one or more occurrences of 'a'
Meta Character: Use'+' sign to match one or more of the
previous characters
3
B
Solution: 'a+'
Matches: a
as L í
Matches: aa
Does not match: bbb
e
SQ Gu
de Fu de
Uso de Metacaracteres
D da Al
aquí para indicar una correspondencia de uno o más de los caracteres anteriores.
a
Puede buscar también listas de caracteres sin correspondencia. Una lista de caracteres sin
correspondencia le permite definir un juego de caracteres para los que una correspondencia no
O ta o
es válida. Por ejemplo, para buscar cualquier cosa menos los caracteres “a,” “b” o “c”, puede
definir “^” para indicar una no correspondencia.
ra ls
l
Expression: [^abc]
cl I
Matches: abcdef
n
Matches: ghi
e I
Expression: [^a-i]
n
Matches: hijk
g
Matches: lmn
Does not match: abcdefghi
agrupamiento
at m u
de una línea.
l
de una línea.
e I
especificada.
n
correspondencia
e
SQ Gu
de Fu de
La base de datos Oracle 10g proporciona un juego de funciones SQL que se pueden utilizar
para buscar y manipular cadenas mediante expresiones normales. Puede utilizar estas
at m u
funciones en cualquier tipo de datos que contenga datos de caracteres como, por ejemplo,
CHAR, NCHAR, CLOB, NCLOB, NVARCHAR2 y VARCHAR2. Una expresión normal debe ir
os e m
n
entre comillas simples. Esto asegura que toda la expresión sea interpretada por la función
a
función en la cláusula WHERE de una consulta para devolver las filas que se correspondan con
ra ls
patrón de expresión normal. Hay que especificar qué incidencia se desea buscar y la posición
inicial desde la que buscar. Esta función devuelve un entero que indica la posición en la
10
return_option
l
carácter
“m” —trata la cadena de origen como varias líneas
Ejemplo de REGEXP_LIKE
D da Al
En esta consulta, en la tabla EMPLOYEES, se muestran todos los empleados cuyos nombres
contienen Steven o Stephen. En la expresión utilizada,
at m u
'^Ste(v|ph)en$' :
• ^ indica el inicio de la sentencia
os e m
n
• | indica o bien/o
O ta o
ra ls
l
cl I
n
e I
10
n
SELECT street_address,
REGEXP_INSTR(street_address,'[^[:alpha:]]')
FROM locations
WHERE
REGEXP_INSTR(street_address,'[^[:alpha:]]')> 1;
B
as L í
e
SQ Gu
de Fu de
En este ejemplo, la función REGEXP_INSTR se utiliza para buscar la calle con el fin de
encontrar la ubicación del primer carácter no alfabético, independientemente de si está en
at m u
mayúsculas o minúsculas. La búsqueda se realiza sólo en las calles que no empiecen por un
número. Observe que [:<class>:] implica una clase de carácter y se corresponde con
os e m
n
cualquier carácter de esa clase; [:alpha:] se corresponde con cualquier carácter alfabético.
a
• [ inicia la expresión
ra ls
• ^ indica NO
l
• ] finaliza la expresión
n
Nota: El operador de clase de carácter POSIX le permite buscar una expresión dentro de una
e I
lista de caracteres que sea miembro de una clase de carácter POSIX específica. Puede utilizar
este operador para buscar un formato específico como, por ejemplo, caracteres en mayúscula, o
10
bien puede buscar caracteres especiales como, por ejemplo, dígitos o caracteres de puntuación.
Se soporta todo el juego de clases de carácter POSIX. Utilice la sintaxis [:class:] donde class es
n
el nombre de la clase de carácter POSIX que se debe buscar. Las siguientes expresiones
normales buscan uno o más caracteres consecutivos en mayúsculas: [[:upper:]]+.
…
B
as L í
e
SQ Gu
de Fu de
En este ejemplo, los nombres de calle se extraen de la tabla LOCATIONS. Para ello, se
devuelve el contenido de la columna STREET_ADDRESS que está antes del primer espacio
at m u
• ^ indica NO
a
• indica espacio
• ] finaliza la expresión
O ta o
• + indica 1 o más
• indica espacio
ra ls
l
cl I
n
e I
10
n
Sustitución de Patrones
…
B
as L í
e
SQ Gu
de Fu de
Sustitución de Patrones
D da Al
resultados.
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Expresiones Normales y
Restricciones de Control
Esto asegurará que sólo se acepten las cadenas que contienen un símbolo “@”. Se prueba la
restricción. La restricción de control se viola porque la dirección de correo electrónico no
os e m
n
datos existentes.
O ta o
ra ls
l
cl I
n
e I
10
n
Resumen
Resumen
D da Al
En esta lección, ha aprendido a utilizar las funciones de soporte de expresiones normales que
se han introducido en la base de datos Oracle 10g.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 8
1. Escriba una consulta para buscar en la tabla EMPLOYEES todos los empleados cuyos
nombres empiecen por “Ne” o “Na”.
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 8 (continuación)
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 sólo las filas que se vean afectadas.
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
____________________________
Apéndice A
Soluciones a la Práctica
____________________________
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
268
Introducción a Oracle 10g: SQL Fundamentals II
Práctica 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 dirección URL en formato http://machinename:5561/isqlplus/ y
utilice la cuenta oraxx y la contraseña 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
3. Si crea una tabla, ¿quién 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é debería utilizar para facilitar el trabajo?
B
Crear un rol que contenga los privilegios del sistema y otorgar el rol a los
usuarios.
as L í
ON departments
TO <user1>;
os e m
n
GRANT select
ON departments
O ta o
TO <user2>;
ra ls
l
e I
SELECT *
FROM departments;
10
n
10. Consulte todas las filas de la tabla DEPARTMENTS del otro equipo mediante el
e
sinónimo.
SQ Gu
de Fu de
FROM team1;
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
12. Consulte la vista de diccionario de datos ALL_TABLES para ver información 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';
ON departments
FROM <oraxx>;
e
SQ Gu
de Fu de
14. Elimine la fila que insertó en la tabla DEPARTMENTS en el paso 8 y guarde los
cambios.
D da Al
cl I
n
e I
10
n
Práctica 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
continuación, ejecute la sentencia en el archivo de comandos para crear la tabla.
Confirme que la tabla se ha creado.
name VARCHAR2(25));
as L í
DESCRIBE dept2
e
2. Rellene la tabla DEPT2 con datos de la tabla DEPARTMENTS. Incluya sólo las
SQ Gu
FROM departments;
at m u
cl I
n
e I
10
n
DESCRIBE emp2
4. Modifique la tabla EMP2 para permitir apellidos de empleado más largos. Confirme
la modificación.
ALTER TABLE emp2
MODIFY (last_name VARCHAR2(50));
DESCRIBE emp2
SELECT table_name
FROM user_tables
e
FROM employees;
ra ls
l
DESCRIBE employees2
B
as L í
DESCRIBE employees2
D da Al
DESCRIBE employees2
ra ls
l
cl I
n
e I
10
n
14. Cree una restricción PRIMARY KEY a la tabla DEPT2 mediante la columna ID. Se
debe asignar un nombre a la restricción en el momento de la creación. Asigne a la
restricción 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 restricción el nombre
my_emp_dept_id_fk.
16. Confirme que las restricciones se han agregado consultando la vista USER_
CONSTRAINTS.
e
17. Muestre los tipos y los nombres de objeto de la vista del diccionario de datos
at m u
USER_OBJECTS para las tablas EMP2 y DEPT2. Observe que se han creado tablas
nuevas y un nuevo índice.
os e m
n
a
18. Modifique la tabla EMP2. Agregue una columna COMISSION de tipo de datos
n
(deptno NUMBER(4)
PRIMARY KEY USING INDEX
e
dname VARCHAR2(30));
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 3: Soluciones
1. Ejecute el archivo de comandos lab_03_01.sql en la carpeta de prácticas para
crear la tabla SAL_HISTORY.
DESC sal_history
DESC mgr_history
DESC special_sal
e
O ta o
INSERT ALL
WHEN SAL > 20000 THEN
ra ls
ELSE
cl I
DESC sales_source_data
D da Al
at m u
DESC sales_info
e I
10
n
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;
B
lab_03_09.sql.
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
EMP_HIST.
as L í
los más actualizados. Si una fila de la tabla EMP_DATA se corresponde con la tabla
SQ Gu
son idénticos.
at m u
ON (f.first_name = h.first_name
a
INSERT (f.first_name
l
, f.last_name
, f.email)
cl I
n
VALUES (h.first_name
, h.last_name
e I
, h.email);
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 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 estén 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);
sum(salary),GROUPING(manager_id),GROUPING(job_id)
FROM employees
as L í
3. Escriba una consulta para mostrar lo siguiente para los empleados cuyo identificador
de Fu de
e I
10
n
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.
GROUP BY
GROUPING SETS ((department_id, manager_id, job_id),
as L í
(department_id, job_id),(manager_id,job_id));
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 5: Soluciones
1. Modifique la sesión 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
SELECT TZ_OFFSET ('US/Pacific-New') from dual;
Singapore
SELECT TZ_OFFSET ('Singapore') from dual;
Egypt
SELECT TZ_OFFSET ('Egypt') from dual;
e I
10
n
SELECT DBTIMEZONE,SESSIONTIMEZONE
FROM DUAL;
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 número de años de servicio para
cada empleado. Si el empleado lleva contratado cinco años o más, imprima 5 years
of service. Si el empleado lleva contratado 10 años o más, imprima 10 years
of service. Si el empleado lleva contratado 15 años o más, imprima 15 years
of service. Si no se cumple ninguna de estas condiciones, imprima maybe
B
next year!. Ordene los resultados por la columna HIRE_DATE. Utilice la tabla
EMPLOYEES.
as L í
(CASE
WHEN (sysdate -TO_YMINTERVAL('15-0'))>=
hire_date THEN '15 years of service'
D da Al
hire_date
a
END) AS "Awards"
FROM employees e;
ra ls
l
cl I
n
e I
10
n
Práctica 6: Soluciones
1. Escriba una consulta para mostrar el apellido, el número de departamento y el salario
de cualquier empleado cuyo número de departamento y salario se correspondan con el
número de departamento y el salario de cualquier empleado que gane una comisión.
todos los empleados que tengan el mismo salario y la misma comisión que Kochhar.
de Fu de
FROM employees
WHERE (salary, NVL(commission_pct,0)) IN
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
FROM locations
as L í
6. Escriba una consulta para buscar todos los empleados que ganen más que el salario
medio de su departamento. Muestre el apellido, el salario, el identificador de
SQ Gu
de Fu 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.
D da Al
ORDER BY AVG(a.salary);
cl I
n
e I
10
n
SELECT outer.last_name
FROM employees outer
WHERE NOT EXISTS (SELECT 'X'
FROM employees inner
WHERE inner.manager_id =
outer.employee_id);
b. ¿Esto se puede conseguir mediante el operador NOT IN? ¿Cómo o por qué no?
SELECT outer.last_name
FROM employees outer
WHERE outer.employee_id
NOT IN (SELECT inner.manager_id
FROM employees inner);
B
Esta solución alternativa no es adecuada. La subconsulta selecciona un valor NULL, así que
as L í
toda la consulta no devuelve ninguna fila. El motivo es que todas las condiciones que
comparan un valor NULL dan como resultado un valor NULL. Siempre que sea probable
e
que haya valores NULL que formen parte del juego de valores, no utilice NOT IN como
sustituto de NOT EXISTS.
SQ Gu
de Fu de
8. Escriba una consulta para mostrar los apellidos de los empleados que ganen menos
que el salario medio en sus departamentos.
D da Al
SELECT last_name
at m u
WHERE inner.department_id
= outer.department_id);
O ta o
ra ls
l
cl I
n
e I
10
n
SELECT last_name
FROM employees outer
WHERE EXISTS (SELECT 'X'
FROM employees inner
WHERE inner.department_id =
outer.department_id
AND inner.hire_date > outer.hire_date
AND inner.salary > outer.salary);
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.
(SELECT department_name
as L í
FROM departments d
WHERE e.department_id =
e
d.department_id ) department
FROM employees e
SQ Gu
de Fu de
ORDER BY department;
11. Escriba una consulta para mostrar los nombres de departamento de los departamentos
D da Al
cuyo costo de salario total supere un octavo (1/8) del costo de salario total de toda la
compañía. Utilice la cláusula WITH para escribir esta consulta. Asigne a la consulta el
at m u
nombre SUMMARY.
os e m
n
WITH
a
summary AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
O ta o
GROUP BY d.department_name)
cl I
FROM summary
e I
Práctica 7: Soluciones
1. Observe los siguientes ejemplos de salida. ¿Son resultado de una consulta jerárquica?
Explique por qué o por qué no.
Imagen 1: No es una consulta jerárquica; el informe simplemente se
clasifica en orden descendente por SALARY.
3. Cree un informe que muestre la jerarquía de los supervisores del empleado Lorentz.
Muestre primero el supervisor inmediato.
as L í
SELECT last_name
FROM employees
e
4. Cree un informe con sangrado que muestre la jerarquía de supervisores partiendo del
empleado cuyo LAST_NAME es Kochhar. Imprima el apellido del empleado, el
at m u
2,'_')
name,manager_id mgr, department_id deptno
ra ls
l
FROM employees
START WITH last_name = 'Kochhar'
cl I
n
/
COLUMN name CLEAR
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
Práctica 8: Soluciones
1. Escriba una consulta para buscar en la tabla EMPLOYEES todos los empleados cuyos
nombres empiecen por “Ne” o “Na”.
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 sólo las filas que se vean afectadas.
O ta o
ra ls
l
cl I
n
e I
10
n
_____________________
Apéndice B
Descripciones de
Tablas y Datos
_____________________
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
294
Introducción a Oracle 10g: SQL Fundamentals II
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla REGIONS
DESCRIBE regions
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla COUNTRIES
DESCRIBE countries
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla LOCATIONS
DESCRIBE locations;
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla DEPARTMENTS
DESCRIBE departments
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla JOBS
DESCRIBE jobs
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla EMPLOYEES
DESCRIBE employees
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla EMPLOYEES
Las cabeceras de las columnas COMMISSION_PCT, MANAGER_ID y DEPARTMENT_ID
están 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 página.
SELECT * FROM employees;
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Tabla JOB_HISTORY
DESCRIBE job_history
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
308
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
Objetivos
D da Al
En este apéndice, aprenderá a escribir un archivo de comandos SQL para generar un archivo
de comandos SQL.
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
los casos, esto implica la escritura de un archivo de comandos. Puede utilizar SQL desde
SQL para:
at m u
información sobre la base de datos. Oracle Server crea y mantiene esta recopilación. Todas las
tablas de diccionario de datos son propiedad del usuario SYS. La información almacenada en
ra ls
l
categoría tiene prefijos distintos que reflejan el uso para el que se ha concebido.
e I
Prefijo Descripción
10
DBA_ Contiene detalles de usuarios con privilegios DBA para acceder a cualquier objeto de la base de datos
V$_ Información almacenada sobre rendimiento y bloqueo de servidor de bases de datos; sólo disponible
para el DBA
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II C-3
310
Introducción a Oracle 10g: SQL Fundamentals II
la sintaxis para crear una tabla mediante el nombre de tabla con el sufijo _test y sólo con la
estructura de la tabla existente correspondiente. El nombre de tabla antiguo se obtiene a partir
os e m
n
Nota: Puede consultar las tablas de diccionario de datos para ver varios objetos de base de
datos de su propiedad. Las vistas de diccionario de datos utilizadas con frecuencia son:
ra ls
usuario
e I
SPOOL dropem.sql
SENTENCIA SQL
SPOOL OFF
SET FEEDBACK ON
SET PAGESIZE 24 Vuelva a definir las
B
Para ejecutar las sentencias SQL que se generan, las debe capturar en un archivo de spool que
se puede ejecutar a continuación. También debe planificar una limpieza de la salida que se
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
La Imagen Completa
SET FEEDBACK ON
SET PAGESIZE 24
B
SET ECHO ON
as L í
e
SQ Gu
de Fu de
La Imagen Completa
D da Al
Este archivo ya se puede iniciar desde iSQL*Plus. Para ello, localice el archivo de comandos,
cárguelo y ejecútelo.
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
Nota: Por defecto, los archivos se envían a la cola de espera a la carpeta ORACLE_HOME\
ORANT\BIN en Windows NT.
n
SELECT
'INSERT INTO departments_test VALUES
(' || department_id || ', ''' || department_name ||
''', ''' || location_id || ''');'
AS "Insert Statements Script"
FROM departments
/
B
SET PAGESIZE 24
as L í
A veces, resulta útil disponer de los valores para las filas de una tabla en un archivo de texto
en el formato de una sentencia INSERT INTO VALUES. Este archivo de comandos se
at m u
puede ejecutar para rellenar la tabla en caso de que se haya borrado dicha tabla por accidente.
os e m
Origen Resultado
'''X''' 'X'
'''' '
''''||department_name||'''' 'Administration'
''');' ');
B
as L í
e
SQ Gu
de Fu de
simple en la sentencia final. Además, recuerde que los valores de caracteres y de fecha deben
ir entre comillas.
os e m
n
Dentro de una cadena, para mostrar una comilla simple, le debe poner como prefijo otra
a
comilla simple. Por ejemplo, en el quinto ejemplo de la diapositiva, las comillas son para toda
la cadena. La segunda comilla actúa como prefijo para mostrar la tercera comilla. Así, el
O ta o
resultado es una comilla simple seguida del paréntesis y seguido del punto y coma.
ra ls
l
cl I
n
e I
10
n
El ejemplo de la diapositiva genera una sentencia SELECT que recupera datos de todos los
empleados de un departamento que se contrataron un día específico. El archivo de comandos
at m u
Nota: Una vez volcada la variable de usuario, debe utilizar el comando UNDEFINE para
n
suprimirlo.
a
DECODE la considera nula y la cláusula WHERE dinámica que se genera será también nula, lo
l
que hace que la segunda sentencia SELECT recupere todas las filas de la tabla EMPLOYEES.
cl I
para mostrar valores de columna o la fecha en el título superior. Debe incluir la columna en
un comando BREAK con la acción SKIP PAGE. El nombre de variable no puede contener
10
una almohadilla (#). NEW_VALUE resulta útil para informes maestro/detalle en los que hay un
n
O ta o
ra ls
cl I
n
e I
10
n
Resumen
Resumen
D da Al
SQL se puede utilizar para generar archivos de comandos SQL. Estos archivos de comandos
se pueden utilizar para evitar una codificación repetida, borrar o volver a crear objetos,
at m u
obtener ayuda del diccionario de datos y generar predicados dinámicos que contengan
parámetros de tiempo de ejecución.
os e m
n
Se pueden utilizar comandos de iSQL*Plus para capturar los informes generados por las
a
sentencias SQL y limpiar la salida que se genera como, por ejemplo, mediante la supresión de
cabeceras, mensajes de feedback, etc.
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
O ta o
ra ls
l
cl I
n
e I
10
n
320
Introducción a Oracle 10g: SQL Fundamentals II
Objetivos
– Validaciones
as L í
e
SQ Gu
de Fu de
Objetivos
D da Al
En este apéndice se presenta la arquitectura de Oracle Server. Para ello, se describen las
estructuras de archivos, procesos y memoria implicados en el establecimiento de una
at m u
O ta o
ra ls
l
cl I
n
e I
10
n
- Archivos redo log que tienen información necesaria para la recuperación de la base
a
de datos
- Archivos de datos, donde se almacenan todos los datos
O ta o
- Archivo de parámetros, que contiene los parámetros que controlan el tamaño y las
propiedades de una instancia
ra ls
l
Archivos de control
Los archivos que componen una base de datos Oracle se organizan así:
• Archivos de control: Estos archivos contienen datos sobre la propia base de datos,
at m u
denominados metadatos. Estos archivos son fundamentales para la base de datos. Sin
ellos, no se pueden abrir archivos de datos para acceder a los datos de la base de datos.
os e m
n
Hay otros archivos que no forman parte oficialmente de la base de datos pero que son
l
iniciarse.
e I
• Archivos log archivados: Estos archivos contienen un historial continuado del redo
generado por la instancia. Estos archivos permiten la recuperación de la base de datos.
n
Archivos de control
Archivos de control
B
as L í
e
SQ Gu
de Fu de
Archivos de control
D da Al
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 físicos que componen la base de datos.
at m u
automáticamente.
n
a
cl I
n
e I
10
n
LGWR
(Escritor
de Log)
B
Los archivos redo log se utilizan para registrar cambios realizados en la base de datos como
resultado de transacciones y acciones internas del servidor de bases de datos Oracle. Protegen
at m u
la base de datos de la pérdida de integridad debida a fallos del sistema provocados por cortes
eléctricos, fallos de disco, etc. Los archivos redo log se deben multiplexar para asegurarse de
os e m
n
de disco.
El redo log se compone de grupos de archivos redo log. Un grupo consiste en un archivo redo
O ta o
log y sus copias multiplexadas. Se dice que cada copia idéntica es un miembro de ese grupo y
ra ls
cada grupo se identifica con un número. LGWR (Proceso de escritor de log) escribe registros
l
redo del buffer de redo log en un grupo de redo log hasta que se rellene el archivo o se solicite
cl I
una operación de cambio de log. A continuación, cambia y se escribe en los archivos del
n
Archivo de Archivo de
datos 1 datos 2
B
as L í
Tablespace USERS
e
SQ Gu
de Fu de
divide lógicamente en uno o más tablespaces. Se crean uno o más archivos de datos
explícitamente para cada tablespace para almacenar físicamente los datos de todas las
os e m
n
Nota: También puede crear tablespaces bigfile, que son tablespaces con un archivo de
datos único, pero muy grande (de bloques de hasta 4 GB). Los tablespaces tradicionales
O ta o
smallfile (por defecto) pueden contener varios archivos de datos, pero los archivos no
ra ls
pueden ser tan grandes. Para obtener más información sobre tablespaces bigfile, consulte
l
e I
10
n
Los objetos de base de datos como por ejemplo, tablas e índices, se almacenan en tablespaces
como segmentos. Cada segmento contiene una o más extensiones. Una extensión consiste en
at m u
bloques de datos contiguos, lo que significa que cada extensión sólo puede existir en un
archivo de datos. Los bloques de datos son la unidad más pequeña de E/S de la base de datos.
os e m
n
Cuando la base de datos solicita un juego de bloques de datos del sistema operativo, éste lo
a
asigna al bloque de sistema operativo real del dispositivo de almacenamiento. Por esto, no es
necesario conocer la dirección física de ninguno de los datos de la base de datos. Esto también
O ta o
datos. El tamaño por defecto de 8 K es adecuado para la mayoría de bases de datos. Si la base
cl I
de datos soporta una aplicación de almacén de datos que tiene tablas e índices grandes, puede
n
resultar conveniente un bloque mayor. Si la base de datos soporta una aplicación transaccional
e I
en la que las lecturas y escrituras son muy aleatorias, puede resultar más adecuado especificar
un tamaño de bloque menor. El tamaño máximo de bloque depende del sistema operativo. El
10
Puede tener tablespaces con diferentes tamaños de bloque. Generalmente, esto sólo se debería
g
utilizar para soportar tablespaces transportables. Para obtener detalles, consulte Database
Administrator’s Guide.
Caché de
Buffer de
Pool Java buffers de la
redo log
base de datos
Punto de ARC0
as L í
control (Proceso de
CKPT Archivado)
e
SQ Gu
de Fu de
Un servidor de bases de datos Oracle está formado por una base de datos Oracle y una
instancia Oracle. Una instancia Oracle se compone de buffers de memoria conocidos como
at m u
La instancia está inactiva (no existente) hasta que se inicia. Cuando se inicia la instancia, se
n
correspondiente.
O ta o
Una vez iniciada la instancia y abierta la base de datos, los usuarios pueden acceder a la base
de datos.
ra ls
l
cl I
n
e I
10
n
SGA
Caché de
Buffer de
Pool Java buffers de la
redo log
B
base de datos
as L í
e
SQ Gu
de Fu de
segundo plano
• PGA (Área Global de Programas): Privada para cada servidor y cada proceso en
os e m
n
La SGA (Área Global del Sistema) es un área de memoria compartida que contiene datos e
información de control para la instancia.
O ta o
de la base de datos
cl I
recuperación de la instancia) hasta que se pueda escribir en los archivos redo log físicos
e I
almacenados en disco
• Pool compartido: Almacena varias construcciones que se pueden compartir entre
10
usuarios
• Pool grande: Área opcional utilizada para almacenar en buffer solicitudes grandes
n
de E/S
• Pool Java: Utilizado para el código Java específico de sesión y los datos dentro de JVM
(Java Virtual Machine)
• Pool para Streams: Utilizado por Oracle Streams
Base de Datos Oracle 10g: Conceptos Fundamentales de SQL II D-10
329
Introducción a Oracle 10g: SQL Fundamentals II
• Memoria de sesión: La memoria asignada para retener las variables de sesión y otra
información relacionada con la sesión.
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Procesos Oracle
Proceso Proceso Proceso Proceso
del servidor del servidor del servidor del servidor
SGA
Área Global del Sistema
DBW0
SMON PMON CKPT LGWR ARC0
Escritor de
B
de datos
Procesos en segundo plano
e
SQ Gu
de Fu de
Procesos Oracle
D da Al
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 aplicación.
at m u
Oracle también crea un juego de procesos en segundo plano para una instancia que
interactúan entre sí y con el sistema operativo para gestionar las estructuras de memoria,
os e m
n
realizar E/S asíncronamente para escribir datos en disco y realizar tareas de mantenimiento
a
general.
Los procesos en segundo plano que están presentes dependen de las funciones que se estén
O ta o
utilizando en la base de datos. Los procesos en segundo plano más comunes son los
siguientes:
ra ls
l
• SMON (Monitor del sistema): Realiza una recuperación de fallo cuando se inicia la
instancia después de un fallo
cl I
n
• CKPT (Punto de control): Señala DBWn en puntos de control y actualiza todos los
n
archivos de datos y los archivos de control de la base de datos para indicar el punto de
g
Archivo de
parámetros
Archivo de Archivos
contraseñas Base de datos log archivados
B
as L í
e
SQ Gu
de Fu de
Oracle Server también utiliza otros archivos que no forman parte de la base de datos:
• El archivo de parámetros define las características de una instancia Oracle. Por ejemplo,
at m u
• El archivo de contraseñas autentica los usuarios a los que se les permite iniciar y cerrar
a
cl I
n
e I
10
n
No se utilizan todos los componentes de una instancia Oracle para procesar las sentencias
SQL. Los procesos del usuario y del servidor se utilizan para conectar un usuario a una
at m u
instancia Oracle. Estos procesos no forman parte de la instancia Oracle, aunque son
necesarios para procesar una sentencia SQL.
os e m
n
Algunos de los procesos en segundo plano, las estructuras SGA y los archivos de base de
a
datos se utilizan para procesar sentencias SQL. Dependiendo del tipo de sentencia SQL, se
utilizan diferentes componentes:
O ta o
• Las consultas necesitan un procesamiento adicional para devolver las filas al usuario.
ra ls
• La validación del procesamiento asegura que se puedan recuperar los datos modificados
n
en una transacción.
e I
El proceso en segundo plano opcional, ARC0, se utiliza para asegurar la recuperación de una
g
Usuario Servidor
Oracle Server
Usuario Servidor
Cliente
Usuario Servidor
as L í
Explorador
e
SQ Gu
de Fu de
Antes que los usuarios puedan enviar sentencias SQL a Oracle Server, se deben conectar a
una instancia.
at m u
El usuario inicia una herramienta como iSQL*Plus, o bien ejecuta una aplicación que se haya
os e m
desarrollado con una herramienta como Oracle Forms. Esta aplicación o herramienta se
n
proceso en el equipo que ejecuta Oracle Server. A este proceso se le llama proceso del
servidor. El proceso del servidor se comunicará con la instancia Oracle en nombre del proceso
ra ls
del usuario en el cliente. El proceso del servidor ejecuta las sentencias SQL en nombre del
l
usuario.
cl I
n
e I
10
n
produce una terminación anormal. Un usuario de base de datos determinado puede realizar
muchas sesiones simultáneas si dicho usuario se conecta desde distintas herramientas,
as L í
Nota: El tipo de conexión que se explica aquí, donde hay una correspondencia uno a uno
de Fu de
entre un proceso del usuario y del servidor, se denomina conexión de servidor dedicado.
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
• Análisis:
– Busca una sentencia idéntica
– Comprueba la sintaxis, los nombres de objetos y
los privilegios
– Bloquea los objetos que se utilizan durante el
análisis
– Crea y almacena el plan de ejecución
• Ejecución: Identifica las filas seleccionadas
• Recuperación: Devuelve filas al proceso del
usuario
B
as L í
e
SQ Gu
de Fu de
Las consultas son diferentes a otros tipos de sentencias SQL ya que, si son correctas,
devuelven los datos como resultados. Mientras otras sentencias simplemente devuelven un
at m u
• Análisis
a
• Ejecución
• Recuperación
O ta o
Durante la etapa de análisis, la sentencia SQL se transfiere del proceso del usuario al del
ra ls
Pool Compartido
Caché de
biblioteca
B
Caché de
as L í
diccionario
de datos
e
SQ Gu
de Fu de
Durante la etapa de análisis, el proceso del servidor utiliza el área en la SGA conocida como
el pool compartido para compilar la sentencia SQL. El pool compartido cuenta con dos
at m u
componentes principales:
• Caché de biblioteca
os e m
n
Caché de Biblioteca
O ta o
La caché de biblioteca almacena información acerca de las últimas sentencias SQL que se
hayan utilizado en una estructura de la memoria denominada área SQL compartida. El área
ra ls
Si se vuelve a ejecutar una sentencia SQL y un área SQL compartida ya dispone del plan de
ejecución de la sentencia, el proceso del servidor no necesitará analizar la sentencia. La caché
n
O ta o
ra ls
l
cl I
n
e I
10
n
Caché de
buffers de
base de datos
B
as L í
e
SQ Gu
de Fu de
Cuando se procesa una consulta, el proceso del servidor busca en la caché de buffers de base
de datos los bloques que necesita. Si no se encuentra el bloque en la caché de buffers de base
at m u
de datos, el proceso del servidor lee el bloque en el archivo de datos y coloca una copia en la
caché de buffers. Dado que las siguientes solicitudes para el mismo bloque ya pueden
os e m
n
encontrar el bloque en la memoria, no necesitarán lecturas físicas. Oracle Server utiliza, como
a
mínimo, un algoritmo de uso menos reciente para hacer caducar los buffers a los que no se ha
accedido recientemente para dejar sitio a los nuevos bloques en la caché de buffers.
O ta o
parámetro DB_BLOCK_BUFFERS.
n
e I
10
n
• No compartido
• Sólo puede escribirlo el proceso del servidor
• Contiene:
– Área de ordenación
– Información de sesión
– Estado del cursor
– Espacio de la pila
Proceso del
B
servidor
as L í
PGA
e
SQ Gu
de Fu de
Una PGA (Área Global de Programas) es una región de la memoria que contiene datos e
información de control para un proceso del servidor. Es una memoria no compartida creada
at m u
por Oracle cuando se inicia un proceso del servidor. El acceso a ella es exclusivo del proceso
del servidor, y sólo puede leerla y escribir en ella el código de Oracle Server que actúe en su
os e m
n
nombre. La memoria PGA asignada por cada proceso del servidor adjunta a una instancia
a
componentes:
ra ls
sentencia SQL
cl I
rendimiento de la sesión
e I
• Estado del cursor: Indica la etapa en el procesamiento de las sentencias SQL que la
sesión utiliza en ese momento
10
1
B
as L í
Base de datos
e
SQ Gu
de Fu de
Una sentencia DML (Lenguaje de Manipulación de Datos) sólo requiere dos fases de
procesamiento:
at m u
• La etapa de análisis es la misma que la que se utiliza para procesar una consulta.
• La ejecución requiere un procesamiento adicional para efectuar cambios de datos.
os e m
n
• El proceso del servidor coloca bloqueos en las filas que se van a modificar.
l
• En el buffer de redo log, el proceso del servidor registra los cambios que se deben
cl I
• Los cambios del bloque de rollback registran los valores de los datos antes de que se
e I
• Los cambios de los bloques de datos registran los nuevos valores de los datos.
n
O ta o
ra ls
l
cl I
n
e I
10
n
Caché de
buffers de
base de datos
B
as L í
e
SQ Gu
de Fu de
El proceso del servidor registra la mayor parte de los cambios efectuados a los bloques de
archivos de datos en el buffer de redo log , que es una parte de la SGA. El buffer de redo log
at m u
• Registra el bloque que se modifica, la ubicación del cambio y el nuevo valor en una
a
entrada de redo. Una entrada de redo no distingue el tipo de bloque que se cambia, sólo
registra los bytes que se cambian en el bloque.
O ta o
• El buffer de redo log se utiliza de forma secuencial, y los cambios que lleve a cabo una
transacción se pueden intercalar con los efectuados por otras transacciones.
ra ls
l
e I
10
n
Segmento de Rollback
Imagen antigua
Segmento de
rollback Imagen
nueva
Tabla
B
Sentencia DML
as L í
e
SQ Gu
de Fu de
Segmento de Rollback
D da Al
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:
at m u
datos, mientras que los bloques de rollback se introducen en el buffer de base de datos a
ra ls
Los cambios realizados en los segmentos de rollback se registran en el buffer de redo log.
cl I
n
e I
10
n
Procesamiento COMMIT
1 Instancia
SGA Pool compartido
Proceso
Caché de
del servidor
buffers de Buffer de
4 base de redo log
datos
3
LGWR
Base de datos
e
SQ Gu
de Fu de
Oracle Server utiliza un mecanismo de validación rápido que garantiza que los cambios
validados se puedan recuperar en caso de fallo de la instancia.
at m u
Siempre que se valida una transacción, Oracle Server asigna un SCN (número de cambio del
n
a
A continuación, se muestran los pasos que se deben seguir cuando se emite COMMIT:
• El proceso del servidor coloca un registro de validación, junto con el SCN, en el buffer
e I
de redo log.
10
• LGWR realiza una escritura contigua de todas las entradas de buffers de redo log hasta
el registro de validación (incluido) en los archivos redo log. Después, Oracle Server
n
Oracle Server siempre hace rollback de los cambios no validados cuando se recupera de
de Fu de
fallos. En caso de que se produzca un fallo después de un rollback, antes de registrar las
entradas de rollback en disco, la ausencia de un registro validado será suficiente para asegurar
que se hará rollback de los cambios realizados por la transacción.
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
Resumen
Resumen
D da Al
base de datos, incluidos los nombres de los demás archivos de la base de datos (Los
n
• Archivos de datos: Poseen los datos de la base de datos, incluidos tablas, índices,
segmentos de rollback y segmentos temporales
O ta o
• Redo logs en línea: Contienen los cambios realizados en los archivos de datos (Los
ra ls
• Redo logs archivados: Son copias de seguridad de los redo logs en línea
10
n
Resumen (continuación)
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 más recientemente y los datos de uso más reciente del diccionario de datos
• Caché de buffers de base de datos: Almacena los datos de uso más 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 producción 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 línea
• SMON (Monitor del sistema): Comprueba la consistencia e inicia la recuperación 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 información de estado de base de
datos después de un punto de control
• ARC0 (Proceso de archivado): Hace una copia de seguridad del redo log en línea para
B
asegurar la recuperación después de un fallo del medio físico (Este proceso es opcional,
aunque se incluye normalmente en una instancia de producción).
as L í
Los pasos que se utilizan para procesar una sentencia SQL son:
SQ Gu
de Fu de
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
_________
Índice
_________
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
350
Introducción a Oracle 10g: SQL Fundamentals II
A
ACCESS PARAMETERS 02-33, 02-35
Activación de Restricciones 02-15, 02-16
Actualización Correlacionada 06-17, 06-18
Adición 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
Clasificación de Filas 07-10
Cláusula WITH 06-22, 06-23, 06-24
Columna Compuesta 04-17, 04-19, 04-23
Comparaciones entre No Pares 06-04
B
D
DBTIMEZONE 05-04, 05-09, 05-26, 05-34
O ta o
E
10
EXTRACT 05-25
g
F
Fecha/Hora 05-05…05-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
Función de Fecha/Hora 05-34, 05-35
Funciones de Conversión 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,
B
I
Índices Basados en Funciones 02-23, 02-24
as L í
INSERT 01-12, 01-15, 01-18, 02-06, 02-31, 03-03,…, 03-06, 03-11,…, 03-30
INSERT ALL Incondicional 02-19
SQ Gu
de Fu de
L
LEVEL 07-05, 07-10, 07-11, 07-14,
os e m
LPAD 07-11
M
O ta o
MERGE 03-27...03-30
ra ls
Metacaracteres 08-04...08-06
l
N
NLS_Date_Language 05-29
e I
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
Relación Principal-Secundario 07-04
Restricción 01-17, 02-07, 02-10…02-20, 06-07, 08-1, C-03
Restricciones de Control 08-13
Restricciones Diferidas 02-13
Restricciones en Cascada 02-18, 02-19
B
S
Seguimiento de Cambios 02-31
e
T
ra ls
TIMESTAMP 05-10...05-17
TIMESTAMP WITH LOCAL TIMEZONE 05-16, 05-17
cl I
n
TO_YMINTERVAL 05-31
10
U
g
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
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n
B
as L í
e
SQ Gu
de Fu de
D da Al
at m u
os e m
n
a
O ta o
ra ls
l
cl I
n
e I
10
n