Está en la página 1de 290

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

Oracle Database: Conceptos


sa ide
e
d
uII
Fundamentales
G
royde SQL
t
p
en
@
d
n
u
o
t
c
Volumen
I iGua del S
Alumno
a
s
i
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
D64260CS10
Edicin 1.0
Enero de 2010
D73592

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Autores
Chaitanya Koratamaddi
Brian Pottle
Tulika Srivastava
Colaboradores y
Revisores Tcnicos
Claire Bennett
Ken Cooper
Yanti Chang
Laszlo Czinkoczki
Burt Demchick
Gerlinde Frenzen
Joel Goodman
Laura Garza
Richard Green
Nancy Greenberg
Akira Kinutani
Wendy Lo
Isabelle Marchand
Timothy Mcglue
Alan Paulson
Manish Pawar
Srinivas Putrevu
Bryan Roberts
Clinton Shaffer
Hilda Simson
Abhishek Singh
Jenny Tsai Smith
James Spiller
Lori Tritz
Lex van der Werff
Marcie Young

Copyright 2010, Oracle. Todos los derechos reservados.


Renuncia
En este curso se ofrece una visin general de las funciones y mejoras planificadas en
la versin 11g. nicamente pretende ayudarle a evaluar las ventajas de negocio de
actualizar a 11g y planificar los proyectos de TI.
Este curso, en cualquiera de sus formatos (incluidos los ejercicios prcticos del curso
y el material impreso), contiene informacin de propiedad en exclusiva de Oracle.
Este curso y la informacin que contiene no se podrn revelar, copiar, reproducir o
distribuir a ninguna persona ajena a Oracle sin el consentimiento previo por escrito
de Oracle. Este curso y su contenido no forman parte del acuerdo de licencia ni se
pueden incorporar a ningn acuerdo contractual con Oracle, sus subsidiarias o
filiales.
Este curso es slo para fines informativos y nicamente pretende ayudarle a
planificar la implantacin y la actualizacin de las funciones del producto descritas.
No existe ningn compromiso de entregar ningn material, cdigo o funcionalidad, y
no se confiar en l al tomar decisiones de compra. El desarrollo, la publicacin y la
distribucin de las funciones o funcionalidades descritas en este documento seguirn
siendo a entera discrecin de Oracle.
Este documento contiene informacin propiedad de Oracle Corporation y se
encuentra protegido por las leyes de copyright, as como por otras leyes de
propiedad intelectual. El usuario podr realizar copias o imprimir este documento
para su uso exclusivo en los cursos de formacin de Oracle. Este documento no
podr ser modificado ni alterado en modo alguno. Salvo que la legislacin de
copyright lo considere un uso legtimo, no podr utilizar, compartir, descargar, cargar,
copiar, imprimir, mostrar, representar, reproducir, publicar, conceder licencias, enviar,
transmitir ni distribuir este documento total ni parcialmente sin autorizacin expresa
por parte de Oracle.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
Redactores
Amitha Narayan
Daniel Milne
Raj Kumar
Diseador Grfico
Satish Bettegowda
Editores
Veena Narasimhan
Pavithran Adka

La informacin contenida en este documento est sujeta a cambio sin previo aviso.
Si detecta cualquier problema en el documento, le agradeceremos que nos lo
comunique por escrito a: Oracle University, 500 Oracle Parkway, Redwood Shores,
California 94065 EE. UU. Oracle Corporation no garantiza que este documento est
exento de errores.
Aviso sobre Restriccin de Derechos

Si esta documentacin se entrega al Gobierno de los EE. UU. o a cualquier entidad


que la utilice en nombre del Gobierno de los EE. UU., se aplicar la siguiente
disposicin:

U.S. GOVERNMENT RIGHTS


The U.S. Governments rights to use, modify, reproduce, release, perform, display, or
disclose these training materials are restricted by the terms of the applicable Oracle
license agreement and/or the applicable U.S. Government contract.
Aviso de Marca Registrada
Oracle es una marca comercial registrada de Oracle Corporation y/o sus filiales.
Todos los dems nombres pueden ser marcas comerciales de sus respectivos
propietarios.

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Contenido

Introduccin
Objetivos I-2
Agenda I-3
Objetivos del Curso I-4
Requisitos del Curso I-5
Agenda I-6
Tablas Utilizadas en este Curso I-8
Apndices Utilizados en este Curso I-9
Entornos de Desarrollo I-10
Agenda I-11
Revisin de la Restriccin de Datos I-12
Revisin de Ordenacin de Datos I-13
Revisin de Funciones SQL I-14
Revisin de Funciones de Una Sola Fila I-15
Revisin de Tipos de Funciones de Grupo I-16
Revisin de Subconsultas I-17
Revisin de Manipulacin de Datos I-18
Agenda I-19
Documentacin sobre SQL de Oracle Database I-20
Recursos Adicionales I-21
Resumen I-22
Prctica I: Visin General I-23

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
N n-tr
FU 1noControl
del Acceso de los Usuarios
Objetivos 1-2
Agenda 1-3
Control del Acceso de los Usuarios 1-4
Privilegios 1-5
Privilegios del Sistema 1-6
Creacin de un Usuario 1-7
Privilegios del Sistema de Usuario 1-8
Asignacin de Privilegios del Sistema 1-9
Agenda 1-10
Qu es un Rol? 1-11
Creacin y Asignacin de Privilegios a un Rol 1-12
Cambio de Contrasea 1-13

iii

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Agenda 1-14
Privilegios de Objeto 1-15
Asignacin de Privilegios de Objeto 1-17
Transferencia de Privilegios 1-18
Confirmacin de Privilegios Otorgados 1-19
Agenda 1-20
Revocacin de Privilegios de Objeto 1-21
Prueba 1-23
Resumen 1-24
Prctica 1: Visin General 1-25
2

Gestin de Objetos de Esquema


Objetivos 2-2
Agenda 2-3
Sentencia ALTER TABLE 2-4
Adicin de Columnas 2-6
Modificacin de Columnas 2-7
Borrado de Columnas 2-8
Opcin SET UNUSED 2-9
Agenda 2-11
Adicin de Sintaxis de Restriccin 2-12
Adicin de Restricciones 2-13
Clusula ON DELETE 2-14
Restricciones Diferidas 2-15
Diferencia entre INITIALLY DEFERRED y INITIALLY IMMEDIATE 2-16
Borrado de Restricciones 2-18
Desactivacin de Restricciones 2-19
Activacin de Restricciones 2-20
Restricciones en Cascada 2-22
Cambio de Nombre de Columnas de Tabla y Restricciones 2-24
Agenda 2-25
Visin General de ndices 2-26
CREATE INDEX con la Sentencia CREATE TABLE 2-27
ndices Basados en Funciones 2-29
Eliminacin de ndices 2-30
DROP TABLE PURGE 2-31
Agenda 2-32
Sentencia FLASHBACK TABLE 2-33

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Uso de la Sentencia FLASHBACK TABLE 2-35


Agenda 2-36

iv

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Tablas Temporales 2-37


Creacin de una Tabla Temporal 2-38
Agenda 2-39
Tablas Externas 2-40
Creacin de un Directorio para la Tabla Externa 2-41
Creacin de Tablas Externas 2-43
Creacin de una Tabla Externa mediante ORACLE_LOADER 2-45
Consulta de Tablas Externas 2-47
Creacin de una Tabla Externa mediante ORACLE_DATAPUMP: Ejemplo 2-48
Prueba 2-49
Resumen 2-51
Prctica 2: Visin General 2-52
3

Gestin de Objetos con Vistas de Diccionario de Datos


Objetivos 3-2
Agenda 3-3
Diccionario de Datos 3-4
Estructura del Diccionario de Datos 3-5
Uso de las Vistas de Diccionario 3-7
Vistas USER_OBJECTS y ALL_OBJECTS 3-8

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
Vista USER_OBJECTS 3-9
fun se th
(
Agenda 3-10
SA to u
E
D 3-11nse
Informacin sobre Tablas
Y
ce 3-12
Informacin sobre
i
ROColumnas
l
P
le
N
Informacin
sobre
Restricciones
3-14
b
a
O
r
I
e
C
Ejemplo 3-15
sf
AUSER_CONSTRAINTS:
n
D
a
N n-tr de USER_CONS_COLUMNS 3-16
FU noConsulta
Agenda 3-17
Informacin sobre Vistas 3-18
Informacin sobre Secuencias 3-19
Confirmacin de Secuencias 3-20
Informacin sobre ndices 3-21
USER_INDEXES: Ejemplos 3-22
Consulta USER_IND_COLUMNS 3-23
Informacin sobre Sinnimos 3-24
Agenda 3-25
Adicin de Comentarios a una Tabla 3-26
Prueba 3-27
Resumen 3-28
Prctica 3: Visin General 3-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Manipulacin de Juegos de Datos Grandes


Objetivos 4-2
Agenda 4-3
Uso de Subconsultas para Manipular Datos 4-4
Recuperacin de Datos mediante una Subconsulta como Origen 4-5
Insercin mediante una Subconsulta como Destino 4-7
Uso de la Palabra Clave WITH CHECK OPTION en Sentencias DML 4-9
Agenda 4-11
Visin General de la Funcin por Defecto Explcita 4-12
Uso de Valores por Defecto Explcitos 4-13
Copia de Filas de Otra Tabla 4-14
Agenda 4-15
Visin General de Sentencias INSERT de Varias de Tablas 4-16

s
a
h
Tipos de Sentencias INSERT de Varias Tablas 4-18
rg)
o
Sentencias INSERT de Varias Tablas 4-19

sa ide
e
INSERT ALL Incondicional 4-21
d
roy nt Gu
INSERT ALL Condicional: Ejemplo 4-23
p
n@ tude
INSERT ALL Condicional 4-24
o
i
c is S
INSERT FIRST Condicional: Ejemplo 4-26 da
fun se th
INSERT FIRST Condicional 4-27
(
SA to u
INSERT mediante giro 4-29
E
D nse
Y
Agenda 4-32
RO e lice
Sentencia MERGE P
4-33
N raMERGE
bl 4-34
O
Sintaxis de Sentencias
I
fe 4-35
s
AdeCFilas:
n
Fusin
Ejemplo
D
ra
N n4-38
t
U
Agenda
F no
Seguimiento de Cambios en Datos 4-39
Ejemplo de Consulta de Flashback de Versiones 4-40
Clusula VERSIONS BETWEEN 4-42
Prueba 4-43
Resumen 4-44
Prctica 4: Visin General 4-45
5

Gestin de Datos Situados en Distintas Zonas Horarias


Objetivos 5-2
Agenda 5-3
Zonas Horarias 5-4
Parmetro de Sesin TIME_ZONE 5-5
CURRENT_DATE, CURRENT_TIMESTAMP y LOCALTIMESTAMP 5-6
vi

Fundacin Proydesa

Comparacin de Fecha y Hora en la Zona Horaria de una Sesin 5-7


DBTIMEZONE y SESSIONTIMEZONE 5-9

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato TIMESTAMP 5-10


Campos TIMESTAMP 5-11
Diferencia ente DATE y TIMESTAMP 5-12
Comparacin de Tipos de Dato TIMESTAMP 5-13
Agenda 5-14
Tipos de Dato INTERVAL 5-15
Campos INTERVAL 5-17
INTERVAL YEAR TO MONTH: Ejemplo 5-18
Tipo de Dato INTERVAL DAY TO SECOND: Ejemplo 5-20
Agenda 5-21
EXTRACT 5-22

s
a
h
FROM_TZ 5-25
rg)
o

TO_TIMESTAMP 5-26
sa ide
e
d
TO_YMINTERVAL 5-27
roy nt Gu
p
TO_DSINTERVAL 5-28
@ tude
n
o
i
Horario de Verano 5-29
c is S
a
d
Prueba 5-31
un se th
f
(
Resumen 5-32
A to u
S
E
Prctica 5: Visin General
e
D 5-33
s
Y
n
e
RO e lic
P
6 Recuperacin
l mediante Subconsultas
N rdeabDatos
O
I
C ns6-2
fe
AObjetivos
D
ra 6-3
N Agenda
t
U
n
Subconsultas
de Varias Columnas 6-4
F no
Comparaciones de Columnas 6-5
TZ_OFFSET 5-23

Subconsulta de Comparacin Pairwise 6-6


Subconsulta de comparacin No Pairwise 6-8
Agenda 6-10
Expresiones de Subconsultas Escalares 6-11
Subconsultas Escalares: Ejemplos 6-12
Agenda 6-14
Subconsultas Correlacionadas 6-15
Uso de Subconsultas Correlacionadas 6-17
Agenda 6-19
Uso del Operador EXISTS 6-20
Buscar Todos los Departamentos que No Tienen Empleados 6-22
Subconsulta Correlacionada UPDATE 6-23
vii

Fundacin Proydesa

Uso de la Subconsulta Correlacionada UPDATE 6-24

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta Correlacionada DELETE 6-26


Uso de una Subconsulta Correlacionada DELETE 6-27
Agenda 6-28
Clusula WITH 6-29
Clusula WITH: Ejemplo 6-30
Clusula WITH Recursiva 6-32
Clusula WITH Recursiva: Ejemplo 6-33
Prueba 6-34
Resumen 6-35
Prctica 6: Visin General 6-37
7

Soporte para Expresiones Normales


Objetivos 7-2
Agenda 7-3
Qu Son Expresiones Regulares? 7-4
Ventajas de Utilizar Expresiones Regulares 7-5
Uso de Funciones y Condiciones de Expresiones Regulares en SQL y PL/SQL 7-6
Agenda 7-7
Que Son Metacaracteres? 7-8
Uso de Metacaracteres con Expresiones Normales 7-9
Agenda 7-11
Condiciones y Funciones de Expresiones Regulares: Sintaxis 7-12
Realizacin de una Bsqueda Bsica mediante la Condicin REGEXP_LIKE 7-13

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N ramediante
bl la Funcin REGEXP_REPLACE 7-14
Sustitucin de
Patrones
O
I
sfe mediante la Funcin REGEXP_REPLACE 7-15
ACde aPatrones
Bsqueda
n
D
N n-detr Patrones mediante la Funcin REGEXP_SUBSTR 7-16
FUBsqueda
no 7-17
Agenda
Subexpresiones 7-18
Uso de Subexpresiones con el Soporte para Expresiones Regulares 7-19
Por qu Acceder a la n Subexpresin? 7-20
REGEXP_SUBSTR: Ejemplo 7-21
Agenda 7-22
Uso de la Funcin REGEXP_COUNT 7-23
Expresiones Regulares y Restricciones de Control: Ejemplos 7-24
Prueba 7-25
Resumen 7-26
Prctica 7: Visin General 7-27
Apndice A: Prcticas y Soluciones

viii

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Apndice B: Descripciones de las Tablas


Apndice C: Uso de SQL Developer
Objetivos C-2
Qu es Oracle SQL Developer? C-3
Especificaciones de SQL Developer C-4
Interfaz de SQL Developer 1.5 C-5
Creacin de una Conexin a la Base Datos C-7
Examen de Objetos de Bases de Datos C-10
Visualizacin de la Estructura de la Tabla C-11
Examen de Archivos C-12
Creacin de un Objeto de Esquema C-13
Creacin de una Nueva Tabla: Ejemplo C-14
Uso de la Hoja de Trabajo de SQL C-15
Ejecucin de Sentencias SQL C-18
Guardado de Scripts SQL C-19
Ejecucin de Archivos de Script Guardados: Mtodo 1 C-20
Ejecucin de Archivos de Script Guardados: Mtodo 2 C-21
Formato del Cdigo SQL C-22
Uso de Fragmentos C-23
Uso de Fragmentos: Ejemplo C-24
Depuracin de Procedimientos y Funciones C-25
Informes de Bases de Datos C-26
Creacin de un Informe Definido por el Usuario C-27
Motores de Bsqueda y Herramientas Externas C-28
Definicin de Preferencias C-29
Restablecimiento del Diseo de SQL Developer C-30
Resumen C-31

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
Apndice D: Uso de SQL*Plus
Objetivos D-2
Interaccin de SQL y SQL*Plus D-3
Sentencias SQL frente a Comandos SQL*Plus D-4
Visin General de SQL*Plus D-5
Conexin a SQL*Plus D-6
Visualizacin de la Estructura de la Tabla D-7
Comandos de Edicin SQL*Plus D-9
Uso de LIST, n y APPEND D-11
Uso del Comando CHANGE D-12
Comandos de Archivos SQL*Plus D-13
Uso de los Comandos SAVE y START D-14
ix

Fundacin Proydesa

Comando SERVEROUTPUT

D-15

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Comando SQL*Plus SPOOL D-16


Uso del Comando AUTOTRACE D-17
Resumen D-18
Apndice E: Uso de JDeveloper
Objetivos E-2
Oracle JDeveloper E-3
Database Navigator E-4
Creacin de una Conexin E-5
Examen de Objetos de Bases de Datos E-6
Ejecucin de Sentencias SQL E-7
Creacin de Unidades de Programa E-8
Compilacin E-9
Ejecucin de una Unidad de Programa E-10
Borrado de una Unidad de Programa E-11
Ventana Structure E-12
Ventana del Editor E-13
Navegador de Aplicaciones E-14
Despliegue de Procedimientos Java Almacenados E-15
Publicacin de Java en PL/SQL E-16
Cmo Puedo Obtener ms Informacin sobre JDeveloper 11g? E-17
Resumen E-18

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
l
N rdeabInformes
Apndice F: Generacin
Agrupando Datos Relacionados
O
I
e
C
Objetivos
A F-2ansf
D
Revisin
de Grupo F-3
r
N nde-tFunciones
FURevisin
o
n de la Clusula GROUP BY F-4
Revisin de la Clusula HAVING F-5

GROUP BY con los Operadores ROLLUP y CUBE F-6


Operador ROLLUP F-7
Operador ROLLUP: Ejemplo F-8
Operador CUBE F-9
Operador CUBE: Ejemplo F-10
Funcin GROUPING F-11
Funcin GROUPING: Ejemplo F-12
GROUPING SETS F-13
GROUPING SETS: Ejemplo F-15
Columnas Compuestas F-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Columnas Compuestas: Ejemplo F-19


Agrupamientos Concatenados F-21
Agrupamientos Concatenados: Ejemplo F-22
Resumen F-23
Apndice G: Recuperacin Jerrquica
Objetivos G-2
Datos de Ejemplo de la Tabla EMPLOYEES G-3
Estructura de rbol Natural G-4
Consultas Jerrquicas G-5
Recorrido por el rbol G-6
Recorrido por el rbol: De Abajo Arriba G-8
Recorrido por el rbol: De Arriba Abajo G-9
Clasificacin de Filas con la Pseudocolumna LEVEL G-10

s
a
h
Aplicacin de Formato a Informes Jerrquicos con LEVEL y LPAD G-11
rg)
o
Eliminacin de Ramas G-13

sa ide
e
Resumen G-14
d
roy nt Gu
p
@ tude
Apndice H: Escritura de Archivos de Comandosn
Avanzados
o
i
c is S
Objetivos H-2
a
d
Uso de SQL para Generar SQL H-3
fun se th
(
Creacin de un Script Bsico
SAH-4 to u
E
D nse
Control del Entorno Y
H-5
Imagen Completa
ROH-6e lice
P
Volcado N
del Contenido
bl de una Tabla en un Archivo H-7
a
O
r
I
C nsde
feun Predicado Dinmico H-9
AGeneracin
D
ra H-11
N Resumen
t
U
n
F no
Apndice I: Componentes Arquitectnicos de Oracle Database
Objetivos I-2
Arquitectura de Oracle Database: Visin General I-3
Estructuras de Servidor de Oracle Database I-4
Conexin a la Base de Datos I-5
Interaccin con Oracle Database I-6
Arquitectura de Memoria de Oracle I-8
Arquitectura de Proceso I-10
Proceso de Escritores de Base de Datos I-12
Proceso de Escritor de Log I-13
Proceso de Punto de Control I-14
Proceso de Supervisin del Sistema I-15

xi

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Proceso de Supervisin de Procesos I-16


Arquitectura de Almacenamiento de Oracle Database I-17
Estructuras de Bases de Datos Fsicas y Lgicas I-19
Procesamiento de Sentencias SQL I-21
Procesamiento de Consultas I-22
Pool Compartido I-23
Cach de buffers de la base de datos I-25
rea Global de Programa (PGA) I-26
Procesamiento de una Sentencia DML I-27
Buffer de Redo Log I-29
Segmento de Rollback I-30
Procesamiento COMMIT I-31
Resumen de Arquitectura de Oracle Database I-33

s
a
h
Prcticas y soluciones adicionales
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

xii

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Introduccin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Describir los objetivos del curso
Describir las tablas y el esquema de base de datos que se
utilizan en el curso
Identificar los entornos disponibles que se pueden utilizar
para este curso
Revisar algunos conceptos fundamentales de SQL

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso y agenda


Apndices y esquema de base de datos utilizados en el
curso y el entorno de desarrollo disponible en este curso
Revisin de algunos conceptos fundamentales de SQL
Documentacin y recursos adicionales de Oracle
Database 11g

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos del Curso


Al finalizar este curso, debera estar capacitado para lo
siguiente:
Controlar el acceso a la base de datos para objetos
concretos
Agregar nuevos usuarios con distintos niveles de
privilegios de acceso
Gestionar objetos de esquema
Gestionar objetos con vistas de diccionario de datos
Manipular grandes juegos de datos en Oracle Database
s
a
h
mediante subconsultas
g)
r
o

Gestionar datos situados en distintas zonas horarias


sa ide
e
d
u
Escribir subconsultas de varias columnas oy
G
r
t
p
Utilizar subconsultas escalares y correlacionadas
en
@
d
n
u
o
t
Utilizar el soporte de expresiones
aciregulares
s S en SQL

i
d
h
n
t
u
f
(
se
u
A
Copyright 2010,
Todos
tolos derechos reservados.
ESOracle.
e
D
s
OY licen
R
P ble
N
IO fera
C
DA trans
N
FU non-

Oracle Database: Conceptos Fundamentales de SQL II I-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Requisitos del Curso


El curso Oracle Database: Conceptos Fundamentales de SQL I
es un requisito previo para este curso.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Requisitos del Curso
le
N
b
a
O
I
La preparacinC
necesaria
para
er este curso es Oracle Database: Conceptos Fundamentales de SQL I.
f
s
A
Dofrecetruna
Este curso
anintroduccin a la tecnologa de Oracle Database. En este curso, aprender los
N
U
conceptos
n relativos a las bases de datos relacionales y al potente lenguaje de programacin
F nbsicos
o
SQL. El curso proporciona los conocimientos esenciales de SQL que permiten escribir consultas en
una o varias tablas, manipular datos en tablas, crear objetos de bases de datos y realizar consultas en
los metadatos.

Oracle Database: Conceptos Fundamentales de SQL II I-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Primer da:

Introduccin
Control del Acceso de los Usuarios
Gestin de Objetos de Esquema
Gestin de Objetos con Vistas de Diccionario de Datos

Segundo da:

Manipulacin de Juegos de Datos Grandes


Gestin de Datos Situados en Distintas Zonas Horarias
s
a
h
Recuperacin de Datos mediante Subconsultas
rg)
o

Soporte para Expresiones Regulares


sa
e

de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso y agenda


Apndices y esquema de base de datos utilizados en el
curso y el entorno de desarrollo disponible en este curso
Revisin de Algunos Conceptos Fundamentales de SQL
Documentacin y recursos adicionales de Oracle
Database 11g

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tablas Utilizadas en este Curso

DEPARTMENTS
department_id
department_name
manager_id
location_id

LOCATIONS
location_id
street_address
postal_code
city
state_province
country_id

JOB_HISTORY
employee_id
start_date
end_date
job_id
department_id

EMPLOYEES
employee_id
first_name
last_name
email
phone_number
hire_date
job_id
salary
commission_pct
manager_id
department_id

COUNTRIES
country_id
country_name
region_id

s
a
h
JOBS
rg)
o

a de
REGIONS s
e
i
d
u
y
G
o
JOB_GRADES
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Descripcin de las Tablas
le
N
b
a
O
Este curso utilizaIdatos dee
C nsf lasr siguientes tablas:
A
Descripciones
D detrlas
a Tablas
N
U
nEMPLOYEES contiene informacin sobre todos los empleados, como su nombre y
F La tabla
o
n
apellido, ID de cargo, salarios, fechas de contratacin, ID de departamento e ID de gestor. Se
job_id
job_title
min_salary
max_salary

region_id
region_name

grade_level
lowest_sal
highest_sal

trata de una tabla secundaria de la tabla DEPARTMENTS.


La tabla DEPARTMENTS contiene informacin, como el ID de departamento, el nombre de
departamento, el ID de gestor y el ID de ubicacin. Se trata de la tabla de clave primaria en la
tabla EMPLOYEES.
La tabla LOCATIONS contiene informacin sobre la ubicacin de departamento. Contiene
informacin sobre el ID de ubicacin, calle, ciudad, provincia, cdigo postal e ID de pas. Se
trata de la tabla de clave primaria en la tabla DEPARTMENTS y es secundaria de la tabla
COUNTRIES.
La tabla COUNTRIES contiene los nombres de pas, ID de pas e ID de regin. Se trata de una
tabla secundaria de la tabla REGIONS. Esta tabla es la tabla de clave primaria en la tabla
LOCATIONS.
La tabla REGIONScontiene los ID de regin y los nombres de regin de varios pases. Se trata
de una tabla de clave primaria en la tabla COUNTRIES.
La tabla JOB_GRADES identifica un rango de salarios por grado de cargos. Los rangos de
salarios no se solapan.
La tabla JOB_HISTORY almacena el historial del cargo de los empleados.
La tabla JOBS contiene los rangos de cargos y salarios.
Oracle Database: Conceptos Fundamentales de SQL II I-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Apndices Utilizados en este Curso

Apndice A: Prcticas y Soluciones


Apndice B: Descripciones de las Tablas
Apndice C: Uso de SQL Developer
Apndice D: Uso de SQL*Plus
Apndice E: Uso de JDeveloper
Apndice F: Generacin de Informes Agrupando Datos
Relacionados
s
Apndice G: Recuperacin Jerrquica
a
h
rg)
Apndice H: Escritura de Scripts Avanzados
o

esa uide
Apndice I: Componentes Arquitectnicos deyd
Oracle
Database
pro ent G

n@ tud
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Entornos de Desarrollo
Existen dos entornos de desarrollo para este curso:
La herramienta principal es Oracle SQL Developer.
Tambin puede utilizar la interfaz de lnea de comandos
de SQL*Plus.

s
a
h
SQL
*Plus
SQL Developer
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Entornos de Desarrollo
le
N
b
a
O
SQL Developer
CI nsfer
A
Dse desarrolla
Este curso
a mediante Oracle SQL Developer como la herramienta para la ejecucin de
r
N
t
U
sentencias
n en los ejemplos de las diapositivas y prcticas.
F ntratadas
o
SQL Developer versin 1.5.4 se incluye con Oracle Database 11g y es la herramienta por

defecto para esta clase.


Adems, SQL Developer versin 1.5.4 tambin est disponible en la mquina de la clase y se
puede instalar para su uso. En el momento de la publicacin de este curso, la versin 1.5.3 era la
ltima versin SQL Developer.
SQL*Plus
Tambin se puede utilizar el entorno de SQL*Plus para ejecutar todos los comandos SQL tratados en
este curso.
Nota
Consulte el apndice C para obtener informacin sobre el uso de SQL Developer, que incluye
instrucciones simples sobre la instalacin de la versin 1.5.4.
Consulte el apndice D para obtener ms informacin sobre el uso de SQL*Plus.

Oracle Database: Conceptos Fundamentales de SQL II I-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso y agenda


Apndices y esquema de base de datos utilizados en el
curso y el entorno de desarrollo disponible en este curso
Revisin de Algunos Conceptos Fundamentales de SQL
Documentacin y recursos adicionales de Oracle
Database 11g

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Agenda
le
N
b
a
O
r
I
Las siguientesC
diapositivas
una breve visin general de algunos de los conceptos que ha
eproporcionan
f
s
A
aprendidoDen el curso
N n-tranOracle Database: Conceptos Fundamentales de SQL I.
U
F no

Oracle Database: Conceptos Fundamentales de SQL II I-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de la Restriccin de Datos

Restringir las filas devueltas al utilizar la clusula WHERE.

Utilizar las condiciones de comparacin para comparar


una expresin con otro valor o expresin.
Operador

Significado

BETWEEN
...AND...

Entre dos valores (ambos incluidos)

IN(set)

Coincide con cualquiera de los valores de una lista

a
s
a
)h
g
r
Utilizar condiciones lgicas para combinar el resultado
de
o e
a
s
dos condiciones de componentes y producir un
nico
de Guid
y
o
resultado segn estas condiciones.
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de la Restriccin de Datos
le
N
b
a
O
Puede restringir las
que
la consulta al utilizar la clusula WHERE. Un clusula WHERE
eserdevuelve
CI filas
f
s
contiene D
unaAcondicin
que
debe
cumplir
e, inmediatamente despus, le sigue la clusula FROM.
n
a
r
N
t
U oWHERE
La
n- puede comparar valores en columnas, valores literales, expresiones aritmticas o
Fclusula
n
funciones. Consta de tres elementos:
LIKE

Coincide con un patrn de caracteres

Nombre de la columna
Condicin de comparacin
Nombre de la columna, constante o lista de valores
Utilice las condiciones de comparacin en la clusula WHERE en el siguiente formato:
... WHERE expr operator value

Adems de las condiciones mencionadas en la diapositiva, utilice otras condiciones de comparacin


como =, <, >, <>, <= y >=.
En SQL, estn disponibles tres operadores lgicos:
AND
OR
NOT

Oracle Database: Conceptos Fundamentales de SQL II I-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de Ordenacin de Datos

Ordenar las filas recuperadas con la clusula ORDER BY:


ASC: orden ascendente, valor por defecto
DESC: orden descendente

La clusula ORDER BY es la ltima en una sentencia


SELECT:
SELECT
last_name, job_id, department_id, hire_date
FROM
employees
ORDER BY hire_date ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d

n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de Ordenacin de Datos
le
N
b
a
O
El orden de las filas
r en un resultado de consulta no est definido. La clusula ORDER BY se
I devueltas
elas
C
f
s
A
puede utilizar
para
ordenar
filas. Sin embargo, si utiliza la clusula ORDER BY, debe ser la ltima
D tran
N
clusula
SQL. Puede especificar una expresin, un alias o una posicin de columna
U deolansentencia
F
n
como la condicin de ordenacin.
Sintaxis
SELECT
FROM
[WHERE
[ORDER BY

expr
table
condition(s)]
{column, expr, numeric_position} [ASC|DESC]];

En la sintaxis:
ORDER BY
especifica el orden en el que aparecen las filas recuperadas
ASC
ordena las filas en orden ascendente (orden por defecto)
DESC
ordena las filas en orden descendente
Si la clusula ORDER BY no se utiliza, el orden no est definido y puede que el servidor de Oracle no
recupere dos veces las filas en el mismo orden para la misma consulta. Utilice la clusula ORDER BY
para mostrar las filas en un orden especfico.

Oracle Database: Conceptos Fundamentales de SQL II I-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de Funciones SQL

Funciones

s
a
h
rg)
o

sa ide
e
Devuelve un resultado
Devuelve un
resultado
d
Gu
roy denfilas
t
por fila
por p
juego
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de Funciones SQL le
ON defefunciones:
rab
Hay dos tipos C
de Igrupos
s fila
Funciones
nsola
DA detruna
a
N
n-de varias filas
F UFunciones
o
n
Funciones de Una Sola Fila
Funciones de
una sola fila

Funciones de
varias filas

Estas funciones funcionan slo en filas nicas y devuelven un resultado por fila. Existen distintos
tipos de funciones de una sola filas como funciones de carcter, nmero, fecha, conversin y
generales.
Funciones de Varias Filas
Las funciones pueden manipular grupos de filas para proporcionar un resultado por grupo de filas.
Estas funciones tambin se conocen como funciones de grupo.

Oracle Database: Conceptos Fundamentales de SQL II I-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de Funciones de Una Sola Fila

Carcter

General

Funciones de
una sola fila

Nmero

a
s
a
)h
g
r
o e
a
s
e uid
Conversin
Fecha oyd
G
r
t
p
n
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de Funciones de Unale
Sola Fila
N
b
a
O
A continuacinCseI muestran
erlos distintos tipos de funciones de una sola fila:
f
s
A
Funciones
aceptan la entrada de caracteres y pueden devolver valores de nmero y
n
D detracarcter:
Ncarcter.
de
U
F Funciones
non numricas: aceptan valores de entrada y devuelven valores numricos.
Funciones de fecha: operan en valores del tipo de dato DATE. (Todas las funciones de fecha
devuelven un valor de tipo de dato DATE excepto la funcin MONTHS_BETWEEN, que devuelve
un nmero).
Funciones de conversin: convierten un valor de un tipo de dato a otro.
Funciones generales:
- NVL
- NVL2
- NULLIF
- COALESCE
- CASE
- DECODE

Oracle Database: Conceptos Fundamentales de SQL II I-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de Tipos de Funciones de Grupo

AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE

Funciones de
grupo

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de Tipos de Funciones
le de Grupo
N
b
a
O
r un argumento. La siguiente tabla identifica las opciones que se
I
Cada una de las
funciones
eacepta
C
f
s
A
pueden utilizar
n
ND n-entrlaasintaxis:
U
F no
Funcin
Descripcin
AVG([DISTINCT|ALL]n)

Valor medio de n; ignora los valores nulos

COUNT({*|[DISTINCT|ALL]expr})

Nmero de filas donde expr evala otros valores


que no son nulos (tiene en cuenta todas las filas
seleccionadas con *, incluyendo duplicados y filas
con valores nulos)

MAX([DISTINCT|ALL]expr)

Valor mximo de expr; ignora los valores nulos

MIN([DISTINCT|ALL]expr)

Valor mnimo de expr; ignora los valores nulos

STDDEV([DISTINCT|ALL]n)

Desviacin estndar de n, ignora los valores nulos

SUM([DISTINCT|ALL]n)

Valores de suma de n, ignora los valores nulos

VARIANCE([DISTINCT|ALL]n)

Varianza de n; ignora los valores nulos

Oracle Database: Conceptos Fundamentales de SQL II I-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de Subconsultas

Una subconsulta es una sentencia SELECT que est


anidada en la clusula de otra sentencia SELECT.

Sintaxis:
SELECT select_list
FROM
table
WHERE expr operator
(SELECT select_list
FROM
table );

Tipos de subconsultas:

s
a
h
Subconsulta de una sola fila Subconsulta de varias filas
rg)
o

sa ide
Devuelve una sola fila
Devuelve ms de una fila
e
d
y t Gu
Utiliza operadores de
Utiliza operadores depro
n
@
comparacin de una sola fila
comparacin de
varias filasde
n
u
t
io
S
c
a
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de Subconsultas
le
N
b
a
O
I potentes
Puede crear sentencias
er a partir de sentencias simples utilizando las subconsultas. Las
C
f
s
A
subconsultas
son tiles
an cuando una consulta est basada en criterios de bsqueda con valores
r
ND desconocidos.
t
intermedios
U
F non
Puede colocar la subconsulta en diferentes clusulas SQL, entre las que se incluyen las siguientes:

Clusula WHERE
Clusula HAVING
Clusula FROM
La subconsulta (consulta interna) se ejecuta una vez antes de la consulta principal (consulta externa).
La consulta principal utiliza el resultado de la subconsulta.
Una subconsulta de una sola fila utiliza un operador de una sola fila =, >, <, >=, <=, y <>. Con una
subconsulta de varias filas, utilice un operador de varias filas como IN, ANY y ALL.
Ejemplo: muestra los detalles de empleados cuyo salario es igual al salario mnimo.
SELECT last_name, salary, job_id
FROM
employees
WHERE salary = (SELECT MIN(salary)
FROM
employees );

En el ejemplo, la funcin de grupo MIN devuelve un valor nico a la consulta externa.


Nota: en este curso, aprender a utilizar varias subconsultas de varias columnas. Las subconsultas de
varias columnas devuelven ms de una columna de la sentencia interna SELECT.
Oracle Database: Conceptos Fundamentales de SQL II I-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revisin de Manipulacin de Datos


Las sentencias de lenguaje de manipulacin de datos (DML) se
ejecutan al:
Agregar nuevas filas a una tabla
Modificar filas existentes en una tabla
Eliminar filas existentes de una tabla\
Funcin

Descripcin

INSERT

Agrega una nueva fila a la tabla.

a
s
a
Modifica filas existentes en la tabla.
UPDATE
)h
g
r
o e
Elimina filas existentes de la tabla.
DELETE
a
s
yde t Guid
Actualiza, inserta o suprime una fila derforma
MERGE
o
p en
condicional en/de una tabla.
@
n
o
tud
i
S
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revisin de Manipulacin de Datos
le
N
b
a
O
I ofsuprimir
Para agregar, actualizar
er los datos de la base de datos, ejecute una sentencia DML. La
C
s
A
recopilacin
que forman una unidad lgica de trabajo se denomina transaccin.
D de sentencias
ranfilas DML
N
t
Puede
agregarnnuevas
a una tabla mediante la sentencia INSERT. Con la siguiente sintaxis, slo
U
F
o fila cada vez.
se insertanuna
INSERT INTO table [(column [, column])]
VALUES
(value[, value...]);

Puede utilizar la sentencia INSERT para agregar filas a la tabla en la que se derivan los valores de las
tablas existentes. En lugar de la clusula VALUES, utilice una subconsulta. El nmero de columnas y
sus tipos de dato de la lista de columnas de la clusula INSERT deben coincidir con el nmero de
valores y sus tipos de dato en la subconsulta.
La sentencia UPDATE modifica filas especficas si especifica la clusula WHERE.
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

Puede eliminar filas existentes mediante la sentencia DELETE. Puede suprimir filas concretas
mediante la especificacin de la clusula WHERE en la sentencia DELETE.
DELETE [FROM] table
[WHERE condition];

Aprender acerca de la sentencia MERGE en la leccin sobre manipulacin de juegos de datos grandes.
Oracle Database: Conceptos Fundamentales de SQL II I-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso y agenda


Apndices y esquema de base de datos utilizados en el
curso y el entorno de desarrollo disponible en este curso
Revisin de algunos conceptos fundamentales de SQL
Documentacin y recursos adicionales de Oracle
Database 11g

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Documentacin sobre SQL de Oracle Database

Oracle Database New Features Guide


Oracle Database Reference
Oracle Database SQL Language Reference
Oracle Database Concepts
Oracle Database SQL Developer Users Guide Release 1.2

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Documentacin sobre SQL delOracle
Database
e
N
b
a
O
I
Navegue a http://www.oracle.com/pls/db102/homepage
para acceder a la biblioteca de
er
C
f
s
A
documentacin
D detrOracle
an Database 10g.
N
U
Navegue
para acceder a la biblioteca de
n
F na ohttp://www.oracle.com/pls/db112/homepage
documentacin de Oracle Database 11g versin 2.

Oracle Database: Conceptos Fundamentales de SQL II I-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recursos Adicionales
Para obtener ms informacin sobre Oracle Database 11g
SQL, consulte:
Oracle Database 11g: New Features eStudies
Oracle by Example series (OBE): Oracle Database 11g

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin debe haber aprendido lo siguiente:
Los objetivos del curso
Las tablas de ejemplo utilizadas en el curso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II I-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica I: Visin General


En esta prctica se abordan los siguientes temas:
Ejecucin del tutorial en lnea de SQL Developer
Inicio de SQL Developer y creacin de una nueva
conexin a la base de datos y examen de las tablas
Ejecucin de sentencias SQL mediante la hoja de trabajo
de SQL
Revisin de los conceptos bsicos de SQL

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica I: Visin General
le
N
b
a
O
En esta prctica,
SQL
erDeveloper para ejecutar sentencias SQL.
CIutiliza
f
s
A
D las prcticas
Nota: N
todas
an escritas utilizan SQL Developer como entorno de desarrollo. Aunque se
r
t
U
recomienda
n SQL Developer, tambin puede usar el entorno SQL*Plus disponible en este
F noutilizar
curso.

Oracle Database: Conceptos Fundamentales de SQL II I-23

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Control del Acceso de los Usuarios

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Diferenciar entre privilegios de sistema y privilegios de
objeto
Asignar privilegios en tablas
Asignar roles
Distinguir entre privilegios y roles

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I
En este leccin,
aprender
ea rcontrolar el acceso a la base de datos para especificar objetos y agregar
C
f
s
A
nuevos usuarios
niveles de privilegios de acceso.
n
radiferentes
ND n-con
t
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 1-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Privilegios del sistema


Creacin de roles
Privilegios de objeto
Revocacin de privilegios de objeto

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 1-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Control del Acceso de los Usuarios

Administrador de
base de datos

Privilegios de nombre de usuario


y contrasea

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Control del Acceso de los Usuarios
le
N
b
a
O
En un entorno C
deIvarios usuarios,
er desea mantener la seguridad del uso y acceso a la base de datos.
f
s
A
Con la seguridad
deala
de datos del servidor de Oracle, puede realizar lo siguiente:
r nbase
ND nel-tacceso

Controlar
a
la
base de datos.
U
F Proporcionar
no acceso a objetos especficos en la base de datos.
Usuarios

Confirmar los privilegios asignados y recibidos con el diccionario de datos de Oracle.


La seguridad de la base de datos se puede clasificar en dos categoras: seguridad del sistema y de
datos. La seguridad del sistema cubre el acceso y el uso de la base de datos a nivel del sistema, como
nombre de usuario y contrasea, el espacio de disco asignado a los usuarios y las operaciones que los
usuarios pueden realizar. La seguridad de la base de datos cubre el acceso y el uso de los objetos de
la base de datos as como las acciones que dichos usuarios puedan realizar en los objetos.

Oracle Database: Conceptos Fundamentales de SQL II 1-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Privilegios

Seguridad de la base de datos:


Seguridad del sistema
Seguridad de datos

Privilegios del sistema: realizacin de una accin


determinada en la base de datos
Privilegios de objeto: manipulacin del contenido de los
objetos de la base de datos
Esquemas: recopilacin de objetos como tablas, vistas y
secuencias
g)

a
s
a
h
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Privilegios
le
N
b
a
O
I derechofearejecutar sentencias SQL determinadas. El administrador de la base de
Un privilegio es
el
C
A
datos (DBA)
ns de alto de nivel con la capacidad de crear y otorgar acceso a los usuarios a
D es untrausuario
N
laFbase
U de datos
n-y sus objetos. Los usuarios necesitan los privilegios del sistema para acceder a la
o
n
base de datos y los privilegios de objeto para manipular el contenido de los objetos en la base de

datos. Los usuarios tambin proporcionan el privilegios para otorgar privilegios adicionales a otros
usuarios o a los roles, que son grupos con nombres de privilegios relacionados.
Esquemas
Un esquema es una recopilacin de objetos como tablas, vistas y secuencias. El esquema es
propiedad de un usuario de base de datos y tiene el mismo nombre que el usuario.
Un privilegio del sistema es el derecho para realizar una accin determinada o para realizar una
accin en objetos de esquema de un tipo determinado. Un privilegio de objeto proporciona al usuario
la capacidad de realizar una accin determinada en un objeto de esquema especfico.
Para obtener ms informacin, consulte el manual de referencia Oracle Database 2 Day DBA (DBA
de 2 Das de Oracle Database) para base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL II 1-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Privilegios del Sistema

Ms de 100 privilegios disponibles.


El administrador de la base de datos tiene privilegios del
sistema de alto nivel para realizar tareas como:

Creacin de nuevos usuarios


Eliminacin de usuarios
Eliminacin de tablas
Realizacin de copias de seguridad de tablas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
Privilegios del SistemaPR
le disponibles para usuarios y roles. Normalmente, el
N
b
Hay ms de 100 privilegios
del
sistema
a
O
r
I
edatos
C
f
s
administrador
de la base
de
(DBA) proporciona los privilegios del sistema.
A
D tran
N
- Tpicos
Privilegios
FU nodenDBA
Privilegio del Sistema

Operaciones Autorizadas

CREATE USER

El usuario con privilegios puede crear otros usuarios de


Oracle.

DROP USER

El usuario con privilegios puede borrar otro usuario.

DROP ANY TABLE

El usuario con privilegios puede borrar una tabla en cualquier


esquema.

BACKUP ANY TABLE

El usuario con privilegios puede realizar una copia de


seguridad de tablas en cualquier esquema con la utilidad de
exportacin.

SELECT ANY TABLE

El usuario con privilegios puede consultar las tablas, vistas o


vistas materializadas en cualquier esquema.

CREATE ANY TABLE

El usuario con privilegios puede crear una tabla en cualquier


esquema.

Oracle Database: Conceptos Fundamentales de SQL II 1-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de un Usuario
El DBA crea el usuario con la sentencia CREATE USER.
CREATE USER user
IDENTIFIED BY
password;
CREATE USER demo
IDENTIFIED BY demo;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de un Usuario
le
N
b
a
O
El DBA crea el usuario
I mediante
er la ejecucin de la sentenciaCREATE USER. El usuario no tiene
C
f
s
A
ningn privilegio
en
n punto. El DBA puede otorgar los privilegios a dicho usuario. Estos
aeste
r
NDdeterminan
t
privilegios
lo que el usuario puede realizar a nivel de base de datos.
U
F non
La diapositiva muestra la sintaxis abreviada para crear un usuario.
En la sintaxis:
user
Password

es el nombre del usuario que se va a crear


especifica que el usuario se debe conectar con esta contrasea

Para obtener ms informacin, consulte Oracle Database SQL Reference (Referencia de SQL de
Oracle Database) para base de datos 10g u 11g.
Nota: a partir de Oracle Database 11g, las contraseas son sensibles a maysculas/minsculas.

Oracle Database: Conceptos Fundamentales de SQL II 1-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Privilegios del Sistema de Usuario

Una vez creado un usuario, el DBA puede otorgar


privilegios del sistema especficos a dicho usuario.

GRANT privilege [, privilege...]


TO user [, user| role, PUBLIC...];

Un desarrollador de aplicaciones, por ejemplo, puede


tener los siguientes privilegios del sistema:

CREATE
CREATE
CREATE
CREATE
CREATE

SESSION
TABLE
SEQUENCE
VIEW
PROCEDURE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Privilegios de Usuario Tpicosle
b el DBA puede asignar privilegios a dicho usuario.
a
ION
Una vez que elC
DBA
crea e
unrusuario,
A ansf
D
r
Privilegio
Operaciones Autorizadas
-tSistema
UN odel
n
FCREATE
n SESSION
Conectar a la base de datos.
CREATE TABLE

Crear tablas en el esquema del usuario.

CREATE SEQUENCE

Crear una secuencia en el esquema del usuario.

CREATE VIEW

Crear una vista en el esquema del usuario.

CREATE PROCEDURE

Crear un paquete, funcin o procedimiento almacenado en el


esquema del usuario.

En la sintaxis:
privilege
user
|role|PUBLIC

es el privilegio del sistema que se va a otorgar


es el nombre del usuario, el nombre del rol o PUBLIC
(que designa que se asigne el privilegio a todos los usuarios)
Nota: los privilegios del sistema actuales estn en la vista de diccionario SESSION_PRIVS.
El diccionario de datos es una recopilacin de tablas y vistas que crea y mantiene el servidor de
Oracle. Contienen informacin sobre la base de datos.
Oracle Database: Conceptos Fundamentales de SQL II 1-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Asignacin de Privilegios del Sistema


El DBA puede otorgar privilegios del sistema especficos a un
usuario.
GRANT
TO

create session, create table,


create sequence, create view
demo;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
RdelOSistema
l
Asignacin de Privilegios
P
le
N
b
a
O
El DBA utiliza laIsentencia
para asignar privilegios del sistema al usuario. Una vez que el
r
eGRANT
C
f
s
A
usuario ha
n privilegios, el usuario puede utilizar estos privilegios inmediatamente.
Dotorgado
alos
r
N
t
U
En
nde la diapositiva, al usuario demo se le ha asignado el privilegio para crear sesiones,
Fel ejemplo
o
n
tablas, secuencias y vistas.

Oracle Database: Conceptos Fundamentales de SQL II 1-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Privilegios del sistema


Creacin de roles
Privilegios de objeto
Revocacin de privilegios de objeto

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 1-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Qu es un Rol?

Usuarios

Gestor

s
a
h
rg)
Privilegios
o

sa ide
e
d
u
Asignacin de privilegios
Asignacin
yde privilegios
G
o
r
t
p
n
sin un rol
con un
erol
@
d
n
u
t
io
S
c
a
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Qu es un Rol?
le
N
b
a
O
I con nombre
Un rol es un grupo
er de privilegios relacionados que se pueden otorgar al usuario. Este
C
f
s
A
mtodo facilita
y el mantenimiento de los privilegios.
D latrrevocacin
an
N
U
Un
n tener acceso a diferentes roles y el mismo rol se puede asignar a diferentes
Fusuarionopuede
usuarios. Los roles normalmente se crean para una aplicacin de base de datos.

Creacin y Asignacin de Roles


En primer lugar, el DBA debe crear el rol. A continuacin, el DBA puede asignar privilegios al rol y
asignar dicho rol a los usuarios.
Sintaxis
CREATE

ROLE role;

En la sintaxis:
role
es el nombre del rol que se va a crear
Despus de crear el rol, el DBA puede utilizar la sentencia GRANT para asignar el rol a los usuarios,
as como asignar privilegios al rol. Un rol no es un objeto de esquema; por lo tanto, cualquier usuario
puede agregar privilegios a un rol.

Oracle Database: Conceptos Fundamentales de SQL II 1-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin y Asignacin de Privilegios a un Rol

Crear un rol:

CREATE ROLE manager;

Otorgar privilegios a un rol:

GRANT create table, create view


TO manager;

a
s
a
)h
g
r
o e
a
GRANT manager TO alice;
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de un Rol
le
N
b
a
O
El ejemplo de la Idiapositiva
y, a continuacin, permite al gestor crear tablas y
ercrea elunrolroldemanager
C
f
s
A
vistas. Otorga
al
usuario
alice
un
gestor.
Ahora alice puede crear tablas y vistas.
D tran
N
Uusuarios
SiFlos
nontiene varios roles otorgados, reciben todos los privilegios asociados a todos los roles.

Otorgar un rol a los usuarios:

Oracle Database: Conceptos Fundamentales de SQL II 1-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cambio de Contrasea

El DBA crea la cuenta de usuario e inicializa la


contrasea.
Puede cambiar la contrasea mediante la sentencia
ALTER USER.

ALTER USER demo


IDENTIFIED BY employ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Cambio de Contrasea
le
N
b
a
O
r
El DBA crea una
una contrasea para cada usuario. Puede cambiar la contrasea
CIcuentasefeinicializa
medianteD
la A
sentencianALTER
USER.
ra
UN odenla-tdiapositiva
ElFejemplo
muestra que el usuario demo cambia la contrasea mediante la sentencia
n
ALTER USER.
Sintaxis
ALTER USER user IDENTIFIED BY password;
En la sintaxis:
user
password

es el nombre del usuario


especifica la nueva contrasea

Aunque esta sentencia se puede utilizar para cambiar la contrasea, hay otras muchas opciones. Debe
tener el privilegio ALTER USER para cambiar cualquier otra opcin.
Para obtener ms informacin, consulte Oracle Database SQL Reference (Referencia de SQL de
Oracle Database) para base de datos 10g u 11g.
Nota: SQL*Plus tiene un comando PASSWORD (PASSW) que se puede utilizar para cambiar la
contrasea de un usuario al conectarse. Este comando no est disponible en SQL Developer.

Oracle Database: Conceptos Fundamentales de SQL II 1-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Privilegios del sistema


Creacin de roles
Privilegios de objeto
Revocacin de privilegios de objeto

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 1-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Privilegios de Objeto

Privilegio
de objeto

Tabla

Vista

Secuencia

ALTER
DELETE
INDEX
INSERT

a
s
a
REFERENCES
)h
g
r
o e
a
SELECT
s
de Guid
y
o
pr ent
UPDATE
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Privilegios de Objeto
le
N
b
a
O
Iobjeto esfeunr privilegio o derecho para realizar una accin determinada en una tabla,
Un privilegio de
C
A
vista, secuencia
especfico. Cada objeto tiene un juego determinado de privilegios
ns
D otrprocedimiento
a
N
que
se
pueden
otorgar.
La
tabla
de
la diapositiva muestra los privilegios para varios objetos. Tenga
U
n
F
o
n
en cuenta que los nicos privilegios que se aplican a una secuencia son SELECT y ALTER. UPDATE,
REFERENCES e INSERT se pueden restringir especificando un subjuego de columnas actualizables.
Un privilegio SELECT se puede restringir mediante la creacin de una vista con un subjuego y
otorgamiento del privilegio SELECT slo en la vista. Un privilegio otorgado en un sinnimo se
convierte en un privilegio en la tabla base a la que hace referencia el sinnimo.
Nota: con el privilegio REFERENCES, puede garantizar que otros usuarios pueden crear
restricciones FOREIGN KEY que hacen referencia a la tabla.

Oracle Database: Conceptos Fundamentales de SQL II 1-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Privilegios de Objeto

Los privilegios de objeto varan de objeto a objeto.


Un propietario tiene todos los privilegios sobre el objeto.
Un propietario puede proporcionar privilegios especficos
sobre el objeto de dicho propietario.
GRANT
object_priv [(columns)]
ON
object
TO
{user|role|PUBLIC}
[WITH GRANT OPTION];

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Asignacin de Privilegios de Objeto
le
N
b
a
O
r
I
Hay disponibles
diferentes
de objeto para distintos tipos de objetos de esquema. Un
eprivilegios
C
f
s
A
usuario automticamente
todos los privilegios de objeto para los objetos de esquema que estn
an tiene
ND nde-trusuario.
enFelUesquema
Un usuario puede otorgar privilegios de objeto sobre cualquier objeto de
o el usuario posea a otro usuario o rol. Si la asignacin incluye WITH GRANT OPTION,
esquema n
que
el usuario con privilegios puede otorgar el privilegio de objeto a otros usuarios; de lo contrario, el
usuario con privilegios puede utilizar el privilegio pero no puede otorgarlo a otros usuarios.
En la sintaxis:
object_priv
es un privilegio de objeto que se va a otorgar
ALL
especifica todos los privilegios de objeto
columns
especifica la columna de una tabla o vista en la que
se otorgan los privilegios
ON object
es el objeto sobre el que se otorgan los privilegios
TO
identifica a quin se le otorga el privilegio
PUBLIC
otorga privilegios de objeto a todos los usuarios
WITH GRANT OPTION
permite al usuario con privilegios otorgar privilegios de
objeto a otros usuarios y roles
Nota: en la sintaxis, schema es el mismo nombre que el del propietario.

Oracle Database: Conceptos Fundamentales de SQL II 1-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Asignacin de Privilegios de Objeto

Otorgar privilegios de consulta en la tabla EMPLOYEES:

GRANT
ON
TO

select
employees
demo;

Otorgar privilegios para actualizar columnas especficas


en los usuarios y roles:

GRANT
ON
TO

update (department_name, location_id)


departments
demo, manager;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
A tolosuderechos reservados.
Copyright 2010,S
Oracle. Todos
E
D nse
Y
O lice
R
P
Instrucciones
le
N
b
a
O
Para otorgar
un objeto, el objeto debe estar en el propio esquema o debe otorgar
erenWITH
CIprivilegios
f
s
A
los privilegios
de
objeto
GRANT OPTION.
D tran
N
- de objeto puede otorgar privilegios de objeto en el objeto a cualquier otro usuario
F UoUnrolpropietario
ndeolanbase de datos.
El propietario de un objeto adquiere automticamente todos los privilegios de objeto en dicho
objeto.
En el primer ejemplo de la diapositiva, se otorga al usuario demo el privilegio para consultar la tabla
EMPLOYEES. El segundo ejemplo, se otorgan los privilegios UPDATE sobre columnas especficas en
la tabla DEPARTMENTS a demo y al rol manager.
Por ejemplo, si el esquema es oraxx y el usuario demo, ahora desea utilizar una sentencia SELECT
para obtener los datos de la tabla EMPLOYEES, la sintaxis que debe utilizar es:
SELECT

* FROM oraxx.employees;

Asimismo, el usuario demo puede crear un sinnimo para la tabla y ejecutar una sentencia SELECT
a partir del sinnimo:
CREATE SYNONYM emp FOR oraxx.employees;
SELECT * FROM emp;

Nota: los DBA generalmente asignan privilegios del sistema; los usuarios que poseen un objeto
pueden otorgar privilegios de objeto.
Oracle Database: Conceptos Fundamentales de SQL II 1-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Transferencia de Privilegios

Proporcionar una autoridad de usuario para transferir


privilegios:

GRANT
ON
TO
WITH

select, insert
departments
demo
GRANT OPTION;

Permitir a todos los usuarios del sistema consultar datos


de la tabla DEPARTMENTS de Alice:

a
s
a
)h
g
r
GRANT select
o e
a
s
ON
alice.departments
de Guid
y
o
TO
PUBLIC;
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Transferencia de Privilegios le
bOPTION
a
Palabra clave WITH
r
IONGRANT
e
C
A ansf puede transferir un privilegio que se otorga con la clusula WITH GRANT
El usuarioDcon privilegios
r
N n-tusuarios
OPTION
y roles. Los privilegios de objeto otorgados con la clusula WITH GRANT
FU na ootros
OPTION se revocan si se revoca el privilegio del otorgante.
El ejemplo de la diapositiva proporciona al usuario demo acceso a la tabla DEPARTMENTS con los
privilegios para consultar la tabla y agregar filas a la tabla. El ejemplo tambin muestra que user1
puede proporcionar el resto de estos privilegios.
Palabra clave PUBLIC
Un propietario de una tabla puede otorgar acceso a todos los usuarios mediante la palabra clave
PUBLIC.
El segundo ejemplo de la diapositiva permite a todos los usuarios del sistema consultar datos de la
tabla DEPARTMENTS de Alice.

Oracle Database: Conceptos Fundamentales de SQL II 1-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Confirmacin de Privilegios Otorgados


Vista del Diccionario de Datos

Descripcin

ROLE_SYS_PRIVS

Privilegios del sistema otorgados a roles

ROLE_TAB_PRIVS

Privilegios de tabla otorgados a roles

USER_ROLE_PRIVS

Roles a los que puede acceder el usuario

USER_SYS_PRIVS

Privilegios del sistema otorgados al usuario

USER_TAB_PRIVS_MADE

Privilegios de objeto otorgados a objetos del usuario

USER_TAB_PRIVS_RECD

Privilegios de objeto otorgados al usuario

a
s
a
)h
g
r
oobjetos
USER_COL_PRIVS_MADE Privilegios de objeto otorgados a columnasade
s
e
e
d
i
del usuario
d
oy nt Gu
r
p
al usuario
USER_COL_PRIVS_RECD Privilegios de objeto otorgados
e en columnas
@
d
n
u
especficas
t
io
S
c
a
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Confirmacin de Privilegios Otorgados
le
N
b
a
O
Si intenta realizar
operacin
autorizada, como la supresin de una fila de una tabla para la que
CI unanDELETE,
fer elnoservidor
s
A
no tiene el
privilegio
de Oracle no permite que se produzca la operacin.
D tra
N
U elomensaje
SiFrecibe
n- de error del servidor de Oracle Table or view does not exist, es porque ha
n
realizado una de las siguientes acciones:
Asignar un nombre a una tabla o vista que no existe
Intentar realizar una operacin en una tabla o vista para la que no tiene el privilegio adecuado
El diccionario de datos se organiza en tablas y vistas y contiene informacin sobre la base de datos.
Puede acceder al diccionario de datos para ver los privilegios que tiene. La tabla de esta diapositiva
describe varias vistas de diccionario de datos.
Dispone de ms informacin sobre las vistas de diccionario de datos en la leccin Gestin de
Objetos con Vistas de Diccionario de Datos.
Nota: la vista de diccionario ALL_TAB_PRIVS_MADE describe todas las otorgaciones de objeto
realizadas por el usuario en los objetos propiedad del usuario.

Oracle Database: Conceptos Fundamentales de SQL II 1-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Privilegios del sistema


Creacin de roles
Privilegios de objeto
Revocacin de privilegios de objeto

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 1-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revocacin de Privilegios de Objeto

Utilice la sentencia REVOKE para revocar los privilegios


otorgados a otros usuarios.
Los privilegios otorgados a otros usuarios mediante la
clusula WITH GRANT OPTION tambin se revocan.

REVOKE {privilege [, privilege...]|ALL}


ON
object
FROM
{user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revocacin de Privilegios de Objeto
le
N
b
a
O
Puede eliminar los
a otros usuarios mediante la sentencia REVOKE.
er otorgados
CI privilegios
f
s
Al utilizarDlaAsentencia
REVOKE,
los
privilegios
especificados se revocan de los usuarios que nombra
n
a
r
N
t
- usuario al que el usuario revocado otorgue dichos privilegios.
yF
deU
cualquiernotro
o
n
En la sintaxis:
CASCADE

es necesario para eliminar las restricciones de integridad referencial


realizadas en el objeto CONSTRAINTS mediante el privilegio
REFERENCES

Para obtener ms informacin, consulte Oracle Database SQL Reference (Referencia de SQL de
Oracle Database) para base de datos 10g u 11g.
Nota: si un usuario deja la compaa y revoca sus privilegios, debe volver a otorgar los privilegios
que este usuario podra haber otorgado a otros usuarios. Si borra la cuenta de usuario sin revocar los
privilegios, los privilegios del sistema otorgados por este usuario a otros usuarios no se vern
afectados por esta accin.

Oracle Database: Conceptos Fundamentales de SQL II 1-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Revocacin de Privilegios de Objeto


Revocar los privilegios SELECT e INSERT proporcionados al
usuario demo en la tabla DEPARTMENTS.
REVOKE
ON
FROM

select, insert
departments
demo;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Revocacin de Privilegios de Objeto
le (continuacin)
N
b
a
O
El ejemplo de la Idiapositiva
C nsferrevoca los privilegios SELECT e INSERT proporcionados al usuario
demo enD
la A
tabla DEPARTMENTS.
ra se le otorga un privilegio con la clusula WITH GRANT OPTION, dicho usuario
N
t
U
Nota:
si
a
un
usuario
n
F no
tambin puede
otorgar el privilegio con la clusula WITH GRANT OPTION, de modo que es posible
crear una larga cadena de usuarios con privilegios, pero no se permiten permisos circulares (otorgado
al antiguo otorgante). Si el propietario revoca un privilegio de un usuario que ha otorgado el
privilegio a otros usuarios, la revocacin tiene un efecto cascada en todos los privilegios otorgados.
Por ejemplo, si el usuario A otorga un privilegio SELECT en una tabla al usuario B incluyendo la
clusula WITH GRANT OPTION, el usuario B puede otorgar al usuario C el privilegio SELECT
tambin con la clusula WITH GRANT OPTION y el usuario C puede otorgar al usuario D el
privilegio SELECT. Si el usuario A revoca los privilegios del usuario B, los privilegios otorgados a
los usuarios C y D tambin se revocan.

Oracle Database: Conceptos Fundamentales de SQL II 1-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Cules de las siguientes afirmaciones son ciertas?
1. Una vez que el usuario crea un objeto, el usuario puede
transferir los privilegios de objeto disponibles a otros
usuarios mediante la sentencia GRANT.
2. Un usuario puede crear roles mediante la sentencia
CREATE ROLE para transferir una recopilacin de
privilegios de objeto o de sistema a otros usuarios.
3. Los usuarios pueden cambiar sus propias contraseas.
4. Los usuarios pueden ver los privilegios otorgados a losg)
r
mismos y aquellos otorgados en sus objetos.
ao

has
de

es ui
d
y
ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuestas: 1, 3, 4
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 1-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Diferenciar entre privilegios de sistema y privilegios de
objeto
Asignar privilegios en tablas
Asignar roles
Distinguir entre privilegios y roles

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
I la seguridad
Los DBA establecen
er de base de datos inicial de los usuarios asignando privilegios a los
C
f
s
A
usuarios.D
an que deben tener una contrasea. El DBA es responsable de establecer los
rusuarios
NDBA ncrea
t

El
U
F privilegios
no del sistema inicial para un usuario.
Una vez que el usuario crea un objeto, el usuario puede transferir los privilegios de objeto
disponibles a otros usuarios mediante la sentencia GRANT.
Un DBA puede crear roles mediante la sentencia CREATE ROLE para transferir una
recopilacin de privilegios de objeto o de sistema a varios usuarios. Los roles que se utilizan
para otorgar y revocar privilegios son fciles de mantener.
Los usuarios pueden cambiar la contrasea mediante la sentencia ALTER USER.
Puede eliminar privilegios de los usuarios mediante la sentencia REVOKE.
Con las vistas de diccionario de datos, los usuarios pueden ver los privilegios otorgados a los
mismos y aquellos otorgados en sus objetos.

Oracle Database: Conceptos Fundamentales de SQL II 1-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 1: Visin General


En esta prctica se abordan los siguientes temas:
Asignacin de otros privilegios de usuarios a la tabla
Modificacin de otra tabla de usuario mediante los
privilegios que se le han otorgado

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 1: Visin General
le
N
b
a
O
I con otros
Trabaje en equipo
erestudiantes en este ejercicio sobre el control de acceso a objetos de la
C
f
s
A
base de datos.
ND n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 1-25

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Gestin de Objetos de Esquema

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Agregar restricciones
Crear ndices
Crear ndices mediante la sentencia CREATE TABLE

Crear ndices basados en funciones


Borrar columnas y definir columnas como UNUSED
Realizar operaciones FLASHBACK

s
a
h
rg)
Crear y utilizar tablas externas
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I informacin
Esta leccin contiene
er sobre la creacin de ndices y restricciones, as como la
C
f
s
A
modificacin
de objetos
existentes. Tambin aprender sobre las tablas externas y la provisin para
aalnndice
r
NunDnombre
t
asignar
en el momento de la creacin de una restriccin PRIMARY KEY.
U
F non

Oracle Database: Conceptos Fundamentales de SQL II 2-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Uso de la sentencia ALTER TABLE para agregar, modificar


y borrar una columna
Gestin de restricciones:
Adicin y borrado de una restriccin
Restricciones diferidas
Activacin y desactivacin de una restriccin

Creacin de ndices:
Uso de la sentencia CREATE TABLE

s
a
h
Creacin de ndices basados en funciones
rg)
o

Eliminacin de ndices
sa ide
e
d
u
Realizacin de operaciones de flashback roy
G
t
p
en
@
d
Creacin y uso de tablas temporales
n
u
t
io
S
c
a
s
i
d
Creacin y uso de tablas externas
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia ALTER TABLE


Utilizar la sentencia ALTER TABLE para:

Agregar una nueva columna


Modificar una columna existente
Definir un valor por defecto para la nueva columna
Borrar una columna

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia ALTER TABLE
P
Ntabla, puede
bl que necesite cambiar la estructura de la tabla porque ha omitido
a
O
r
I
Despus de crear
una
fe la definicin de la columna o necesita eliminar columnas. Para ello,
s
AseCdebe
una columna,
cambiar
n
D
ra ALTER TABLE.
N
puede
utilizarnla-tsentencia
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 2-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia ALTER TABLE


Utilizar la sentencia ALTER TABLE para agregar, modificar y
borrar columnas:
ALTER TABLE table
ADD
(column datatype [DEFAULT expr]
[, column datatype]...);
ALTER TABLE table
MODIFY
(column datatype [DEFAULT expr]
[, column datatype]...);

s
a
h
rg)
o

ALTER TABLE table


sa ide
e
d
DROP (column [, column] );
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia ALTER TABLE
(continuacin)
P
bl modificarlas y borrarlas de la tabla mediante la sentencia
ratabla,
ION faeuna
Puede agregarC
columnas
ALTER TABLE.
DA trans
N
En
nFlaUsintaxis:
o
n
table
es el nombre de la tabla
ADD|MODIFY|DROP
column
datatype
DEFAULT expr

es el tipo de modificacin
es el nombre de la columna
es el tipo de dato y la longitud de la columna
especifica el valor por defecto de una columna

Oracle Database: Conceptos Fundamentales de SQL II 2-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Adicin de Columnas

Puede utilizar la clusula ADD para agregar columnas:

ALTER TABLE dept80


ADD
(job_id VARCHAR2(9));

La nueva columna se convierte en la ltima:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Instrucciones para Agregar una
leColumna
N
b
a
O
I o modificar
Puede agregar
er columnas.
C
f
s
A
No puede
ran dnde debe aparecer la columna. La nueva columna se convierte en la
ND nespecificar
t
ltima.
U
F no
El ejemplo
de la diapositiva agrega una columna con el nombre JOB_ID a la tabla DEPT80.

La columna JOB_ID se convierte en la ltima columna de la tabla.


Nota: si una tabla ya contiene filas al agregar una columna, la nueva columna ser inicialmente nula
o utilizar el valor por defecto para todas las filas. Slo puede agregar una columna NOT NULL
obligatoria a una tabla que contenga datos en las dems columnas si especifica un valor por defecto.
Puede agregar una columna NOT NULL a una tabla vaca sin el valor por defecto.

Oracle Database: Conceptos Fundamentales de SQL II 2-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Modificacin de Columnas

Puede cambiar el tipo de dato, tamao y valor por defecto


de una columna.

ALTER TABLE dept80


MODIFY
(last_name VARCHAR2(30));

El cambio del valor por defecto slo afecta a las


inserciones posteriores en la tabla.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Modificacin de Columnas
le
N
b
a
O
Para modificar una
columna, utilice la sentencia ALTER TABLE con la clusula
eder ladecolumna
CI definicin
f
s
MODIFY.D
LaAmodificacin
puede incluir cambios en el tipo de dato, tamao y valor
n
a
r
N
t
- columna.
por
defecto denuna
FU
o
n
Instrucciones

Puede aumentar el ancho o la precisin de una columna numrica.


Puede aumentar el ancho de las columnas de caracteres.
Puede reducir el ancho de una columna si:
- La columna slo contiene valores nulos
- La tabla no tiene filas
- La disminucin del ancho de columna no es inferior a los valores existentes de dicha
columna
Puede cambiar el tipo de dato si la columna slo contiene valores nulos. La nica excepcin son
las conversiones de CHAR a VARCHAR2, que se pueden realizar con los datos de las columnas.
Slo puede convertir una columna CHAR al tipo de dato VARCHAR2 o una columna VARCHAR2
al tipo de dato CHAR si la columna contiene valores nulos o si no cambia el tamao.
El cambio del valor por defecto de una columna slo afecta a las inserciones posteriores en la
tabla.

Oracle Database: Conceptos Fundamentales de SQL II 2-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Borrado de Columnas
Utilizar la clusula DROP COLUMN para borrar columnas que ya
no son necesarias de la tabla:
ALTER TABLE
DROP COLUMN

dept80
job_id;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Borrado de Columnas
le
N
b
a
O
Para borrar una columna
CI nsfdeerla tabla, utilice la sentencia ALTER TABLE con la clusula DROP
COLUMN.DA
N n-tra
U
Instrucciones
F no
La columna puede o no contener datos.

Con la sentencia ALTER TABLE DROP COLUMN, slo se puede borrar una columna cada vez.
Debe quedar al menos una columna en la tabla despus de modificarla.
Despus de borrar una columna, no se puede recuperar.
Una columna no se puede borrar si forma parte de una restriccin o de una clave de ndice a
menos que se agregue la opcin Cascade.
El borrado de una columna puede tardar un rato si tiene muchos valores. En este caso, puede ser
mejor definirla para que no se utilice y borrarla cuando haya menos usuarios en el sistema para
evitar bloqueos ampliados.
Nota: no se pueden borrar determinadas columnas, como las columnas que forman parte de la clave
de particin de una tabla particionada o las columnas que forman parte de la CLAVE PRIMARIA de
una tabla organizada por ndices. Para obtener ms informacin sobre las tablas organizadas por
ndices y la tabla particionada, consulte Oracle Database Concepts (Conceptos de Oracle Database)
y Oracle Database Administrators Guide (Gua del Administrador de Oracle Database).

Oracle Database: Conceptos Fundamentales de SQL II 2-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Opcin SET UNUSED

Puede utilizar la opcin SET UNUSED para marcar una o


ms columnas como no utilizadas.
Puede utilizar la opcin DROP UNUSED COLUMNS para
eliminar las columnas marcadas como no utilizadas.

ALTER
SET
O
ALTER
SET

TABLE <table_name>
UNUSED(<column_name> [ , <column_name>]);

a
s
a
h
g
r
o e
a
ALTER TABLE <table_name>
s
de Guid
y
DROP UNUSED COLUMNS;
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O
ce
Opcin SET UNUSED PR le li
La opcin SET UNUSED
rabuna o ms columnas como no utilizadas para que se puedan borrar
ION fmarca
e
C
s
A adenrecursos
cuando laD
demanda
del sistema sea menor. La especificacin de esta clusula no elimina
r
N
t
realmente
las
columnas
de
destino
de cada fila de la tabla (es decir, no restaura el espacio en disco
U
n
F
o
n
utilizado por estas columnas). Por lo tanto, el tiempo de respuesta es ms rpido que si se ejecutara la
TABLE <table_name>
UNUSED COLUMN <column_name> [ , <column_name>];)

clusula DROP. Las columnas no utilizadas se tratan como si se hubieran borrado, aunque sus datos
de columna permanezcan en las filas de la tabla. Despus de que una columna se haya marcado como
no utilizada, no tendr acceso a dicha columna. Las consultas SELECT * no recuperarn datos de
las columnas marcadas como no utilizadas. Adems, los nombres y tipos de columnas marcados
como no utilizados no se mostrarn durante la sentencia DESCRIBE y podr agregar a la tabla una
nueva columna con el mismo nombre que la columna no utilizada. La informacin de SET UNUSED
se almacena en la vista del diccionario de datos USER_UNUSED_COL_TABS.
Nota: las instrucciones para definir una columna como UNUSED son similares a las instrucciones
para borrar una columna.

Oracle Database: Conceptos Fundamentales de SQL II 2-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Opcin SET UNUSED (continuacin)


Opcin DROP UNUSED COLUMNS
DROP UNUSED COLUMNS elimina de la tabla todas las columnas marcadas actualmente como no
utilizadas. Puede utilizar esta sentencia cuando desee reclamar el espacio en disco adicional de las
columnas no utilizadas en la tabla. Si la tabla no contiene columnas no utilizadas, la sentencia no
devuelve ningn error.
ALTER TABLE dept80
SET
UNUSED (last_name);
ALTER TABLE succeeded
ALTER TABLE dept80
DROP UNUSED COLUMNS;
ALTER TABLE succeeded

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Uso de la sentencia ALTER TABLE para agregar, modificar


y borrar una columna
Gestin de restricciones:
Adicin y borrado de una restriccin
Restricciones diferidas
Activacin y desactivacin de una restriccin

Creacin de ndices:
Uso de la sentencia CREATE TABLE

s
a
h
Creacin de ndices basados en funciones
rg)
o

Eliminacin de ndices
sa ide
e
d
u
Realizacin de operaciones de flashback roy
G
t
p
en
@
d
Creacin y uso de tablas temporales
n
u
t
io
S
c
a
s
i
d
Creacin y uso de tablas externas
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Adicin de Sintaxis de Restriccin


Utilizar la sentencia ALTER TABLE para:

Agregar o borrar una restriccin, pero sin modificar su


estructura
Activar o desactivar restricciones
Agregar una restriccin NOT NULL mediante la clusula
MODIFY

ALTER TABLE <table_name>


ADD [CONSTRAINT <constraint_name>]
type (<column_name>);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Adicin de Restricciones
le
N
b
a
O
Puede agregar una
er para las tablas existentes mediante la sentencia ALTER TABLE con la
CI restriccin
f
s
A
clusula ADD.
D tran
N
U
En
nFla sintaxis:
o
n
table
es el nombre de la tabla
constraint
type
column

es el nombre de la restriccin
es el tipo de restriccin
es el nombre de la columna a la que afecta la restriccin

La sintaxis de nombre de las restricciones es opcional, aunque se recomienda. Si no asigna un


nombre a las restricciones, el sistema genera nombres de restricciones.
Instrucciones
Puede agregar, borrar, activar o desactivar una restriccin, pero no puede modificar su
estructura.
Puede agregar una restriccin NOT NULL a una columna existente mediante la clusula MODIFY
de la sentencia ALTER TABLE.
Nota: slo puede definir una columna NOT NULL si la tabla est vaca o si la columna tiene un valor
para cada fila.

Oracle Database: Conceptos Fundamentales de SQL II 2-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Adicin de Restricciones
Agregar una restriccin FOREIGN KEY a la tabla EMP2 que
indique que un gestor ya debe existir como empleado vlido en
la tabla EMP2.
ALTER TABLE emp2
MODIFY employee_id PRIMARY KEY;
ALTER TABLE emp2
ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(manager_id)
REFERENCES emp2(employee_id);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Adicin de Restricciones (continuacin)
le
N
b
a
O
El primer ejemplo
modifica la tabla EMP2 para agregar una restriccin PRIMARY
I de la diapositiva
er
f
s
AC EMPLOYEE_ID.
KEY a la D
columna
Observe que como no se proporciona ningn nombre de
n
a
r
N
t
restriccin,
de Oracle asigna automticamente un nombre a la restriccin. El segundo
U oelnservidor
F
n
ejemplo de la diapositiva crea una restriccin FOREIGN KEY en la tabla EMP2. La restriccin
garantiza que un gestor exista como empleado vlido en la tabla EMP2.

Oracle Database: Conceptos Fundamentales de SQL II 2-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula ON DELETE

Utilizar la clusula ON DELETE CASCADE para suprimir filas


secundarias al suprimir una clave principal:
ALTER TABLE emp2 ADD CONSTRAINT emp_dt_fk
FOREIGN KEY (Department_id)
REFERENCES departments(department_id) ON DELETE CASCADE;

Utilizar la clusula ON DELETE SET NULL para definir el valor


de filas secundarias en nulo al suprimir una clave principal:

s
a
h
rg)
ALTER TABLE emp2 ADD CONSTRAINT emp_dt_fk
o

sa ide
FOREIGN KEY (Department_id)
e
d
REFERENCES departments(department_id) ON rDELETE
Gu NULL;
oy nt SET
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
ON DELETE
P
N
bl puede determinar cmo maneja Oracle Database la integridad
a
O
Mediante la clusula
ON DELETE
r
I
C nunsvalor
fe de clave primaria o nica al que se hace referencia.
Aelimina
referencial
si
D
ra
N
t
ON
DELETE
CASCADE
U
n
F La accin
no ON DELETE CASCADE permite suprimir, pero no actualizar los datos de clave

principal a los que se hace referencia desde la tabla secundaria. Al suprimir datos de la clave
principal, todas las filas de la tabla secundaria que dependen de los valores de clave principal se
suprimen tambin. Para especificar esta accin de referencial, incluya la opcin ON DELETE
CASCADE en la definicin de la restriccin FOREIGN KEY.
ON DELETE SET NULL
Al suprimir datos de la clave principal, la accin ON DELETE SET NULL provoca que las filas
de la tabla secundaria que dependen del valor de clave principal suprimido se conviertan en
nulas.
Si omite esta clusula, Oracle no le permitir suprimir los valores de clave a los que se hace
referencia en la tabla principal que tiene filas dependientes en la tabla secundaria.

Oracle Database: Conceptos Fundamentales de SQL II 2-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restricciones Diferidas
Las restricciones pueden tener los siguientes atributos:
DEFERRABLE o NOT DEFERRABLE
INITIALLY DEFERRED o INITIALLY IMMEDIATE
ALTER TABLE dept2
ADD CONSTRAINT dept2_id_pk
PRIMARY KEY (department_id)
DEFERRABLE INITIALLY DEFERRED

Restriccin diferida en la
creacin

a
s
a
Cambio de un atributo) h
SET CONSTRAINTS dept2_id_pk IMMEDIATE
de restriccin especfico
rg
o

sa ide
e
d
Cambio
las u
ALTER SESSION
G
oyde todas
r
t
restricciones
para
una sesin
p
n
SET CONSTRAINTS= IMMEDIATE
e
@
d
n
tu
io
S
c
a
is
d
h
n
t
u
f
(
se
u
A
Copyright 2010,
Todos
tolos derechos reservados.
ESOracle.
e
D
s
OY licen
R
Restricciones DiferidasP
le
N
b
a
O
I
Puede diferir laCcomprobacin
er de la validez de las restricciones hasta que termine la transaccin. Una
f
s
A
restriccin
no comprueba si se ha satisfecho la restriccin, hasta que se enva
ransi Siel sistema
NDesndiferida
t
unaU
sentencia
COMMIT.
se viola una restriccin diferida, la base de datos devuelve un error y la
F nono se confirma y se realiza rollback de la misma. Si una restriccin es inmediata
transaccin
(no diferida), se comprueba al final de cada sentencia. Si se viola, se realiza rollback de la sentencia
inmediatamente. Si una restriccin provoca una accin (por ejemplo, DELETE CASCADE), esta
accin se realiza siempre como parte de la sentencia que la ha provocado, independientemente de si
la restriccin es diferida o inmediata. Utilice la sentencia SET CONSTRAINTS para especificar, para
una determinada transaccin, si una restriccin diferible se debe comprobar despus de cada
sentencia de lenguaje de manipulacin de datos (DML) o una vez confirmada la transaccin. Para
crear restricciones diferibles, debe crear ndices no nicos para dicha restriccin.
Puede definir restricciones como diferibles o no diferibles y como diferidas inicialmente o
inmediatas inicialmente. Estos atributos pueden ser diferentes para cada restriccin.
Ejemplo de uso: la poltica de la compaa determina que el departamento nmero 40 se debe
cambiar a 45. El cambio de la columna DEPARTMENT_ID afecta a los empleados asignados a este
departamento. Por lo tanto, convierte las claves PRIMARY KEY y FOREIGN KEY en diferibles y
diferidas inicialmente. Debe actualizar tanto la informacin de departamento como la de empleado y,
en el momento de la confirmacin, se validan todas las filas.
Oracle Database: Conceptos Fundamentales de SQL II 2-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Diferencia entre INITIALLY DEFERRED y


INITIALLY IMMEDIATE
INITIALLY DEFERRED

Espera a comprobar la restriccin


hasta que termina la transaccin

INITIALLY IMMEDIATE

Comprueba la restriccin al final de


la ejecucin de la sentencia

CREATE TABLE emp_new_sal (salary NUMBER


CONSTRAINT sal_ck
CHECK (salary > 100)
DEFERRABLE INITIALLY IMMEDIATE,
bonus NUMBER
CONSTRAINT bonus_ck
CHECK (bonus > 0 )
DEFERRABLE INITIALLY DEFERRED );

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce y INITIALLY IMMEDIATE
i
RODEFERRED
l
Diferencia entre INITIALLY
P
le
N
b
a
O
Una restriccin definida
como
se puede especificar como INITIALLY DEFERRED o
I
er Ladiferible
CIMMEDIATE.
f
s
A
INITIALLY
clusula
INITIALLY IMMEDIATE es el valor por defecto.
D tran
N
- la diapositiva:
En
el ejemplo
nde
FU
o
n
La restriccin sal_ck se crea como DEFERRABLE INITIALLY IMMEDIATE.

La restriccin bonus_ck se crea como DEFERRABLE INITIALLY DEFERRED.


Despus de crear la tabla emp_new_sal como se muestra en la diapositiva, intente insertar valores
en la tabla y observar los resultados. Cuando se satisfacen las restricciones sal_ck y bonus_ck,
las filas se insertan sin errores.
Ejemplo 1: inserte una fila que viole la restriccin sal_ck. En la sentencia CREATE TABLE,
sal_ck se especifica como una restriccin inmediata inicialmente. Esto significa que la restriccin
de verifica inmediatamente despus de que tanto la sentencia INSERT como el usuario observen un
error.
INSERT INTO emp_new_sal VALUES(90,5);

Ejemplo 2: inserte una fila que viole la restriccin bonus_ck. En la sentencia CREATE TABLE,
bonus_ck se especifica como diferible y como diferida inicialmente. Por lo tanto, la restriccin no
se verifica hasta que el usuario vuelve a CONFIRMAR o definir el estado de la restriccin como
inmediata.
Oracle Database: Conceptos Fundamentales de SQL II 2-16

Fundacin Proydesa
Diferencia entre INITIALLY DEFERRED y INITIALLY IMMEDIATE (continuacin)
INSERT INTO emp_new_sal VALUES(110, -1);

La fila se inserta correctamente. Sin embargo, observa un error al confirmar la transaccin.

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

COMMIT;

La confirmacin falla debido a una violacin de la restriccin. Por lo tanto, en este punto, la base de
datos realiza un rollback de la transaccin.
Ejemplo 3: defina el estado DEFERRED para todas las restricciones que se puedan diferir. Tenga en
cuenta que tambin puede definir el estado DEFERRED para una nica restriccin si es necesario.
SET CONSTRAINTS ALL DEFERRED;

Ahora, si intenta insertar una fila que viola la restriccin sal_ck, la sentencia se ejecuta
correctamente.

s
a
h
rg)un
o
Sin embargo, observa un error al confirmar la transaccin. La transaccin falla y se
realiza

sadespusiddee
rollback de la misma. Esto se debe a que ambas restricciones se han comprobado
e
d
y t Gu
CONFIRMAR.
o
r
p
COMMIT;
en
@
d
n
u
t
io
S
c
a
s
i
d
fun se th
(
urestricciones que se han definido como
A lastdos
Ejemplo 4: defina el estado IMMEDIATE
para
S
o
E
DEFERRED en el ejemplo anterior. D
e
s
Y
n
SET CONSTRAINTS
ALL
IMMEDIATE;
e
RO e lic
P
N rabl
O
I
C si intenta
feinsertar una fila que viola sal_ck o bonus_ck.
Observa un A
error
s
n
D
ra INTO emp_new_sal VALUES(110, -1);
N INSERT
t
U
n
F no
INSERT INTO emp_new_sal VALUES(90,5);

Nota: si crea una tabla sin especificar el nivel de diferida de una restriccin, sta se comprueba
inmediatamente al final de cada sentencia. Por ejemplo, con la sentencia CREATE TABLE de la tabla
newemp_details, si no especifica el nivel de diferida de la restriccin newemp_det_pk, se
comprueba inmediatamente.
CREATE TABLE newemp_details(emp_id NUMBER, emp_name
VARCHAR2(20),
CONSTRAINT newemp_det_pk PRIMARY KEY(emp_id));

Al intentar diferir la restriccin newemp_det_pk que no es diferible, recibir el siguiente error:


SET CONSTRAINT newemp_det_pk DEFERRED;

Oracle Database: Conceptos Fundamentales de SQL II 2-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Borrado de Restricciones

Eliminar la restriccin de gestor de la tabla EMP2:

ALTER TABLE emp2


DROP CONSTRAINT emp_mgr_fk;

Eliminar la restriccin PRIMARY KEY en la tabla DEPT2 y


borrar la restriccin FOREIGN KEY asociada en la columna
EMP2.DEPARTMENT_ID:

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Borrado de Restricciones
le
N
b
a
O
r identificar el nombre de la restriccin en las vistas
I
Para borrar unaCrestriccin,
puede
eUSER_CONS_COLUMNS
f
s
A
USER_CONSTRAINTS
y
del diccionario de datos. A continuacin, utilice
D tran
N
la sentencia
U oALTER
n- TABLE con la clusula DROP. La opcin CASCADE de la clusula DROP
F
n
provoca que se borren tambin las restricciones dependientes.
ALTER TABLE dept2
DROP PRIMARY KEY CASCADE;

Sintaxis
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT
constraint [CASCADE];
En la sintaxis:
table
column
constraint

es el nombre de la tabla
es el nombre de la columna a la que afecta la restriccin
es el nombre de la restriccin

Al borrar una restriccin de integridad, el servidor ya no aplica esa restriccin y deja de estar
disponible en el diccionario de datos.

Oracle Database: Conceptos Fundamentales de SQL II 2-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Desactivacin de Restricciones

Ejecutar la clusula DISABLE de la sentencia ALTER


TABLE para desactivar una restriccin de integridad.
Aplicar la opcin CASCADE para desactivar las
restricciones de integridad dependientes.

ALTER TABLE emp2


DISABLE CONSTRAINT emp_dt_fk;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Desactivacin de una Restriccin
le
N
b
a
O
Puede desactivar Iuna restriccin
er sin borrarla o volver a crearla mediante la sentencia ALTER TABLE
CDISABLE.
f
s
A
con la clusula
D tran
N
U
Sintaxis
F nonALTER
TABLE
table
DISABLE CONSTRAINT constraint [CASCADE];
En la sintaxis:
table
constraint

es el nombre de la tabla
es el nombre de la restriccin

Instrucciones
Puede utilizar la clusula DISABLE tanto en la sentencia CREATE TABLE como en ALTER
TABLE.
La clusula CASCADE desactiva las restricciones de integridad dependientes.
La desactivacin de una restriccin UNIQUE o PRIMARY KEY elimina el ndice nico.

Oracle Database: Conceptos Fundamentales de SQL II 2-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Activacin de Restricciones

Activar una restriccin de integridad desactivada


actualmente en la definicin de tabla mediante la clusula
ENABLE.
ALTER
TABLE
emp2
ENABLE CONSTRAINT emp_dt_fk;

Se crea un ndice UNIQUE automticamente si activa una


clave UNIQUE o una restriccin PRIMARY KEY.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Activacin de una Restriccinle
N rasinbborrarla o volver a crearla mediante la sentencia ALTER TABLE
Puede activar unaIO
restriccin
C
fe
s
A ENABLE.
con la clusula
n
D
N n-tra
U
Sintaxis
F no
ALTER
TABLE
table
ENABLE

CONSTRAINT constraint;

En la sintaxis:
table
constraint

es el nombre de la tabla
es el nombre de la restriccin

Instrucciones
Si activa una restriccin, se aplica a todos los datos de la tabla. Todos los datos de la tabla deben
cumplir la restriccin.
Si activa una clave UNIQUE o una restriccin PRIMARY KEY, se crea un ndice UNIQUE o
PRIMARY KEY automticamente. Si ya existe un ndice, lo pueden utilizar estas claves.
Puede utilizar la clusula ENABLE tanto en la sentencia CREATE TABLE como en ALTER
TABLE.

Oracle Database: Conceptos Fundamentales de SQL II 2-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Activacin de una Restriccin (continuacin)


La activacin de una restriccin PRIMARY KEY desactivada con la opcin CASCADE no activa
ninguna clave FOREIGN KEY dependiente de PRIMARY KEY.
Para activar una restriccin UNIQUE o PRIMARY KEY, debe tener los privilegios necesarios
para crear un ndice en la tabla.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restricciones en Cascada

La clusula CASCADE CONSTRAINTS se utiliza junto con la


clusula DROP COLUMN.
La clusula CASCADE CONSTRAINTS borra todas las
restricciones de integridad referencial que hacen
referencia a las claves PRIMARY y UNIQUE definidas en
las columnas borradas.
La clusula CASCADE CONSTRAINTS borra tambin todas
las restricciones de varias columnas definidas en las
columnas borradas.
has

rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Restricciones en Cascada
le
N
b
a
O
Esta sentencia ilustra
rde la clusula CASCADE CONSTRAINTS. Supongamos que la clusula
CI ndeelslauso
fesiguiente
Acreado
TEST1 seDha
forma:
a
r
N
t
- TABLE test1 (
ncol1_pk
FU noCREATE
NUMBER PRIMARY KEY,
col2_fk NUMBER,
col1 NUMBER,
col2 NUMBER,
CONSTRAINT fk_constraint FOREIGN KEY (col2_fk) REFERENCES
test1,
CONSTRAINT ck1 CHECK (col1_pk > 0 and col1 > 0),
CONSTRAINT ck2 CHECK (col2_fk > 0));

Se devuelve un error para las siguientes sentencias:


ALTER TABLE test1 DROP (col1_pk);
col1_pk es una clave principal.
La restriccin de varias columnas hace referencia a ALTER TABLE test1 DROP (col1);
col1, ck1.

Oracle Database: Conceptos Fundamentales de SQL II 2-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restricciones en Cascada
Ejemplo:
ALTER TABLE emp2
DROP COLUMN employee_id CASCADE CONSTRAINTS;

ALTER TABLE test1


DROP (col1_pk, col2_fk, col1) CASCADE CONSTRAINTS;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Restricciones en Cascada (continuacin)
le
N
b
a
O
La ejecucin de la
rsentencia borra la columna EMPLOYEE_ID, la restriccin PRIMARY
I siguiente
eFOREIGN
Crestriccin
f
s
A
KEY y cualquier
KEY que haga referencia a la restriccin PRIMARY KEY para
D tran
N
la tabla
nFU EMP2:
o
n
ALTER TABLE emp2 DROP COLUMN employee_id CASCADE CONSTRAINTS;
Si las columnas a las que hacen referencia las restricciones definidas en las columnas borradas
tambin se borran, CASCADE CONSTRAINTS no es necesario. Por ejemplo, si suponemos que
ninguna otra restriccin referencial de otras tablas hace referencia a la columna COL1_PK, es vlido
ejecutar la siguiente sentencia sin la clusula CASCADE CONSTRAINTS para la tabla TEST1 creada
en la pgina anterior:
ALTER TABLE test1 DROP (col1_pk, col2_fk, col1);

Oracle Database: Conceptos Fundamentales de SQL II 2-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cambio de Nombre de Columnas de Tabla y


Restricciones
Utilizar la clusula RENAME COLUMN de la sentencia ALTER
TABLE para cambiar el nombre de las columnas de la tabla.
ALTER TABLE marketing RENAME COLUMN team_id
TO id;

Utilizar la clusula RENAME CONSTRAINT de la sentencia


ALTER TABLE para cambiar el nombre de cualquier restriccin s
a
h
)
existente para la tabla.
rg

o b e
a
s
de Guid
ALTER TABLE marketing RENAME CONSTRAINT ymktg_pk
o
TO new_mktg_pk;
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Cambio de Nombre de Columnas
le de Tabla y Restricciones
N
b
a
O
I de funa
Al cambiar el C
nombre
er columna de la tabla, el nuevo nombre no debe entrar en conflicto con el
s
A
nombre de
Dcualquier
ancolumna existente en la tabla. Puede utilizar cualquier otra clusula junto con la
r
NRENAME
t
clusula
COLUMN.
U
F non
Los ejemplos
de la diapositiva utilizan la tabla marketing con la CLAVE PRIMARIA mktg_pk
definida en la columna id.
CREATE TABLE marketing (team_id NUMBER(10),
target VARCHAR2(50),
CONSTRAINT mktg_pk PRIMARY KEY(team_id));

El ejemplo a muestra que se ha cambiado el nombre de la columna id de la tabla de marketing a


mktg_id. El ejemplo b muestra que el nombre de mktg_pk se ha cambiado a new_mktg_pk.
Al cambiar el nombre de una restriccin existente para una tabla, el nuevo nombre no debe entrar en
conflicto con ninguno de los nombres de las restricciones existentes. Puede utilizar la clusula
RENAME CONSTRAINT para cambiar el nombre de las restricciones generadas por el sistema.

Oracle Database: Conceptos Fundamentales de SQL II 2-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Uso de la sentencia ALTER TABLE para agregar, modificar


y borrar una columna
Gestin de restricciones:
Adicin y borrado de una restriccin
Restricciones diferidas
Activacin y desactivacin de una restriccin

Creacin de ndices:
Uso de la sentencia CREATE TABLE

s
a
h
Creacin de ndices basados en funciones
rg)
o

Eliminacin de ndices
sa ide
e
d
u
Realizacin de operaciones de flashback roy
G
t
p
en
@
d
Creacin y uso de tablas temporales
n
u
t
io
S
c
a
s
i
d
Creacin y uso de tablas externas
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Visin General de ndices


Los ndices se crean:
Automticamente
Creacin de PRIMARY KEY
Creacin de UNIQUE KEY

Manualmente
Sentencia CREATE INDEX
Sentencia CREATE TABLE

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Visin General de ndices
le
N
b
a
O
I tiposfederndices. Un tipo es un ndice nico. El servidor de Oracle crea
Se pueden crear
dos
C
A
automticamente
ns nico al definir una columna o un grupo de columnas en la tabla para
D trunandice
N
tener
Uuna restriccin
n- PRIMARY KEY o UNIQUE. El nombre del ndice es el nombre proporcionado a
F
o
n
la restriccin.
El otro tipo de ndice es un ndice no nico, que un usuario puede crear. Por ejemplo, puede crear un
ndice para que se utilice una columna FOREIGN KEY en las uniones para mejorar la velocidad de
recuperacin.
Para crear un ndice en una o ms columnas, emita la sentencia CREATE INDEX.
Para obtener ms informacin, consulte Oracle Database SQL Reference (Referencia de SQL de
Oracle Database) para la base de datos 10g u 11g.
Nota: puede crear manualmente un ndice nico, pero se recomienda crear una restriccin NICA,
que implcitamente crea el ndice nico.

Oracle Database: Conceptos Fundamentales de SQL II 2-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

CREATE INDEX con la Sentencia CREATE TABLE


CREATE TABLE NEW_EMP
(employee_id NUMBER(6)
PRIMARY KEY USING INDEX
(CREATE INDEX emp_id_idx ON
NEW_EMP(employee_id)),
first_name VARCHAR2(20),
last_name
VARCHAR2(25));

s
a
h
SELECT INDEX_NAME, TABLE_NAME
rg)
o
FROM
USER_INDEXES

sa ide
e
WHERE TABLE_NAME = 'NEW_EMP';
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ice TABLE
RO eCREATE
l
CREATE INDEX con la Sentencia
P
N rablal clusula CREATE INDEX se utiliza con la sentencia CREATE
O
En el ejemplo deIla
diapositiva,
C unnndice
fe PRIMARY KEY explcitamente. Puede asignar un nombre a los ndices
s
TABLE paraAcrear
D
N n-detrlaacreacin de PRIMARY KEY que sea diferente del nombre de la restriccin
en elUmomento
F nKEY.
PRIMARY
o
Puede consultar la vista del diccionario de datos USER_INDEXES para obtener ms informacin
sobre los ndices.
Nota: aprender ms sobre USER_INDEXES en la leccin titulada Gestin de Objetos con Vistas
de Diccionario de Datos.
El siguiente ejemplo ilustra el comportamiento de la base de datos si no se asigna un nombre al
ndice explcitamente:
CREATE TABLE EMP_UNNAMED_INDEX
(employee_id NUMBER(6) PRIMARY KEY ,
first_name VARCHAR2(20),
last_name VARCHAR2(25));

SELECT INDEX_NAME, TABLE_NAME


FROM
USER_INDEXES
WHERE TABLE_NAME = 'EMP_UNNAMED_INDEX';

Oracle Database: Conceptos Fundamentales de SQL II 2-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

CREATE INDEX con la Sentencia CREATE TABLE (continuacin)


Observe que el servidor de Oracle proporciona un nombre genrico al ndice creado para la columna
PRIMARY KEY.
Tambin puede utilizar un ndice existente para la columna PRIMARY KEY, por ejemplo, si espera
una gran carga de datos y desea acelerar la operacin. Puede que desee desactivar las restricciones al
realizar la carga y, a continuacin, activarlas, en cuyo caso, el tener un ndice nico en PRIMARY
KEY seguir provocando que los datos se verifiquen durante la carga. Por lo tanto, en primer lugar
puede crear un ndice no nico en la columna designada como PRIMARY KEY y, a continuacin,
crear la columna PRIMARY KEY y especificar que debe utilizar el ndice existente. Los siguientes
ejemplos ilustran este proceso:
Paso 1: crear la tabla:
CREATE TABLE NEW_EMP2
(employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name
VARCHAR2(25)
);

s
a
h
rg)
o

sa ide
e
Paso 2: crear el ndice:
d
roy nt Gu
CREATE INDEX emp_id_idx2 ON
p
new_emp2(employee_id);
n@ tude
o
i
c is S
a
d
fun se th
Paso 3: crear la CLAVE PRIMARIA:
(
u KEY (employee_id) USING INDEX
A PRIMARY
ALTER TABLE new_emp2 S
ADD
o
t
E
e
emp_id_idx2; YD
s
n
e
RO e lic
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

ndices Basados en Funciones

Un ndice basado en funciones se basa en expresiones.


La expresin de ndice se genera a partir de las columnas
de las tablas, restricciones, funciones SQL y funciones
definidas por el usuario.

CREATE INDEX upper_dept_name_idx


ON dept2(UPPER(department_name));

s
a
h
SELECT *
rg)
o

FROM
dept2
sa ide
e
d
WHERE UPPER(department_name) = 'SALES';
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
ndices Basados en Funcionesle
b definidos con las palabras clave UPPER(column_name)o
a
Los ndices basados
r
IOenNfunciones
e
C
A ansf permiten realizar bsquedas no sensibles a maysculas y minsculas.
LOWER(column_name)
D
N nconsidere
-tr el siguiente ndice:
Por
ejemplo,
FU
o
n INDEX upper_last_name_idx ON emp2 (UPPER(last_name));
CREATE

Esto facilita el procesamiento de consultas como:


SELECT * FROM emp2 WHERE UPPER(last_name) = 'KING';
El servidor de Oracle slo utiliza el ndice cuando se utiliza esta funcin concreta en una consulta.
Por ejemplo, la siguiente sentencia puede utilizar el ndice, pero sin la clusula WHERE, el servidor
de Oracle puede realizar una exploracin de tabla completa:
SELECT
*
FROM
employees
WHERE
UPPER (last_name) IS NOT NULL
ORDER BY UPPER (last_name);
Nota: el parmetro de inicializacin QUERY_REWRITE_ENABLED se debe definir en TRUE para
utilizar un ndice basado en funciones.
El servidor de Oracle trata los ndices con columnas marcadas como DESC como ndices basados en
funciones. Las columnas marcadas como DESC se ordenan en orden descendente.
Oracle Database: Conceptos Fundamentales de SQL II 2-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Eliminacin de ndices

Eliminar un ndice del diccionario de datos mediante el


comando DROP INDEX:

DROP INDEX index;

Eliminar el ndice UPPER_DEPT_NAME_IDX del diccionario


de datos:

DROP INDEX upper_dept_name_idx;

a
s
a
)h
g
r
o e
a
s
Para borrar un ndice, debe ser el propietario del
ido
de mismo
u
y
G
o
tener el privilegio DROP ANY INDEX.
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Eliminacin de ndices
le
N
b
a
O
No puede modificar
los ndices.
Para cambiar un ndice, debe borrarlo y volver a crearlo. Eliminar
erdiccionario
CdeIndice
f
s
A
una definicin
del
de datos mediante la emisin de la sentencia DROP INDEX.
D tran
N
ParaUborrar unnndice,
F no - debe ser el propietario del mismo o tener el privilegio DROP ANY INDEX.
En la sintaxis:
index

es el nombre del ndice.

Nota: si borra una tabla, los ndices, restricciones y disparadores se borran automticamente, pero
permanecen las vistas y secuencias.

Oracle Database: Conceptos Fundamentales de SQL II 2-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

DROP TABLE PURGE

DROP TABLE dept80 PURGE;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
DROP TABLE PURGEPR
le
N
b
a
O
Iproporciona
Oracle Database
er una funcin para borrar tablas. Cuando se borra una tabla, la base de
C
f
s
A
datos no D
inmediatamente
espacio asociado a la tabla. En su lugar, la base de datos cambia el
ay lan coloca eneluna
r
Ndelibera
t
nombre
la
tabla
papelera de reciclaje, de donde se puede recuperar ms
U
n
F
o
n
adelante con la sentencia FLASHBACK TABLE si se da cuenta de que la ha borrado por error.
Si desea liberar inmediatamente el espacio asociado a la tabla en el momento de emitir la sentencia
DROP TABLE, incluya la clusula PURGE como se muestra en la sentencia de la diapositiva.
Especifique PURGE slo si desea borrar la tabla y liberar el espacio asociado a ella en un solo paso.
Si especifica PURGE, la base de datos no coloca la tabla y sus objetos dependientes en la papelera de
reciclaje.
El uso de esta clusula equivale a borrar la tabla en primer lugar y a depurarla a continuacin de la
papelera de reciclaje. Esta clusula ahorra un paso del proceso. Tambin proporciona una seguridad
mejorada si desea evitar que aparezca material confidencial en la papelera de reciclaje.

Oracle Database: Conceptos Fundamentales de SQL II 2-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Uso de la sentencia ALTER TABLE para agregar, modificar


y borrar una columna
Gestin de restricciones:
Adicin y borrado de una restriccin
Restricciones diferidas
Activacin y desactivacin de una restriccin

Creacin de ndices:
Uso de la sentencia CREATE TABLE

s
a
h
Creacin de ndices basados en funciones
rg)
o

Eliminacin de ndices
sa ide
e
d
u
Realizacin de operaciones de flashback roy
G
t
p
en
@
d
Creacin y uso de tablas temporales
n
u
t
io
S
c
a
s
i
d
Creacin y uso de tablas externas
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia FLASHBACK TABLE

Permite recuperar tablas a un punto especificado en el


tiempo con una nica sentencia.
Restaura los datos de la tabla junto con los ndices y las
restricciones.
Permite revertir la tabla y su contenido a un determinado
punto en el tiempo o a un nmero de cambio del sistema
(SCN)

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
SCN
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia FLASHBACK P
TABLE
l
N permite
brecuperar
a
O
r
I
Oracle Flashback
Table
tablas a un punto especificado en el tiempo con una nica
e
C
f
s
A
sentencia.DPuede restaurar
n los datos de la tabla junto con los ndices asociados y las restricciones
adatos
r
N la base
t
mientras
de
est en lnea, deshaciendo los cambios slo en las tablas especificadas.
U
F non
La funcin Flashback Table es similar a la herramienta de reparacin de autoservicio. Por ejemplo, si
un usuario suprime accidentalmente filas importantes de una tabla y, a continuacin, desea recuperar
las filas suprimidas, puede utilizar la sentencia FLASHBACK TABLE para restaurar la tabla al
momento anterior a la supresin y ver las filas que faltan en la tabla.
Si utiliza la sentencia FLASHBACK TABLE, puede revertir la tabla y su contenido a un determinado
momento o SCN.
Nota: el SCN es un valor entero asociado a cada cambio de la base de datos. Es un nmero
incremental nico en la base de datos. Cada vez que confirma una transaccin, se registra un nuevo
SCN.

Oracle Database: Conceptos Fundamentales de SQL II 2-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia FLASHBACK TABLE

Herramienta de reparacin de modificaciones accidentales de


tabla
Restaura una tabla a un punto anterior en el tiempo.
Ventajas: facilidad de uso, disponibilidad y rpida ejecucin.
Se ejecuta in-situ.

Sintaxis:

FLASHBACK TABLE[schema.]table[,
[ schema.]table ]...
TO { TIMESTAMP | SCN } expr
[ { ENABLE | DISABLE } TRIGGERS ];

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
RO (continuacin)
l
Sentencia FLASHBACK P
TABLE
le
N
b
a
O
Utilidad de Reparacin
de
I
erAutoservicio
C
f
s
A
Oracle Database
proporciona
un comando de lenguaje de definicin de datos (DDL) SQL,
ranpara restaurar
ND nTABLE,
t
FLASHBACK
de una tabla a un punto anterior en el tiempo en caso
U
F
o suprimido o modificadoel estado
de que sen
haya
involuntariamente. El comando FLASHBACK TABLE es una

herramienta de reparacin de autoservicio para restaurar datos de una tabla junto con los atributos
asociados, como ndices o vistas. Esto se realiza con la base de datos en lnea, mediante una
operacin de rollback de los cambios posteriores efectuados en la tabla determinada. En comparacin
con los mecanismos tradicionales de recuperacin, esta funcin ofrece ventajas significativas, como
facilidad de uso, disponibilidad y mayor rapidez de restauracin. Adems, libera la sobrecarga del
DBA para buscar y restaurar las propiedades especficas de la aplicacin. La funcin de flashback de
tabla no aborda la corrupcin fsica provocada por un disco defectuoso.
Sintaxis
Puede llamar a una operacin FLASHBACK TABLE en una o ms tablas, incluso en tablas con
diferentes esquemas. Puede especificar el punto en el tiempo al que desea revertir mediante un
registro de hora vlido. Por defecto, los disparadores de base de datos estn desactivados durante la
operacin de flashback para todas las tablas implicadas. Puede sustituir este comportamiento
mediante la especificacin de la clusula ENABLE TRIGGERS.
Nota: para obtener ms informacin sobre la papelera de reciclaje y la semntica de flashback,
consulte Oracle Database Administrators Guide (Gua del Administrador de Oracle Database) para
la base de datos 10g u 11g.
Oracle Database: Conceptos Fundamentales de SQL II 2-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Sentencia FLASHBACK TABLE

DROP TABLE emp2;

SELECT original_name, operation, droptime FROM


recyclebin;

s
a
h
rg)
o

FLASHBACK TABLE emp2 TO BEFORE DROP;


sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ice
RO eTABLE
l
Uso de la Sentencia FLASHBACK
P
N rabl
O
I
Sintaxis y Ejemplos
sfeEMP2 a un estado anterior a la sentencia DROP.
AC alantabla
El ejemplo
restaura
D
-tr es realmente una tabla de diccionario de datos que contiene informacin
UN odenreciclaje
Fpapelera
La
n
sobre los objetos borrados. Las tablas borradas y los objetos asociados, como ndices, restricciones,

tablas anidadas, etc., no se eliminan y continan ocupando espacio. Continan contando en la cuotas
de espacio del usuario hasta que se depuran especficamente de la papelera de reciclaje o hasta que la
base de datos los tenga que depurar debido a las restricciones de espacio de tablespace.
Cada usuario se puede considerar propietario de una papelera de reciclaje, porque a menos que un
usuario tenga el privilegio SYSDBA, los nicos objetos a los que tiene acceso el usuario en la
papelera de reciclaje son aqullos de los que es propietario. Un usuario puede ver sus objetos de la
papelera de reciclaje mediante la siguiente sentencia:
SELECT * FROM RECYCLEBIN;

Al borrar un usuario, ninguno de los objetos que le pertenecen se colocan en la papelera de reciclaje
y ninguno de los objetos que hay en la misma se depura.
Puede depurar la papelera de reciclaje con la siguiente sentencia:
PURGE RECYCLEBIN;

Oracle Database: Conceptos Fundamentales de SQL II 2-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Uso de la sentencia ALTER TABLE para agregar, modificar


y borrar una columna
Gestin de restricciones:
Adicin y borrado de una restriccin
Restricciones diferidas
Activacin y desactivacin de una restriccin

Creacin de ndices:
Uso de la sentencia CREATE TABLE

s
a
h
Creacin de ndices basados en funciones
rg)
o

Eliminacin de ndices
sa ide
e
d
u
Realizacin de operaciones de flashback roy
G
t
p
en
@
d
Creacin y uso de tablas temporales
n
u
t
io
S
c
a
s
i
d
Creacin y uso de tablas externas
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tablas Temporales

Cuando
termina la
sesin/transaccin

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tablas Temporales
le
N
b
a
O
r que contiene datos que slo existen durante la transaccin o sesin.
I es unafetabla
Una tabla temporal
C
s
A
Los datosD
de una tabla
temporal son privados para la sesin, lo que significa que cada sesin slo
ansus
r
N
t
puede
ver
y
modificar
propios datos.
U
F non
Las tablas temporales son tiles en las aplicaciones en las que se debe almacenar en buffer un juego
de resultados. Por ejemplo, el carro de la compra de una aplicacin en lnea puede ser una tabla
temporal. Cada elemento est representado por una fila en la tabla temporal. Mientras compra en una
tienda en lnea, puede seguir agregando o eliminando elementos del grfico. Durante la sesin, los
datos de este grfico son privados. Despus de finalizar la compra y realizar los pagos, la aplicacin
mueve la fila del grfico seleccionado a una tabla permanente. Al final de la sesin, los datos
temporales se borran automticamente.
Puesto que las tablas temporales se definen estadsticamente, puede crear ndices para ellas.
Los ndices creados en tablas temporales son tambin temporales. Los datos del ndice tienen el
mismo mbito de sesin o transaccin que los datos de la tabla temporal. Tambin puede crear una
vista o un disparador en una tabla temporal.

Oracle Database: Conceptos Fundamentales de SQL II 2-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de una Tabla Temporal

CREATE GLOBAL TEMPORARY TABLE cart


ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY TABLE today_sales


ON COMMIT PRESERVE ROWS AS
SELECT * FROM orders
)
WHERE order_date = SYSDATE; rg
2

has
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Creacin de una TablaP
Temporal
l
Ntemporal,
bpuede
a
O
Para crear una tabla
utilizar el siguiente comando:
r
I
e
C
f
CREATE
GLOBAL
TEMPORARY
TABLE tablename
s
A ONanCOMMIT
D
[PRESERVE
|
DELETE]
ROWS
N n-tr
U
F la asociacin
Con
de la siguiente configuracin a la clusula ON COMMIT, puede decidir si los
o
n
datos de la tabla temporal son especficos de la transaccin (por defecto) o de la sesin.

1. DELETE ROWS: como se muestra en el ejemplo 1 de la diapositiva, el valor DELETE


ROWS crea una tabla temporal especfica de la transaccin. Una sesin se enlaza a la tabla
temporal con la primera insercin de una transaccin en la tabla. El enlace desaparece al
final de la transaccin. La base de datos trunca la tabla (suprime todas las filas) despus de
cada confirmacin.
2. PRESERVE ROWS: como se muestra en el ejemplo 2 de la diapositiva, el valor PRESERVE
ROWS crea una tabla temporal especfica de la sesin. Cada sesin de vendedor puede
almacenar sus propios datos de ventas para el da en la tabla. Cuando un vendedor realiza la
primera insercin en la tabla today_sales, su sesin obtiene un enlace a la tabla
today_sales. Este enlace desaparece al final de la sesin o mediante la emisin de
TRUNCATE para la tabla en la sesin. La base de datos se trunca al terminar la sesin.
Al crear una tabla temporal en Oracle Database, se crea una definicin de tabla esttica. Al igual
que las tablas permanentes, las tablas temporales se definen en el diccionario de datos. Sin embargo,
las tablas temporales y sus ndices no asignan automticamente un segmento al crearlo. En su lugar,
los segmentos temporales se asignan al insertar por primera vez los datos. Hasta que los datos se
cargan en una sesin, la tabla aparece vaca.
Oracle Database: Conceptos Fundamentales de SQL II 2-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Uso de la sentencia ALTER TABLE para agregar, modificar


y borrar una columna
Gestin de restricciones:
Adicin y borrado de una restriccin
Restricciones diferidas
Activacin y desactivacin de una restriccin

Creacin de ndices:
Uso de la sentencia CREATE TABLE

s
a
h
Creacin de ndices basados en funciones
rg)
o

Eliminacin de ndices
sa ide
e
d
u
Realizacin de operaciones de flashback roy
G
t
p
en
@
d
Creacin y uso de tablas temporales
n
u
t
io
S
c
a
s
i
d
Creacin y uso de tablas externas
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tablas Externas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tablas Externas
le
N
b
a
O
Una tabla externaI es una tabla
r de slo lectura cuyos metadatos se almacenan en la base de datos, pero
efuera
Calmacenan
f
s
A
cuyos datos
se
la base de datos. Esta definicin de tabla externa se puede
nvista que sedeutiliza
Dcomotuna
a
r
N
considerar
para ejecutar una consulta SQL en datos externos sin
FU ndeonque- se carguen en primer lugar
necesidad
en la base de datos. Los datos de la tabla externa se
pueden consultar y unir directamente y en paralelo sin necesidad de cargarlos en primer lugar en la
base de datos. Puede utilizar SQL, PL/SQL y Java para consultar los datos de una tabla externa.
La principal diferencia entre las tablas externas y las normales es que las tablas organizadas de forma
externa son de slo lectura. No se puede realizar ninguna operacin de lenguaje de manipulacin de
datos (DML) y no se puede crear ningn ndice en ellas. Sin embargo, puede crear una tabla externa
y, de este modo, descargar datos mediante el comando CREATE TABLE AS SELECT.
El servidor de Oracle Server proporciona dos controladores de acceso principal para las tablas
externas. Uno, el controlador de acceso del cargador (o ORACLE_LOADER) se utiliza para leer datos
de los archivos externos cuyo formato pueda interpretar SQL*Loader. Tenga en cuenta que toda la
funcionalidad de SQL*Loader est soportada con las tablas externas. El controlador de acceso
ORACLE_DATAPUMP se puede utilizar tanto para importar como para exportar datos con un formato
independiente de la plataforma. El controlador de acceso ORACLE_DATAPUMP escribe filas de una
sentencia SELECT para cargarlas en una tabla externa como parte de una sentencia CREATE TABLE
...ORGANIZATION EXTERNAL...AS SELECT. A continuacin, puede utilizar SELECT para
leer los datos de dicho archivo de datos. Tambin puede crear una definicin de tabla externa en otro
sistema y utilizar ese archivo de datos. Esto permite mover los datos entre diferentes Oracle
Database.
Oracle Database: Conceptos Fundamentales de SQL II 2-40

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de un Directorio para la Tabla Externa


Crear un objeto DIRECTORY que corresponda al directorio en
el sistema de archivos en el que reside el origen de datos
externo.
CREATE OR REPLACE DIRECTORY emp_dir
AS '//emp_dir';
GRANT READ ON DIRECTORY emp_dir TO ora_21;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ejemplo de Creacin de una Tabla
le Externa
N
b
a
O
Utilice la sentencia
I CREATE
erDIRECTORY para crear el objeto de directorio. Un objeto de directorio
C
f
s
A
especificaDun alias a
para
n un directorio del sistema de archivos del servidor en el que reside el origen
r
t
deFdatos.
utilizar
nombres de directorio al hacer referencia al origen de datos externo, en lugar
UN Puede
n
o
n
de codificar el nombre de la ruta de acceso del sistema operativo, para una mayor flexibilidad de
gestin de archivos.
Debe tener privilegios del sistema CREATE ANY DIRECTORY para crear directorios. Cuando crea
un directorio, se le otorgan automticamente los privilegios de objeto READ y WRITE y puede
otorgar los privilegios READ y WRITE a otros usuarios y roles. El DBA tambin puede otorgar estos
privilegios a otros usuarios y roles.
Un usuario necesita los privilegios READ para todos los directorios utilizados en las tablas externas a
los que desee acceder y WRITE para las ubicaciones de los archivos log, de errores y de desechos que
se van a utilizar.
Adems, se necesita un privilegio WRITE si se utiliza el marco de tabla externa para cargar datos.
Oracle proporciona tambin el tipo ORACLE_DATAPUMP, con el que puede cargar datos (es decir,
leer datos de una tabla de la base de datos e insertarla en una tabla externa) y, a continuacin, volver
a cargarla en Oracle Database. Se trata de una operacin nica que se puede realizar al crear la tabla.
Despus de realizar la creacin y el relleno inicial, no puede actualizar, insertar o suprimir ninguna
fila.
Oracle Database: Conceptos Fundamentales de SQL II 2-41

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ejemplo de Creacin de una Tabla Externa (continuacin)


Sintaxis
CREATE [OR REPLACE] DIRECTORY AS 'path_name';
En la sintaxis:
OR REPLACE

directory

'path_name'

Especifique OR REPLACE para volver a crear el objeto de base de datos


de directorio si ya existe. Puede utilizar esta clusula para cambiar
la definicin de un directorio existente sin borrar, volver a crear
y volver a otorgar los privilegios de objeto de base de datos
otorgados previamente en el directorio. Los usuarios a los que se han otorgado
previamente privilegios en un directorio redefinido pueden seguir accediendo al
directorio sin necesidad de volver a otorgar los privilegios.
Especifique el nombre del objeto de directorio que desea crear.
La longitud mxima del nombre de directorio es de 30 bytes.
No puede cualificar un objeto de directorio con un nombre de esquema.
Especifique el nombre de la ruta de acceso completa del directorio del sistema
de archivos al que desea acceder. El nombre de la ruta de acceso es sensible a
maysculas/minsculas.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-42

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Tablas Externas

CREATE TABLE <table_name>


( <col_name> <datatype>, )
ORGANIZATION EXTERNAL
(TYPE <access_driver_type>
DEFAULT DIRECTORY <directory_name>
ACCESS PARAMETERS
( ) )
LOCATION ('<location_specifier>')
REJECT LIMIT [0 | <number> | UNLIMITED];

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Tablas Externas le
N rab la clusula ORGANIZATION EXTERNAL de la sentencia
Puede crear tablas
externasemediante
IO
C
sf no est creando una tabla. En su lugar, se crean metadatos en el
A En
CREATED
TABLE.
realidad,
n
a
-tr que puede utilizar para acceder a los datos externos. Puede utilizar la clausula
diccionario
UN odendatos
F
n
ORGANIZATION
para especificar el orden en el que se deben almacenar las filas de datos de la

tabla. Con la especificacin EXTERNAL en la clusula ORGANIZATION, se indica que la tabla es de


slo lectura y est ubicada fuera de la base de datos. Tenga en cuenta que los archivos externos ya
deben existir fuera de la base de datos.
TYPE <access_driver_type> indica el controlador de acceso de la tabla externa.
El controlador de acceso es la interfaz de programacin de aplicaciones (API) que interpreta los
datos externos para la base de datos. Si no especifica TYPE, Oracle utiliza el controlador de acceso
por defecto, ORACLE_LOADER. La otra opcin es ORACLE_DATAPUMP.
Utilice la clusula DEFAULT DIRECTORY para especificar uno o ms objetos de directorio de
Oracle Database que correspondan a directorios del sistema de archivos en el que pueden residir los
orgenes de datos externos.
La clusula ACCESS PARAMETERS opcional permite asignar valores a los parmetros del
controlador de acceso especfico para esta tabla externa.

Oracle Database: Conceptos Fundamentales de SQL II 2-43

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Creacin de Tablas Externas (continuacin)
Utilice la clusula LOCATION para especificar un localizador externo para cada origen de datos
externo. Normalmente, <location_specifier> es un archivo, pero no es necesario que lo sea.
La clusula REJECT LIMIT permite especificar el nmero de errores de conversin que se pueden
producir durante una consulta de los datos externos antes de que se devuelva un error de Oracle y que
se aborte la consulta. El valor por defecto es 0.
La sintaxis para utilizar el controlador de acceso ORACLE_DATAPUMP es la siguiente:
CREATE TABLE extract_emps
ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY
ACCESS PARAMETERS ( )
LOCATION ()
PARALLEL 4
REJECT LIMIT UNLIMITED
AS
SELECT * FROM ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-44

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de una Tabla Externa mediante


ORACLE_LOADER
CREATE TABLE oldemp (
fname char(25), lname CHAR(25))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY emp_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
NOBADFILE
NOLOGFILE
FIELDS TERMINATED BY ','
(fname POSITION ( 1:20) CHAR,
lname POSITION (22:41) CHAR))
LOCATION ('emp.dat'))
PARALLEL 5
REJECT LIMIT 200;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ejemplo de Creacin de una tabla
le Externa mediante el Controlador de Acceso
b
ORACLE_LOADERION
a
er
C
f
s
A
Supongamos
que hay
anun archivo plano que contiene registros con el siguiente formato:
r
ND 10,jones,11-Dec-1934
t
U
n
F no20,smith,12-Jun-1972

Los registros estn delimitados con nuevas lneas y todos los campos terminan con una coma ( , ).
El nombre del archivo es /emp_dir/emp.dat.
Para convertir este archivo en el origen de datos de una tabla externa, cuyos metadatos residirn en la
base de datos, debe realizar los siguientes pasos:
1. Crear un objeto de directorio, emp_dir, del siguiente modo:
CREATE DIRECTORY emp_dir AS '/emp_dir' ;

2. Ejecutar el comando CREATE TABLE mostrado en la dispositiva.


El ejemplo de la diapositiva ilustra la especificacin de tabla para crear una tabla externa para el
archivo:
/emp_dir/emp.dat

Oracle Database: Conceptos Fundamentales de SQL II 2-45

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Ejemplo de Creacin de una tabla Externa mediante el Controlador de Acceso
ORACLE_LOADER (continuacin)
En el ejemplo, la especificacin TYPE se proporciona slo para ilustrar su uso. ORACLE_LOADER
es el controlador de acceso por defecto si no se ha especificado ninguno. La opcin ACCESS
PARAMETERS proporciona valores para los parmetros del controlador de acceso especfico, que
interpreta el controlador y no el servidor de Oracle.
La clusula PARALLEL permite que cinco servidores de ejecucin en paralelo exploren
simultneamente los orgenes de datos externos (archivos) con la ejecucin de la sentencia INSERT
INTO TABLE. Por ejemplo, si se ha especificado PARALLEL=5, puede haber ms de un servidor de
ejecucin en paralelo trabajando en un origen de datos. Ya que las tablas externas pueden ser muy
grandes, por motivos de rendimiento, es aconsejable especificar la clusula PARALLEL o una
indicacin paralela para la consulta.
La clusula REJECT LIMIT especifica que si se producen ms de 200 errores de conversin durante
una consulta de los datos externos, la consulta se abortar y se devolver un error. Estos errores de
conversin se pueden producir cuando el controlador de acceso intenta transformar los datos del
archivo de datos para que coincida con la definicin de tabla externa.
Despus de que el comando CREATE TABLE se ejecute correctamente, la tabla externa OLDEMP se
puede describir y consultar de la misma forma que una tabla relacional.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 2-46

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Consulta de Tablas Externas

SELECT *
FROM oldemp

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
t
OLDEMP
pr emp.dat
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Consulta de Tablas Externas le
N raningn
b dato almacenado en la base de datos. No describe cmo se
IO
Una tabla externa
no describe
e
C
selforigen externo. En su lugar, describe cmo debe presentar el nivel de tabla
A datosaen
almacenan
los
n
D
-talr servidor. Es responsabilidad del controlador de acceso y del nivel de tabla
externa
UNlos odatos
n
F
n las transformaciones necesarias en los archivos de datos para que coincidan con la
externa realizar
definicin de tabla externa.
Cuando el servidor de base de datos accede a los datos de un origen externo, llama al controlador de
acceso adecuado para obtener los datos de un origen externo del modo en que espera el servidor de
base de datos.
Es importante recordar que la descripcin de los datos del origen de datos es independiente de la
definicin de la tabla externa. El archivo de origen puede contener ms o menos campos que las
columnas que hay en la tabla. Adems, los tipos de dato de los campos del origen de datos pueden ser
diferentes de las columnas de la tabla. El controlador de acceso se ocupa de garantizar que los datos
del origen de datos se procesen de forma que coincidan con la definicin de la tabla externa.

Oracle Database: Conceptos Fundamentales de SQL II 2-47

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de una Tabla Externa mediante


ORACLE_DATAPUMP: Ejemplo
CREATE TABLE emp_ext
(employee_id, first_name, last_name)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY emp_dir
LOCATION
('emp1.exp','emp2.exp')
)
PARALLEL
AS
SELECT employee_id, first_name, last_name
FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ice ORACLE_DATAPUMP: ejemplo
RO emediante
l
Creacin de una TablaP
Externa
l
N rdeabacceso
O
Puede utilizar el controlador
ORACLE_DATAPUMP para realizar las operaciones de carga
I
e
C
f
s
A
y recargaD
con tablasaexternas
mediante.
n
r
N
t
U
Nota:
n de las tablas externas, la carga de datos se refiere a la lectura de los datos en una
F en nelocontexto
tabla externa y su carga en una tabla de la base de datos. La descarga de datos se refiere a la lectura
de datos de una tabla y su insercin en una tabla externa.
El ejemplo de la diapositiva ilustra la especificacin de tabla para crear una tabla externa mediante el
controlador de acceso ORACLE_DATAPUMP: A continuacin, los datos se rellenan en dos archivos:
emp1.exp and emp2.exp.
Para rellenar los datos ledos de la tabla EMPLOYEES en una tabla externa, debe realizar los
siguientes pasos:
1. Crear un objeto de directorio, emp_dir, del siguiente modo:
CREATE DIRECTORY emp_dir AS '/emp_dir' ;

2. Ejecutar el comando CREATE TABLE mostrado en la dispositiva.


Nota: el directorio emp_dir es el mismo que se ha creado en el ejemplo anterior de uso de
ORACLE_LOADER.
Puede consultar la tabla externa mediante la ejecucin del siguiente cdigo:
SELECT * FROM emp_ext;

Oracle Database: Conceptos Fundamentales de SQL II 2-48

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Una restriccin FOREIGN KEY fuerza la siguiente accin:
Al suprimir datos de la clave principal, todas las filas de la tabla
secundaria que dependen de los valores de clave principal se
suprimen tambin.
1. Verdadero
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 2-49

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
En todos los casos, al ejecutar el comando DROP TABLE, la
base de datos cambia el nombre de la tabla y la coloca en la
papelera de reciclaje, de donde se puede recuperar
posteriormente mediante la sentencia FLASHBACK TABLE.
1. Verdadero
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 2-50

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Agregar Restricciones
Crear ndices
Crear ndices mediante la sentencia CREATE TABLE

Crear ndices basados en funciones


Borrar columnas y definir columnas como UNUSED
Realizar operaciones FLASHBACK

Crear y utilizar tablas externas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
I
En esta leccin,
aprender
ea rrealizar las siguientes tareas para la gestin de objetos de esquema:
C
f
s
A
Modificar
las tablas
n para agregar o modificar columnas o restricciones.
andices
r
NDndices
t
U
Crear
e
basados en funciones mediante la sentencia CREATE INDEX.
n
F Borrarnocolumnas
no utilizadas.
Utilizar mecanismos FLASHBACK para restaurar tablas.
Utilizar la clusula ORGANIZATION EXTERNAL de la sentencia CREATE TABLE para
crear una tabla externa. Una tabla externa es una tabla de slo lectura cuyos metadatos se
almacenan en la base de datos, pero cuyos datos se almacenan fuera de la base de datos.
Utilizar tablas externas para consultar datos sin cargarlos antes en la base de datos.
Asignar nombres a los ndices de columna PRIMARY KEY al crear la tabla con la sentencia
CREATE TABLE.

Oracle Database: Conceptos Fundamentales de SQL II 2-51

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 2: Visin General


En esta prctica se abordan los siguientes temas:
Modificacin de tablas
Adicin de columnas
Borrado de columnas
Creacin de ndices
Creacin de tablas externas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 2: Visin General
le
N
b
a
O
En esta prctica, Iutilizar el
ALTER TABLE para modificar columnas y agregar
ercomandoCREATE
C nselfcomando
A
restricciones.
Utilizar
INDEX para crear ndices al crear una tabla, junto con
D tra
N
el comando
n- TABLE. Crear tablas externas.
FU noCREATE

Oracle Database: Conceptos Fundamentales de SQL II 2-52

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Gestin de Objetos
con Vistas de Diccionario de Datos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Utilizar las vistas del diccionario de datos para buscar
datos en los objetos
Consultar varias vistas del diccionario de datos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I presentarn
En esta leccin,
se
er las vistas del diccionario de datos. Aprender que las vistas de
C
f
s
A
diccionario
ranutilizar para recuperar metadatos y crear informes sobre los objetos de
ND senpueden
t
esquema.
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 3-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin al diccionario de datos


Consulta de las vistas de diccionario para obtener lo siguiente:
Informacin sobre tablas
Informacin sobre columnas
Informacin sobre restricciones

Consulta de las vistas de diccionario para obtener lo siguiente:

Informacin sobre vistas


Informacin sobre secuencias
Informacin sobre sinnimos
Informacin sobre ndices

s
a
h
rg)
o

Adicin de un comentario a una tabla y consulta de las


savistasidde
e
e
d
diccionario para obtener informacin sobre comentarios
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 3-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Diccionario de Datos

Servidor de
Oracle
Tablas que
contienen datos
de negocio:
EMPLOYEES
DEPARTMENTS
LOCATIONS
JOB_HISTORY
...

Vistas del
diccionario de
datos:
DICTIONARY
USER_OBJECTS
USER_TABLES
USER_TAB_COLUMNS
...

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Diccionario de Datos
le
N
b
a
O
r creadas por el usuario y contienen datos de negocio, como
I sonftablas
Las tablas de usuario
erecopilacin
C
s
A
EMPLOYEES.
Existe
otra
de tablas y vistas en Oracle Database denominada diccionario
D tran
N
deFdatos.
la crea y mantiene el servidor de Oracle y contiene informacin sobre la
U Esta
nrecopilacin
o
n
base de datos. El diccionario de datos est estructurado en tablas y vistas, como otros objetos de la
base de datos. El diccionario de datos no slo es comn para todas las Oracle Database, sino que
adems es una herramienta importante para todos los usuarios, desde los usuarios finales a los
diseadores de aplicaciones y administradores de base de datos.
Puede utilizar sentencias SQL para acceder al diccionario de datos. Puesto que el diccionario de
datos es de slo lectura, slo puede emitir consultas en sus tablas y vistas.
Puede consultar las vistas del diccionario que se basan en las tablas del diccionario para buscar
informacin como:
Definiciones de todos los objetos de esquema de la base de datos (tablas, vistas, ndices,
sinnimos, secuencias, procedimientos, funciones, paquetes, disparadores, etc.)
Valores por defecto para columnas
Informacin sobre restricciones de integridad
Nombres de usuario de Oracle
Privilegios y roles otorgados a cada usuario
Informacin general de la base de datos adicional
Oracle Database: Conceptos Fundamentales de SQL II 3-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Estructura del Diccionario de Datos

Servidor de
Oracle

Consta de:
Tablas base
Vistas con acceso para usuarios

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Estructura del Diccionario de Datos
le
N
b
a
O
I
Las tablas baseCsubyacentes
eralmacenan informacin sobre la base de datos asociada. Slo el servidor
f
s
A
de OracleD
debe escribir
an y leer estas tablas. En raras ocasiones acceder a ellas directamente.
r
N
t
U
Existen
nvistas que resumen y muestran la informacin almacenada en las tablas base del
F varias
o
n
diccionario de datos. Estas vistas descodifican los datos de la tabla base en informacin til (como
nombres de usuarios o tablas) mediante uniones y clusulas WHERE para simplificar la unin.
A la mayora de los usuarios se le proporciona acceso a las vistas en lugar de tablas base.
El usuario de Oracle SYS posee todas las tablas base y las vistas con acceso para usuarios del
diccionario de datos. Ningn usuario de Oracle debe modificar nunca (UPDATE, DELETE, o
INSERT) objetos de esquema o filas que estn en el esquema SYS porque dicha actividad puede
comprometer la integridad de los datos.

Oracle Database: Conceptos Fundamentales de SQL II 3-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Estructura del Diccionario de Datos


Ver reglas de nomenclatura:
Prefijo de Vista

Objetivo

USER

Vista del usuario (contenido del esquema; propiedad


del usuario)

ALL

Vista del usuario ampliada (contenido al que puede


acceder)

DBA

Vista del administrador de la base de datos


(contenido de los esquemas de todos los usuarios)

V$

Datos relacionados con el rendimiento

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Estructura del Diccionario de Datos
le (continuacin)
N
b
a
O
El diccionario C
deIdatos consta
er de un juego de vistas. En muchos casos, un juego de vistas consta de
f
s
A
tres vistasDque contienen
similar y que se distingue de las dems por el prefijo.
ranvistainformacin
N nhay-tuna
Por U
ejemplo,
denominada USER_OBJECTS, otra ALL_OBJECTS y una tercera
F no
DBA_OBJECTS.

Estas tres vistas contienen informacin similar sobre los objetos de la base de datos, excepto en que
el mbito es diferente. USER_OBJECTS contiene informacin sobre los objetos que posee o que ha
creado. ALL_OBJECTS contiene informacin sobre todos los objetos a los que tiene acceso.
DBA_OBJECTScontiene informacin sobre todos los objetos que poseen todos los usuarios. Para las
vistas con el prefijo ALL o DBA, suele haber una columna adicional en la vista OWNER para
identificar al propietario del objeto.
Tambin hay un juego de vistas con el prefijo v$. Estas vistas son dinmicas por naturaleza y
contienen la informacin sobre el rendimiento. Las tablas de rendimiento dinmico no son autnticas
tablas y la mayora de los usuarios no pueden acceder a ellas. Sin embargo, los administradores de
base de datos pueden consultar y crear vistas en las tablas y otorgar acceso a dichas vistas a otros
usuarios. Este curso no profundiza en estas vistas.

Oracle Database: Conceptos Fundamentales de SQL II 3-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Vistas de Diccionario


Empezar en DICTIONARY. Contiene los nombres y las
descripciones de las tablas y vistas del diccionario.
DESCRIBE DICTIONARY

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de las Vistas de Diccionario
le
N
b
a
O
Para familiarizarse
r del diccionario, puede utilizar la vista denominada DICTIONARY.
I con lasfevistas
C
s
A
ContieneD
el nombreaynla descripcin breve de cada vista del diccionario a la que tiene acceso.
N
-tr para buscar informacin sobre un nombre de vista concreto o buscar en la
U
Puede
consultas
n
F escribir
o
columna n
COMMENTS una palabra o un trmino. En el ejemplo mostrado, se describe la vista
SELECT *
FROM
dictionary
WHERE table_name = 'USER_OBJECTS';

DICTIONARY. Tiene dos columnas. La sentencia SELECT recupera informacin sobre la vista del
diccionario denominada USER_OBJECTS. La vista USER_OBJECTS contiene informacin sobre
todos los objetos que posee.
Puede escribir consultas para buscar en la columna COMMENTS una palabra o un trmino.
Por ejemplo, la siguiente consulta devuelve los nombres de todas las vistas a las que tiene acceso en
las que la columna COMMENTS contiene la palabra columnas:
SELECT table_name
FROM dictionary
WHERE LOWER(comments) LIKE '%columns%';

Nota: los nombres del diccionario de datos estn en maysculas.

Oracle Database: Conceptos Fundamentales de SQL II 3-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Vistas USER_OBJECTS y ALL_OBJECTS


USER_OBJECTS:
Consulte USER_OBJECTS para ver todos los objetos que
posee.
Mediante USER_OBJECTS, puede obtener una lista de
todos los nombres y tipos de objetos del esquema,
adems de la siguiente informacin:
Fecha de creacin
Fecha de la ltima modificacin
Estado (vlido o no vlido)

s
a
h
g)
r
o

ALL_OBJECTS:
sa ide
e
d
y t Ga ulos
Consulte ALL_OBJECTS para ver todos los
roobjetos
p
en
que tiene acceso.
@
d
n
u
t
io
S
c
a
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Vistas USER_OBJECTS P
y ALL_OBJECTS
N rabl
O
Puede consultar la
vista USER_OBJECTS
para ver los nombres y tipos de todos los objetos del
I
e
C
f
s
A
esquema.D
n varias columnas:
ratiene
N Estanvista
t
U
OBJECT_NAME:
nombre del objeto
F OBJECT_ID:
no
nmero de objeto de diccionario del objeto
OBJECT_TYPE: tipo de objeto (como TABLE, VIEW, INDEX, SEQUENCE)
CREATED: registro de hora de creacin del objeto
LAST_DDL_TIME: registro de hora de la ltima modificacin del objeto resultante de un
comando de lenguaje de definicin de datos (DDL)
STATUS: estado del objeto (VALID, INVALID o N/A)
GENERATED: ha generado el sistema el nombre de este objeto? (S|N)

Nota: sta no es una lista completa de las columnas. Para obtener una lista completa, consulte
USER_OBJECTS en Oracle Database Reference (Referencia de Oracle Database).
Tambin puede consultar la vista ALL_OBJECTS para ver una lista de todos los objetos a los que
tiene acceso.

Oracle Database: Conceptos Fundamentales de SQL II 3-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Vista USER_OBJECTS

SELECT object_name, object_type, created, status


FROM
user_objects
ORDER BY object_type;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O
ce
Vista USER_OBJECTS PR le li
b
ON felosranombres,
En el ejemplo C
se Imuestran
los tipos, las fechas de creacin y los estados de todos los
s
A
objetos propiedad
D trdeaneste usuario.
N
U
La
OBJECT_TYPE
contiene los valores de TABLE, VIEW, SEQUENCE, INDEX,
nFcolumna
o
n
PROCEDURE, FUNCTION, PACKAGE o TRIGGER.

La columna STATUS contiene un valor deVALID, INVALID o N/A. Aunque las tablas son siempre
vlidas, las vistas, los procedimientos, las funciones, los paquetes y los disparadores pueden no ser
vlidos.
Vista CAT
Para obtener una consulta y salida simplificada, puede consultar la vista CAT. Esta vista slo
contiene dos columnas: TABLE_NAME y TABLE_TYPE. Proporciona los nombres de todos los
objetos INDEX, TABLE, CLUSTER, VIEW, SYNONYM, SEQUENCE o UNDEFINED.
Nota: CAT es un sinnimo para una vista USER_CATALOG que muestra las tablas, vistas, sinnimos
y secuencias que posee el usuario.

Oracle Database: Conceptos Fundamentales de SQL II 3-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin al diccionario de datos


Consulta de las vistas de diccionario para obtener lo siguiente:
Informacin sobre tablas
Informacin sobre columnas
Informacin sobre restricciones

Consulta de las vistas de diccionario para obtener lo siguiente:

Informacin sobre vistas


Informacin sobre secuencias
Informacin sobre sinnimos
Informacin sobre ndices

s
a
h
rg)
o

Adicin de un comentario a una tabla y consulta de las


savistasidde
e
e
d
diccionario para obtener informacin sobre comentarios
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 3-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Tablas


USER_TABLES:
DESCRIBE user_tables

SELECT table_name
FROM
user_tables;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c

a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Tablas
le
N
b
a
O
Puede utilizar la vista
USER_TABLES
para obtener los nombres de todas las tablas. La vista
r
einformacin
CIcontiene
f
s
A
USER_TABLES
sobre
las tablas. Adems de proporcionar el nombre de la
D tran
N
tabla,
detallada sobre el almacenamiento.
ninformacin
FUcontiene
o
n
La vista TABS es un sinnimo de la vista USER_TABLES. Puede consultarla para ver una lista de las
tablas que posee:
SELECT table_name
FROM tabs;

Nota: para obtener una lista completa de las columnas de la vista USER_TABLES, consulte
USER_TABLES en Oracle Database Reference (Referencia de Oracle Database).
Tambin puede consultar la vista ALL_TABLES para ver una lista de todas las tablas a las que tiene
acceso.

Oracle Database: Conceptos Fundamentales de SQL II 3-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Columnas


USER_TAB_COLUMNS:
DESCRIBE user_tab_columns

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Columnas le
N USER_TAB_COLUMNS
b
a
Puede consultar la
para obtener informacin sobre las columnas de las
r
IOvista
e
C
f
s
A
tablas. Aunque
la
vista
USER_TABLES
proporciona
informacin sobre los nombres de tabla y el
D tran
N
almacenamiento,
FU non- en la vista USER_TAB_COLUMNS encontrar informacin de columna.
Esta vista contiene informacin como:

Nombres de columna
Tipos de dato de columna
Longitud de los tipos de dato
Precisin y escala para las columnas NUMBER
Si se permiten valores nulos (Hay alguna restriccin NOT NULL en la columna?)
Valor por defecto
Nota: para obtener una lista completa y descripcin de las columnas de la vista
USER_TAB_COLUMNS, consulte USER_TAB_COLUMNS en Oracle Database Reference
(Referencia de Oracle Database).

Oracle Database: Conceptos Fundamentales de SQL II 3-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Columnas

SELECT column_name, data_type, data_length,


data_precision, data_scale, nullable
FROM
user_tab_columns
WHERE table_name = 'EMPLOYEES';

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Columnas (continuacin)
le
N
b
a
O
Si consulta la tabla
encontrar detalles sobre las columnas como los
I USER_TAB_COLUMNS,
er
C
f
s
A
nombres,D
andato, las longitudes de tipos de dato, las restricciones nulas y los valores por
rde
Ndelosunantipos
t
defecto
columna.
U
F no
En el ejemplo
anterior se muestran las columnas, los tipos de dato, la longitud de datos y las
restricciones nulas de la tabla EMPLOYEES. Tenga en cuenta que esta informacin es similar a la
salida del comando DESCRIBE.
Para ver informacin sobre el juego de columnas como no utilizadas, puede utilizar la vista de
diccionario USER_UNUSED_COL_TABS.
Nota: los nombres de los objetos en el diccionario de datos estn en mayscula.

Oracle Database: Conceptos Fundamentales de SQL II 3-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Restricciones

USER_CONSTRAINTS describe las definiciones de


restricciones en la tabla.
USER_CONS_COLUMNS describe las columnas que posee y
que se han especificado en las restricciones.
DESCRIBE user_constraints

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
n
ud
o
t
i
S
c

a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Restricciones
le
N
b
a
O
Inombresfeder las restricciones, el tipo de restriccin, el nombre de la tabla a la que se
Puede buscar los
C
A
aplica la D
restriccin,
la
nscondicin de comprobacin de las restricciones, informacin de restricciones
a
r
N
t
deFclave
U ajena,
n-regla de supresin para las restricciones de clave ajena, el estado y otros muchos tipos
o
n
de informacin sobre las restricciones.
Nota: para obtener una lista completa y descripcin de las columnas de la vista
USER_CONSTRAINTS, consulte USER_CONSTRAINTS en Oracle Database Reference
(Referencia de Oracle Database).

Oracle Database: Conceptos Fundamentales de SQL II 3-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

USER_CONSTRAINTS: Ejemplo
SELECT constraint_name, constraint_type,
search_condition, r_constraint_name,
delete_rule, status
FROM
user_constraints
WHERE table_name = 'EMPLOYEES';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
USER_CONSTRAINTS: Ejemplo
P
N se consulta
bl la vista USER_CONSTRAINTS para buscar los nombres, tipos,
a
O
En el ejemplo mostrado,
r
I
fe nombre de la restriccin nica a la que hace referencia la clave ajena,
s
AdeCcomprobacin,
condiciones
n
D
a una clave ajena y estado de las restricciones de la tabla EMPLOYEES.
rde
Nsupresin
t
regla
de
U
n
F no
CONSTRAINT_TYPE
puede ser:
C (restriccin de control en una tabla) o NOT NULL)
P (clave primaria)
U (clave nica)
R (integridad referencial)
V (con opcin de control, en una vista)
O (slo lectura, en una vista)
DELETE_RULE puede ser:
CASCADE: si se suprime el registro principal, se suprimen tambin los registros secundarios.
SET NULL: si se suprime el registro principal, cambia el registro secundario respectivo a nulo.
NO ACTION: un registro principal slo se puede suprimir si no existen registros secundarios.
STATUS puede ser:
ENABLED: la restriccin est activa.
DISABLED: no se ha activado la restriccin.

Oracle Database: Conceptos Fundamentales de SQL II 3-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Consulta de USER_CONS_COLUMNS

DESCRIBE user_cons_columns

SELECT constraint_name, column_name


FROM
user_cons_columns
WHERE table_name = 'EMPLOYEES';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his

d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Consulta de USER_CONS_COLUMNS
P
bl
a
r
ION de
Para buscar losCnombres
las
columnas
a las que se aplica una restriccin, consulte la vista de
e
f
s
A
diccionario
USER_CONS_COLUMNS.
Esta
vista indica el nombre del propietario de una restriccin,
D tran
N
elFnombre
U deonla-restriccin, la tabla en la que se aplica la restriccin, los nombres de las columnas
n
con la restriccin
y la posicin original de la columna o el atributo en la definicin del objeto.
Nota: una restriccin se puede aplicar a ms de una columna.
Tambin puede escribir una condicin de unin entre USER_CONSTRAINTS y
USER_CONS_COLUMNS para crear una salida personalizada de ambas tablas.

Oracle Database: Conceptos Fundamentales de SQL II 3-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin al diccionario de datos


Consulta de las vistas de diccionario para obtener los siguiente:
Informacin sobre tablas
Informacin sobre columnas
Informacin sobre restricciones

Consulta de las vistas de diccionario para obtener lo siguiente:

Informacin sobre vistas


Informacin sobre secuencias
Informacin sobre sinnimos
Informacin sobre ndices

s
a
h
rg)
o

Adicin de un comentario a una tabla y consulta de las


savistasidde
e
e
d
diccionario para obtener informacin sobre comentarios
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 3-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Vistas


1

DESCRIBE user_views

SELECT view_name FROM user_views;

a
s
a
)h
3 SELECT text FROM user_views
g
r
WHERE view_name = 'EMP_DETAILS_VIEW';
o e
a
s
de Guid
y
o
pr ent

@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Vistas
le
N
b
a
O
Despus de crearIla vista, e
puede
r consultar la vista del diccionario de datos denominada
Cpara ver
f
s
A
USER_VIEWS
el
nombre
y la definicin de la vista. El texto de la sentencia SELECT que
n
D
a
r
N
t
constituye
- se almacena en una columna LONG. La columna LENGTH es el nmero de
FU laonvista
caracteresnde
la sentencia SELECT Por defecto, al realizar una seleccin en una columna LONG, slo
se muestran los primeros 80 caracteres del valor de la columna. Para ver ms de 80 caracteres en
SQL*Plus, utilice el comando SET LONG:
SET LONG 1000

En los ejemplos de la diapositiva:


1. Se muestran las columnas USER_VIEWS. Tenga en cuenta que sta es slo una lista parcial.
2. Se recuperan los nombres de las vistas.
3. Se muestra la sentencia SELECT para EMP_DETAILS_VIEW desde el diccionario.
Acceso a los Datos a travs de Vistas
Al acceder a los datos a travs de una vista, el servidor de Oracle realiza las siguientes operaciones:
Recupera la definicin de la vista de la tabla USER_VIEWS del diccionario de datos.
Comprueba los privilegios de acceso de la tabla base de la vista.
Convierte la consulta de la vista en una operacin equivalente en la tabla o tablas base
subyacentes. Es decir, se recuperan los datos o se realiza un actualizacin de las tablas base.

Oracle Database: Conceptos Fundamentales de SQL II 3-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Secuencias

DESCRIBE user_sequences

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Secuenciasle
b todas las secuencias que posee. Al crear la secuencia, se
La vista USER_SEQUENCES
ION feradescribe
C
especifican
los criterios
nsalmacenados en la vista USER_SEQUENCES. Las columnas de esta vista
DA
a
r
N
t
son:
F USEQUENCE_NAME:
non
nombre de la secuencia.

MIN_VALUE: valor mnimo de la secuencia.


MAX_VALUE: valor mximo de la secuencia.
INCREMENT_BY: valor de incremento de la secuencia.
CYCLE_FLAG: est la secuencia a punto de alcanzar el lmite?.
ORDER_FLAG: se han generado los nmeros de secuencia en orden?.
CACHE_SIZE: nmero de nmeros de secuencia en cach.
LAST_NUMBER: ltimo nmero de secuencia escrito en el disco. Si una secuencia utiliza el
almacenamiento en cach, el nmero escrito en el disco es el ltimo nmero colocado en la
cach de secuencia. Es probable que este nmero sea mayor que el ltimo nmero de secuencia
utilizado.

Oracle Database: Conceptos Fundamentales de SQL II 3-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Confirmacin de Secuencias

Verificar los valores de secuencia en la tabla de


diccionario de datos USER_SEQUENCES.
SELECT
FROM

sequence_name, min_value, max_value,


increment_by, last_number
user_sequences;

a
s
a
)h
g
r
La columna LAST_NUMBER muestra el siguiente nmero
o e
a
s
de secuencia disponible si no se especifica NOCACHE.
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Confirmacin de Secuencias le
N raseb registra en el diccionario de datos. Puesto que una secuencia es un
IlaOsecuencia,
Despus de crear
C
fe
s
A de datos,
objeto deD
base
podr identificarla en la tabla de diccionario de datos USER_OBJECTS.
n
ra la configuracin de la secuencia mediante su seleccin en la vista de
N puede
t
U
Tambin
confirmar
n
F no
diccionario
de datos USER_SEQUENCES.
Visualizacin del Siguiente Valor de Secuencia Disponible sin Aumentarlo
Si la secuencia se ha creado con NOCACHE, es posible ver el siguiente valor de secuencia disponible
sin aumentarlo con la consulta de la tabla USER_SEQUENCES.

Oracle Database: Conceptos Fundamentales de SQL II 3-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre ndices

USER_INDEXES proporciona informacin sobre los


ndices.
USER_IND_COLUMNS describe las columnas que
comprenden los ndices y las columnas de los ndices de
las tablas.

DESCRIBE user_indexes

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@

on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre ndices
le
N
b
a
O
Consulte la vista IUSER_INDEXES
para obtener los nombres de los ndices, el nombre de tabla en la
er
C
f
s
A
que se crea
Del ndice
aynsi el ndice es nico.
r
N
t
U
Nota:
n una lista completa y descripcin de las columnas de la vistaUSER_INDEXES,
F paranoobtener
consulte USER_INDEXES
en Oracle Database Reference (Referencia de Oracle Database) para
10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL II 3-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

USER_INDEXES: Ejemplos
a

SELECT index_name, table_name,uniqueness


FROM
user_indexes
WHERE table_name = 'EMPLOYEES';

a
s
a
)h
b SELECT index_name, table_name
g
r
o e
FROM
user_indexes
a
s
de Guid
WHERE table_name = 'emp_lib';
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
USER_INDEXES: Ejemplo
P
N raba, lla vista USER_INDEXES se consulta para obtener el nombre del
O
En el ejemplo deIla
diapositiva
fe en la que se crea el ndice y si el ndice el nico.
AC dealanstabla
ndice, elD
nombre
N nde-tlar diapositiva b, observe que el servidor de Oracle proporciona un nombre genrico
En
FelUejemplo
o
al ndice n
creado para la columna PRIMARY KEY. La tabla EMP_LIB se crea mediante el siguiente
cdigo:
CREATE TABLE EMP_LIB
(book_id NUMBER(6)PRIMARY KEY ,
title VARCHAR2(25),
category VARCHAR2(20));

Oracle Database: Conceptos Fundamentales de SQL II 3-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Consulta USER_IND_COLUMNS

DESCRIBE user_ind_columns

a
s
a
SELECT index_name, column_name,table_name
)h
g
r
FROM
user_ind_columns
o e
a
s
WHERE index_name = 'lname_idx';
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Consulta USER_IND_COLUMNS
P
NUSER_IND_COLUMNS
bl
a
O
La vista de diccionario
proporciona informacin, como el nombre del ndice,
r
I
e
C
f
s
A
nombre de
raconn ndices, nombre de una columna del ndice y la posicin de la columna en el
NDla ntabla
t
ndice.
U
F no
En el ejemplo
de la diapositiva, la tablaemp_test y el ndice LNAME_IDX se crean mediante el
siguiente cdigo:
CREATE TABLE emp_test AS SELECT * FROM employees;
CREATE INDEX LNAME_IDX ON emp_test(Last_Name);

Oracle Database: Conceptos Fundamentales de SQL II 3-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Informacin sobre Sinnimos

DESCRIBE user_synonyms

SELECT *
FROM
user_synonyms;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Informacin sobre Sinnimos le
abdiccionario describe los sinnimos privados (sinnimos que slo
La vista USER_SYNONYMS
ION ferdel
C
posee el usuario).
DA trans
N
Puede
n-esta vista para buscar los sinnimos. Puede consultar ALL_SYNONYMS para buscar
FU consultar
o
n
el nombre de todos los sinnimos disponibles para el usuario y los objetos a los que se aplican estos
sinnimos.
Las columnas de esta vista son:
SYNONYM_NAME: nombre del sinnimo
TABLE_OWNER: propietario del objeto al que hace referencia el sinnimo
TABLE_NAME: nombre de la tabla o vista a la que hace referencia el sinnimo
DB_LINK: nombre de la referencia del enlace de base de datos (si lo hay)

Oracle Database: Conceptos Fundamentales de SQL II 3-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin al diccionario de datos


Consulta de las vistas de diccionario para obtener los siguiente:
Informacin sobre tablas
Informacin sobre columnas
Informacin sobre restricciones

Consulta de las vistas de diccionario para obtener lo siguiente:

Informacin sobre vistas


Informacin sobre secuencias
Informacin sobre sinnimos
Informacin sobre ndices

s
a
h
rg)
o

Adicin de un comentario a una tabla y consulta de las


savistasidde
e
e
d
diccionario para obtener informacin sobre comentarios
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 3-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Adicin de Comentarios a una Tabla

Puede agregar comentarios a una tabla o columna


mediante la sentencia COMMENT:
COMMENT ON TABLE employees
IS 'Employee Information';
COMMENT ON COLUMN employees.first_name
IS 'First name of the employee';

has
e
a
s
ALL_COL_COMMENTS
de Guid
y
o
USER_COL_COMMENTS
pr ent
@
ALL_TAB_COMMENTS
on Stud
i
c
a his
USER_TAB_COMMENTS
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Adicin de Comentarios a unale
Tabla
N
b
a
O
Puede agregarC
unIcomentario
4.000 bytes sobre una columna, tabla, vista o instantnea
fer de hasta
s
medianteD
la A
sentencianCOMMENT.
El comentario se almacena en el diccionario de datos y se puede
ralas siguientes vistas del diccionario de datos en el columna COMMENTS:
N en una
t
visualizar
de
U
n
F ALL_COL_COMMENTS
no

Los comentarios se pueden visualizar a travs de las


)
vistas del diccionario de datos:
org

USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS

Sintaxis
COMMENT ON {TABLE table | COLUMN table.column}
IS 'text';
En la sintaxis:
table es el nombre de la tabla
column es el nombre de la columna de una tabla
text
es el texto de un comentario
Para borrar un comentario de la base de datos, defnalo en una cadena vaca (''):
COMMENT ON TABLE employees IS '';

Oracle Database: Conceptos Fundamentales de SQL II 3-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Las vistas de diccionario que se basan en tablas del diccionario
contienen informacin como:
1. Definiciones de todos los objetos de esquema en la base
de datos
2. Valores por defecto de las columnas
3. Informacin sobre restricciones de integridad
4. Privilegios y roles otorgados a cada usuario
5. Todo lo anterior
as

)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 5
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 3-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido a buscar informacin sobre
los objetos a travs de las siguientes vistas de diccionario:
DICTIONARY
USER_OBJECTS
USER_TABLES
USER_TAB_COLUMNS
USER_CONSTRAINTS
USER_CONS_COLUMNS
s
a
h
USER_VIEWS
rg)
o

USER_SEQUENCES
sa ide
e
d
USER_INDEXES
roy nt Gu
p
e
USER_SYNONYMS
on@ tud

i
S
c
a
s
i
d
h
fun se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r de algunas de las vistas de diccionario disponibles. Puede utilizar
I
En esta leccin,
aprender
eacerca
C
f
s
A
estas vistas
diccionario
an para buscar informacin sobre las tablas, las restricciones, las vistas, las
r
NDydelos
t
secuencias
sinnimos.
U
F non

Oracle Database: Conceptos Fundamentales de SQL II 3-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 3: Visin General


En esta prctica se abordan los siguientes temas:

Consulta de las vistas de diccionario para obtener informacin


sobre tablas y columnas
Consulta de las vistas de diccionario para obtener informacin
sobre restricciones
Consulta de las vistas de diccionario para obtener informacin
sobre vistas
Consulta de las vistas de diccionario para obtener informacin
sobre secuencias
s
Consulta de las vistas de diccionario para obtener informacin ) ha
rg
sobre sinnimos
o

sa ide
Consulta de las vistas de diccionario para obtener informacin
e
d
sobre ndices
roy nt Gu
p
dlasevistas de
Adicin de un comentario a una tabla y consulta
n@ de
u
o
t
i
c comentarios
diccionario para obtener informacin
is S
dasobre

fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 3: Visin General
le
N
b
a
O
r vistas de diccionario para obtener informacin sobre el esquema.
En esta prctica,
elas
CIconsultar
f
s
A
ND n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 3-29

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Manipulacin de Juegos de Datos Grandes

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo siguiente:
Manipular datos mediante subconsultas
Especificar valores por defecto explcitos en las sentencias
INSERT y UPDATE
Describir las funciones de sentencias INSERTs
Utilizar los siguientes tipos sentencias INSERTs de varias
tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

a
s
a
)h
g
r
o e
a
s
de Guid
y
Fusin de Filas en una Tabla
o
pr ent
@
Realizar un seguimiento de los cambiosnen los datos
ud a lo largo
o
t
i
S
c
de un perodo de tiempo
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I
En esta leccin,
aprender
datos en Oracle Database mediante subconsultas. Aprender a
ea rmanipular
f
s
AC clave
utilizar laD
palabra
DEFAULT
en
sentencias
INSERT y UPDATE para identificar un valor de
n
a
r
N
t
- Tambin aprender sobre sentencias INSERT de varias tablas, la sentencia
columna
U porodefecto.
n
F
n
MERGE y el seguimiento de cambios en la base de datos.

Oracle Database: Conceptos Fundamentales de SQL II 4-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Manipulacin de datos mediante subconsultas


Especificacin de valores por defecto explcitos en
sentencias INSERT y UPDATE
Uso de los siguientes tipos de sentencias INSERTs de
varias tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

s
a
h
Fusin de Filas en una Tabla
rg)
o

Seguimiento de los cambios en los datos a lo largo


sade iun
e
e
d
d
perodo de tiempo
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Subconsultas para Manipular Datos


Puede utilizar subconsultas en sentencias de lenguaje de
manipulacin de datos (DML) para:
Recuperar datos mediante una vista en lnea
Copiar datos de una tabla a otra
Actualizar datos en tablas segn los valores de otra tabla
Suprimir filas de una tabla segn las filas de otra tabla

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Subconsultas para Manipular
le Datos
N
b
a
O
r
Ise pueden
Las subconsultas
para recuperar datos de una tabla que puede utilizar como entrada
eutilizar
f
s
AC aINSERT
para una D
sentencia
en
una
tabla diferente. De esta forma, puede copiar de forma sencilla
n
r
N
t
grandes
U volmenes
n- de datos de una tabla a otra con una nica sentencia SELECT. Igualmente, puede
F
o
n
utilizar las subconsultas para realizar actualizaciones y supresiones masivas, utilizndolas en la
clusula WHERE de las sentencias UPDATE y DELETE. Tambin puede utilizar subconsultas en la
clusula FROM de una sentencia SELECT. Se denomina una vista en lnea.
Nota: ha aprendido cmo actualizar y suprimir filas segn otra tabla en el curso titulado Oracle
Database: Conceptos Fundamentales de SQL I.

Oracle Database: Conceptos Fundamentales de SQL II 4-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Datos mediante una


Subconsulta como Origen
SELECT department_name, city
FROM
departments
NATURAL JOIN (SELECT l.location_id, l.city, l.country_id
FROM
loc l
JOIN
countries c
ON(l.country_id = c.country_id)
JOIN regions USING(region_id)
WHERE region_name = 'Europe');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Recuperacin de Datos mediante
le una Subconsulta como Origen
N
b
a
O
Puede utilizar unaI subconsulta
en la clusula FROM de una sentencia SELECT, que es muy similar a
elasr vistas.
C
f
s
A
la forma en
la
que
se
usan
Una subconsulta en la clusula FROM de una sentencia SELECT
n
Ddenominada
a
r
N
t
tambin
se
una
vista
en
lnea.
Una subconsulta en la clusula FROM de una sentencia
U onF
SELECT n
define un origen de datos para una sentencia SELECT determinada, slo para dicha

sentencia SELECT. Como ocurre con una vista de base de datos, la sentencia SELECT de la
subconsulta puede ser tan simple o compleja como desee.
Al crear una vista de base de datos, la sentencia SELECT se almacena en el diccionario de datos.
En las situaciones en las que no tiene los privilegios necesarios para crear vistas de base de datos o si
desea probar la idoneidad de una sentencia SELECT para convertirla en una vista, puede utilizar una
vista en lnea.
Con las vistas en lnea, puede tener todo el cdigo necesario para soportar la consulta en un slo
lugar. Esto significa que puede evitar la complejidad de la creacin de una vista de base de datos
independiente. El ejemplo de la diapositiva muestra cmo utilizar una vista en lnea para mostrar el
nombre de departamento y la ciudad en Europa. La subconsulta en la clusula FROM recupera el ID
de ubicacin, nombre de ciudad y el pas mediante la unin de tres tablas diferentes. La salida de la
consulta interna se considera como una tabla para la consulta externa. La consulta interna es similar a
la de una vista de base de datos, pero no tiene ningn nombre fsico.
En el ejemplo de la diapositiva, la tabla loc se crea mediante la ejecucin de la siguiente sentencia:
CREATE TABLE loc AS SELECT * FROM locations;

Oracle Database: Conceptos Fundamentales de SQL II 4-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Datos mediante una Subconsulta como Origen (continuacin)


Puede mostrar la misma salida que en el ejemplo de la diapositiva mediante los siguientes dos pasos:
1. Cree una vista de base de datos:
CREATE OR REPLACE VIEW european_cities
AS
SELECT l.location_id, l.city, l.country_id
FROM
loc l
JOIN
countries c
ON(l.country_id = c.country_id)
JOIN regions USING(region_id)
WHERE region_name = 'Europe';

2. Una la vista EUROPEAN_CITIES con la tabla DEPARTMENTS:


SELECT department_name, city
FROM
departments
NATURAL JOIN european_cities;

Nota: ha aprendido cmo crear vistas de base de datos en el curso titulado Oracle Database:
Conceptos Fundamentales de SQL I.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Insercin mediante una Subconsulta como Destino

INSERT INTO (SELECT l.location_id, l.city, l.country_id


FROM
locations l
JOIN
countries c
ON(l.country_id = c.country_id)
JOIN regions USING(region_id)
WHERE region_name = 'Europe')
VALUES (3300, 'Cardiff', 'UK');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Insercin mediante una Subconsulta
le como Destino
N
b
a
O
Puede utilizar unaI subconsulta
r en lugar del nombre de la tabla en la clusula INTO de la sentencia
C nsfede
INSERT.D
LaAlista SELECT
esta subconsulta debe tener el mismo nmero de columnas que la lista
a
r
N
t
de columnas
U ode
n-la clusula VALUES. Si la sentencia INSERT no funciona correctamente, se deben
F
n
seguir las reglas de las columnas de la tabla base. Por ejemplo, no puede introducir un ID de
ubicacin duplicado u omitir un valor obligatorio de la columna NOT NULL.

Este uso de subconsultas evita tener que crear una vista slo para realizar una operacin con
INSERT.
El ejemplo de la diapositiva utiliza una subconsulta en lugar de LOC para crear un registro para una
nueva ciudad europea.
Nota: tambin puede realizar la operacin INSERT en la vista EUROPEAN_CITIES mediante el
siguiente cdigo:
INSERT INTO european_cities
VALUES (3300,'Cardiff','UK');

Oracle Database: Conceptos Fundamentales de SQL II 4-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Insercin mediante una Subconsulta como Destino


Comprobar los resultados.
SELECT location_id, city, country_id
FROM
loc

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Insercin mediante una Subconsulta
le como Destino (continuacin)
N
b
a
O
El ejemplo de C
la Idiapositiva
ermuestra que la insercin mediante la vista en lnea ha creado un nuevo
f
s
A
registro en
la
tabla
base
LOC.
D tran
N
U
En
n-ejemplo se muestran los resultados de la subconsulta utilizada para identificar la tabla
Fel siguiente
o
n
para la sentencia INSERT.
SELECT l.location_id, l.city, l.country_id
FROM
loc l
JOIN
countries c
ON(l.country_id = c.country_id)
JOIN regions USING(region_id)
WHERE region_name = 'Europe'

Oracle Database: Conceptos Fundamentales de SQL II 4-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Palabra Clave WITH CHECK OPTION


en Sentencias DML
La palabra clave WITH CHECK OPTION prohbe cambiar filas
que no estn en la subconsulta.
INSERT INTO ( SELECT location_id, city, country_id
FROM
loc
WHERE country_id IN
(SELECT country_id
FROM countries
NATURAL JOIN regions
WHERE region_name = 'Europe')
WITH CHECK OPTION )
VALUES (3600, 'Washington', 'US');

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ceOPTION en Sentencias DML
i
RO CHECK
l
Uso de la Palabra Clave
WITH
P
le
N
b
a
O
Especifique la palabra
clave
OPTION para indicar que si se utiliza la subconsulta en
erWITH CHECK
CI en nuna
fsentencia
s
A
lugar de una
tabla
INSERT,
UPDATE o DELETE, ninguno de los cambios
D tra
N
producidos
FU noporn-las filas no incluidas en la subconsulta se permitirn en dicha tabla.
El ejemplo de la diapositiva muestra cmo utilizar una vista en lnea con WITH CHECK OPTION.

La sentencia INSERT impide la creacin de registros en la tabla LOC de una ciudad que no est en
Europa.
El siguiente ejemplo se ejecuta correctamente debido a los cambios en la lista VALUES.
INSERT INTO ( SELECT location_id, city, country_id
FROM
loc
WHERE country_id IN
(SELECT country_id
FROM countries
NATURAL JOIN regions
WHERE region_name = 'Europe')
WITH CHECK OPTION )
VALUES (3500, 'Berlin', 'DE');

Oracle Database: Conceptos Fundamentales de SQL II 4-9

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Uso de la Palabra Clave WITH CHECK OPTION en Sentencias DML (continuacin)
El uso de una vista en lnea con WITH CHECK OPTION proporciona un mtodo sencillo para evitar
cambios en la tabla.
Para evitar la creacin de una ciudad que no sea europea, tambin se puede utilizar una vista de base
de datos realizando los siguientes pasos:
1. Cree una vista de base de datos:
CREATE OR REPLACE VIEW european_cities
AS
SELECT location_id, city, country_id
FROM
locations
WHERE country_id in
(SELECT country_id
FROM countries
NATURAL JOIN regions
WHERE region_name = 'Europe')
WITH CHECK OPTION;

s
a
h
INSERT INTO european_cities
rg)
VALUES (3400,'New York','US');
o

sa ide
El segundo paso produce el mismo error como muestra la diapositiva.
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
2. Verifique los resultados insertando los datos:

Oracle Database: Conceptos Fundamentales de SQL II 4-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Manipulacin de datos mediante subconsultas


Especificacin de valores por defecto explcitos en
sentencias INSERT y UPDATE
Uso de los siguientes tipos de INSERTs de varias tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

s
Fusin de Filas en una Tabla
a
h
g)
Seguimiento de los cambios en los datos a lo largo de
run
o

perodo de tiempo
esa de
i

yd t Gu
o
r
p en
@
n
o
tud
i
S
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Visin General de la Funcin por Defecto


Explcita

Utilice la palabra clave DEFAULT como un valor de


columna donde el valor de columna por defecto es el
deseado.
Esto permite al usuario controlar dnde y cundo se debe
aplicar el valor por defecto a los datos.
Se pueden utilizar valores por defecto explcitos en las
sentencias INSERT y UPDATE.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Valores por Defecto Explcitosle
N clave
b DEFAULT en sentencias INSERT y UPDATE para identificar un
a
Opalabra
Se puede utilizar Ila
r
e
C
sf Si no existe ningn valor por defecto, se utiliza un valor nulo.
A por
valor de columna
defecto.
n
D
a
-tr le evita tener que codificar el valor por defecto en los programas o consultar el
UN DEFAULT
La
n
Fopcin
o
n para buscarlo, como se hizo antes de que de que se introdujera esta funcin.
diccionario
La codificacin del valor por defecto supone un problema si cambia el valor por defecto, ya que el
cdigo, por lo tanto, debe cambiar. Normalmente, no se suele realizar el acceso al diccionario en una
aplicacin; por lo tanto, es una funcin muy importante.

Oracle Database: Conceptos Fundamentales de SQL II 4-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Valores por Defecto Explcitos

DEFAULT con INSERT:

INSERT INTO deptm3


(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);

DEFAULT con UPDATE:

UPDATE deptm3
SET manager_id = DEFAULT
WHERE department_id = 10;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Valores por Defecto Explcitos
le
N
b
a
O
Especifique DEFAULT
I para
erdefinir la columna con el valor especificado anteriormente como el valor
C
f
s
A
por defecto
la a
columna.
n Si no se ha especificado ningn valor por defecto para la columna
r
ND para
t
correspondiente,
el
servidor
de Oracle define la columna en nula.
U
F non
En el primer ejemplo de la diapositiva, la sentencia INSERT utiliza un valor por defecto para la
columna MANAGER_ID. Si no se ha definido ningn valor por defecto para la columna, en su lugar
se inserta un valor nulo.
El segundo ejemplo utiliza la sentencia UPDATE para definir la columna MANAGER_ID en un valor
por defecto para el departamento 10. Si no se define ningn valor por defecto para la columna, el
valor se cambia a nulo.
Nota: al crear una tabla, puede especificar un valor por defecto para una columna. Esto se tratar en
Conceptos Fundamentales de SQL I.

Oracle Database: Conceptos Fundamentales de SQL II 4-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Copia de Filas de Otra Tabla

Escribir la sentencia INSERT con una subconsulta.

INSERT INTO sales_reps(id, name, salary, commission_pct)


SELECT employee_id, last_name, salary, commission_pct
FROM
employees
WHERE job_id LIKE '%REP%';

No utilizar la clusula VALUES.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Copia de Filas de Otra Tabla le
Puede utilizar la sentencia
agregar filas a la tabla en la que se derivan los valores de las
rab
ION feINSERTpara
C
s
A
tablas existentes.
En
lugar
de
la
clusula
VALUES, utilice una subconsulta.
D tran
N
Sintaxis
FU nonINSERT INTO table [ column (, column) ] subquery;

Hacer coincidir el nmero de columnas de la clusula


INSERT con el de la subconsulta.

En la sintaxis:
table
es el nombre de la tabla
column
es el nombre de la columna de la tabla que se debe rellenar
subquery
es la subconsulta que devuelve filas en la tabla
El nmero de columnas y sus tipos de dato de la lista de columnas de la clusula INSERT deben
coincidir con el nmero de valores y sus tipos de dato en la subconsulta. Para crear una copia de la
filas de una tabla, utilice SELECT * en la subconsulta.
INSERT INTO EMPL3
SELECT *
FROM
employees;

Nota: utilice la clusula LOG ERRORS en la sentencia DML para facilitar que termine la operacin
DML independientemente de los errores. Oracle escribe los detalles del mensaje de error en una tabla
de registro de errores que ha creado. Para obtener ms informacin, consulte Oracle Database SQL
Reference (Referencia de SQL de Oracle Database) para base de datos 10g u 11g.
Oracle Database: Conceptos Fundamentales de SQL II 4-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Manipulacin de datos mediante subconsultas


Especificacin de valores por defecto explcitos en
sentencias INSERT y UPDATE
Uso de los siguientes tipos de INSERTs de varias tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

s
Fusin de Filas en una Tabla
a
h
g)
Seguimiento de los cambios en los datos a lo largo de
run
o

perodo de tiempo
esa de
i

yd t Gu
o
r
p en
@
n
o
tud
i
S
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Visin General de Sentencias INSERT de


Varias de Tablas

Target_a

Sourcetab
INSERT ALL
INTO target_a VALUES(,,)
INTO target_b VALUES(,,)
INTO target_c VALUES(,,)
SELECT
FROM sourcetab
WHERE ;

a
s
a
)h
g
r
o e
a
s
de Guid
Subconsulta
y
o
pr ent
@
on Stud Target_c
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce de Varias de Tablas
i
RO INSERT
l
Visin General de Sentencias
P
le
N
b
a
O
En una sentenciaIINSERTede
r varias tablas, inserte las filas calculadas derivadas de las filas devueltas
C
f
s
A
de la evaluacin
n subconsulta en una o ms tablas.
D tderauna
N
U
Las
nINSERT de varias tablas son tiles en un escenario de almacn de datos. Debe cargar
F sentencias
o
n
el almacn de datos regularmente para que pueda cumplir con el propsito de facilitar el anlisis de
Target_b

negocio. Para ello, los datos de uno o ms sistemas operativos se deben extraer y copiar en el
almacn. El proceso de extraccin de datos del sistema de origen y colocacin en el almacn de datos
comnmente se denomina ETL, que significa extraccin, transformacin y carga.
Durante la extraccin, los datos deseados se deben identificar y extraer de muchos orgenes
diferentes, como sistemas de base de datos y aplicaciones. Despus de la extraccin, los datos se
deben transportar fsicamente al sistema de destino o a un sistema intermedio para futuros
procesamientos. Segn los medios de transporte seleccionados, se pueden realizar algunas
transformaciones durante este proceso. Por ejemplo, una sentencia SQL que accede directamente a
un destino remoto a travs de un gateway puede concatenar dos columnas como parte de la sentencia
SELECT.
Despus de cargar los datos en Oracle Database, se pueden ejecutar las transformaciones de datos
mediante operaciones SQL. Una sentencia INSERT de varias tablas es una de las tcnicas utilizadas
para implantar las transformaciones de datos de SQL.

Oracle Database: Conceptos Fundamentales de SQL II 4-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Visin General de Sentencias INSERT de


Varias de Tablas

Tambin puede utilizar la sentencia INSERTSELECT para


insertar filas en varias tablas como parte de una nica
sentencia DML.
Las sentencias INSERT de varias tablas se utilizan en
sistemas de almacenamiento de datos para transferir
datos de uno o ms orgenes operativos a un juego de
tablas de destino.
Proporcionan una mejora significativa del rendimiento en:

a
s
a
)h
g
r
o e
a
s
Una nica sentencia DML frente a un procedimiento
para
id
de G
u
y
o
realizar varias inserciones mediante la sintaxis
t
pr eIF...THEN
n
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce de Varias de Tablas (continuacin)
i
RO INSERT
l
Visin General de Sentencias
P
le
N
b
a
O
Las sentencias INSERT
deevarias
r tablas ofrecen la ventaja de la sentencia INSERT ... SELECT al
CI implicadas
f
s
A
llamar varias
tablas
como destinos. Sin la sentencia INSERT de varias tablas, ha tena
D tran
N
queU
utilizar n n
sentencias
INSERT ... SELECT independientes, procesando as los mismos datos de
F
o
n
origen n veces y aumentando la carga de trabajo de transformacin n veces.
Sentencia nica DML frente a diversas sentencias
INSERTSELECT

Al igual que sucede con la sentencia INSERT ... SELECT existente, la nueva sentencia se puede
ejecutar en paralelo y utilizar con el mecanismo de carga directa para obtener un rendimiento ms
rpido.
Cada registro de flujos de entrada, como una tabla de base de datos no relacional, ahora se puede
convertir en varios registros para un entorno de tabla de base de datos ms relacional. Asimismo,
para implantar esta funcionalidad ,debe escribir varias sentencias INSERT.

Oracle Database: Conceptos Fundamentales de SQL II 4-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Sentencias INSERT de Varias Tablas


Los diferentes tipos de sentencias INSERT de varias tablas
son:
INSERT incondicional
INSERT ALL condicional
INSERT mediante giro
INSERT FIRST condicional

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ice Tablas
ROdeeVarias
l
Tipos de Sentencias INSERT
P
N
bl indicar el tipo de sentencia INSERT que se va a ejecutar.
a
O
Utilice las diferentes
clusulas
para
r
I
C nsfe de varias tablas son:
Los tiposD
deA
sentenciasINSERT
ra
N nincondicional:
t
U
INSERT
por cada fila devuelta por la subconsulta, se inserta una fila en cada
F una de
nolas tablas de destino.

INSERT ALL condicional: por cada fila devuelta por la subconsulta, se inserta una fila en cada
tabla de destino si se cumple la condicin especificada.
INSERT mediante giro: se trata de un caso especial de INSERT ALL incondicional.
INSERT FIRST condicional: por cada fila devuelta por la subconsulta, se inserta una fila en la
primera tabla de destino en la que se cumple la condicin.

Oracle Database: Conceptos Fundamentales de SQL II 4-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencias INSERT de Varias Tablas

Sintaxis para INSERT de varias tablas:


INSERT [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]

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
RO Tablas
l
Sentencias INSERT deP
Varias
le
N
b
a
O
La diapositiva muestra
er genrico para sentencias INSERT de varias tablas.
CI nselfformato
A
INSERTD
a ALL into_clause
r
N incondicional:
t
U
n seguido de varias insert_into_clauses para realizar una sentencia INSERT
F noALL
Especifique
de varias tablas incondicional. El servidor de Oracle ejecuta cada insert_into_clause una vez
para cada fila devuelta por la subconsulta.
INSERT condicional: conditional_insert_clause
Especifique conditional_insert_clause para realizar una sentenciaINSERT de varias
tablas condicional. El servidor de Oracle filtra cada insert_into_clause mediante la
condicin WHEN correspondiente, que determina si dicha insert_into_clause se ejecuta.
Una nica sentencia INSERT de varias tablas puede contener hasta 127 clusulas WHEN.
INSERT condicional: ALL
Si especifica ALL, el servidor de Oracle evala cada clusula WHEN independientemente de los
resultados de la evaluacin de cualquier otra clusula WHEN. Para cada clusula WHEN cuya
condicin se evale como True, el servidor de Oracle ejecuta la lista de clusulas INTO
correspondientes.

Oracle Database: Conceptos Fundamentales de SQL II 4-19

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Sentencias INSERT de Varias Tablas (continuacin)
INSERT condicional: FIRST
Si especifica FIRST, el servidor de Oracle evala cada clusula WHEN en el orden en el que aparece
en la sentencia. Si la primera clusula WHEN se evala como True, el servidor de Oracle ejecuta la
clusula INTO correspondiente y omite las clusulas WHEN posteriores de la fila determinada.
INSERT condicional: Clusula ELSE
Para una fila determinada, si ninguna clusula WHEN se evala como True:
Si ha especificado una clusula ELSE, el servidor de Oracle ejecuta la lista de clusulas INTO
asociadas a la clusula ELSE.
Si no especifica una clusula ELSE, el servidor de Oracle no realiza ninguna accin para dicha
fila.
Restricciones en Sentencias INSERT de Varias Tablas
Puede realizar sentencias INSERT de varias tablas slo en tablas y no en vistas o vistas
materializadas.
No puede realizar una sentencia INSERT de varias tablas en una tabla remota.
No puede especificar una expresin de recopilacin de tablas al realizar una sentencia INSERT
de varias tablas.
En una sentencia INSERT de varias tablas, todas las clusulas insert_into_clauses no
se pueden combinar para especificar ms de 999 columnas de destino.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT ALL Incondicional

Seleccione los valores EMPLOYEE_ID, HIRE_DATE, SALARY y


MANAGER_ID de la tabla EMPLOYEES de aquellos empleados
cuyos EMPLOYEE_ID sean superiores a 200.
Inserte estos valores en las tablas SAL_HISTORY y
MGR_HISTORY mediante una sentencia INSERT de varias
tablas.

INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
INSERT ALL Incondicional
P
N rabselinsertan filas en las tablas SAL_HISTORY y MGR_HISTORY.
O
En el ejemplo de Ila
diapositiva
C nsfe
ASELECT
La sentencia
D
a recupera los detalles como el ID de empleado, la fecha de contratacin, el
r
N
t
U
salario
el o
IDnde gestor de aquellos empleados cuyo ID de empleado sea superior a 200 de la tabla
F yn
EMPLOYEES.
Los detalles como el ID de empleado, la fecha de contratacin y el salario se insertan
en la tabla SAL_HISTORY. Los detalles como el ID de empleado, el ID de gestor y el salario se
insertan en la tabla MGR_HISTORY.
Esta sentencia INSERT se denomina una sentencia INSERT incondicional porque no se aplican ms
restricciones a las filas que las recuperadas por la sentencia SELECT. Todas las filas recuperadas por
la sentencia SELECT se insertan en dos tablas: SAL_HISTORY y MGR_HISTORY. La clusula
VALUES en las sentencias INSERT especifica las columnas de la sentencia SELECT que se deben
insertar en cada una de las tablas. Cada fila devuelta por la sentencia SELECT da como resultado dos
inserciones: una para la tabla SAL_HISTORY y otra para la tabla MGR_HISTORY.

Oracle Database: Conceptos Fundamentales de SQL II 4-21

Fundacin Proydesa
INSERT ALL Incondicional (continuacin)
Se han seleccionado un total de 12 filas:

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

SELECT COUNT(*) total_in_sal FROM sal_history;

SELECT COUNT(*) total_in_mgr FROM mgr_history;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT ALL Condicional: Ejemplo

Contratado
antes de 1995
EMP_HISTORY

Empleados

Con comisin
de ventas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
EMP_SALES
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
REjemplo
INSERT ALL Condicional:
P
le
N
b
a
O
I
Para todos los C
empleados
de
erlas tablas de empleados, si los empleados se han contratado antes de
f
s
A
1995, inserte
dichoa
registro
n de empleado en el historial de empleados. Si el empleado gana una
r
NDde ventas,
t
comisin
inserte
la informacin de registro en la tabla EMP_SALES. En la pgina
U
n
F
o
n
siguiente se muestra la sentencia SQL.

Oracle Database: Conceptos Fundamentales de SQL II 4-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT ALL Condicional


INSERT ALL
WHEN HIREDATE < '01-JAN-95' THEN
INTO emp_history VALUES(EMPID,HIREDATE,SAL)
WHEN COMM IS NOT NULL THEN
INTO emp_sales VALUES(EMPID,COMM,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,

a
s
a
)h
g
FROM employees
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
INSERT ALL Condicional
P
bl al que se muestra en la diapositiva anterior porque inserta filas
ON feresasimilar
El ejemplo de C
la Idiapositiva
en las tablas
ns EMP_SALES. La sentencia SELECT recupera detalles como ID de
DAEMP_HISTORY
a
r
N
t
- de contratacin, salario y porcentaje de comisin de todos los empleados de la tabla
empleado,
U fecha
n
F
o
n
EMPLOYEES. Los detalles como el ID de empleado, fecha de contratacin y salario se insertan en la
salary SAL, commission_pct COMM

tabla EMP_HISTORY. Los detalles como el ID de empleado, fecha de contratacin y salario se


insertan en la tabla EMP_HISTORY.
Esta sentencia INSERT se denomina INSERT condicional porque no se aplican ms restricciones a
las filas que las recuperadas por la sentencia SELECT. De las filas recuperadas por la sentencia
SELECT, slo aquellas filas en las que la fecha de contratacin sea anterior a 1995 se insertan en la
tabla EMP_HISTORY. Del mismo modo, slo aquellas filas en las que el valor del porcentaje de
comisin no sea nulo se insertan en la tabla EMP_SALES.
SELECT count(*) FROM emp_history;

SELECT count(*) FROM emp_sales;

Oracle Database: Conceptos Fundamentales de SQL II 4-24

Fundacin Proydesa
INSERT ALL Condicional (continuacin)
Tambin puede utilizar la clusula ELSE con la sentencia INSERT ALL.

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ejemplo:
INSERT ALL
WHEN job_id IN
(select job_id FROM jobs WHERE job_title LIKE '%Manager%')
THEN
INTO managers2(last_name,job_id,SALARY)
VALUES (last_name,job_id,SALARY)
WHEN SALARY>10000 THEN
INTO richpeople(last_name,job_id,SALARY)
VALUES (last_name,job_id,SALARY)
ELSE
INTO poorpeople VALUES (last_name,job_id,SALARY)
SELECT * FROM employees;

s
a
h
g)
Resultado:
r
o

116 rows inserted


sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT FIRST Condicional: Ejemplo


Supuesto: si el salario de
un empleado es 2.000, el
registro se inserta slo en
la tabla SAL_LOW.

Salario > 5.000


SAL_LOW

5000 <= Salario


<= 10.000

a
s
a
EMPLOYEES
)h
g
r
o e
a
s
de Guid
De lo contrario
y
o
pr ent
@
on Stud SAL_HIGH
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
ROEjemplo
l
INSERT FIRST Condicional:
P
le
N
b
a
O
Para todos los empleados
en
I
erla tabla EMPLOYEES, inserte la informacin de empleado en la primera
C
f
s
A
tabla de destino
queacumpla
n la condicin. En el ejemplo, si un empleado tiene un salario de 2.000, el
r
NseDinserta
t
registro
slo
en la tabla SAL_LOW. En la pgina siguiente se muestra la sentencia SQL.
U
F non
SAL_MID

Oracle Database: Conceptos Fundamentales de SQL II 4-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT FIRST Condicional


INSERT FIRST
WHEN salary < 5000 THEN
INTO sal_low VALUES (employee_id, last_name, salary)
WHEN salary between 5000 and 10000 THEN
INTO sal_mid VALUES (employee_id, last_name, salary)
ELSE

a
s
a
)h
SELECT employee_id, last_name, salary
g
r
o e
a
s
FROM employees
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
INSERT FIRST Condicional
P
Nrecupera
blosl detalles como ID de empleado, apellido y salario de cada
a
O
La sentencia SELECT
r
I
C EMPLOYEES.
fe
s
empleadoD
enAla tabla n
Para cada registro de empleado, se inserta en la primera tabla de
a
r
N
t
destino
cumpla
n- la condicin.
FU que
o
n
Esta sentencia INSERT se denomina INSERT FIRST condicional. La condicin WHEN salary
INTO sal_high VALUES (employee_id, last_name, salary)

< 5000 se evala en primer lugar. Si la primera clusula WHEN se evala como True, el servidor de
Oracle ejecuta la clusulaINTO correspondiente e inserta el registro en la tabla SAL_LOW. Omite las
clusulas WHEN posteriores para esta fila.
Si la fila no cumple la primera condicin WHEN (WHEN salary < 5000), se evala la siguiente
condicin (WHEN salary between 5000 and 10000). Si esta condicin se evala como
True, el registro se inserta en la tabla SAL_MID y se omite la ltima condicin.
Si no se evalan como True la primera condicin (WHEN salary < 5000) ni la segunda (WHEN
salary between 5000 and 10000), el servidor de Oracle ejecuta la clusula INTO
correspondiente para la clusula ELSE.

Oracle Database: Conceptos Fundamentales de SQL II 4-27

Fundacin Proydesa
INSERT FIRST Condicional (continuacin)
Se han insertado un total de 20 filas:

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

SELECT count(*) low FROM sal_low;

SELECT count(*) mid FROM sal_mid;

SELECT count(*) high FROM sal_high;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT mediante giro


Convertir el juego de registros de ventas de la tabla de base de
datos no relacional a un formato relacional.
Emp_ID

Week_ID

MON

TUES

WED

THUR

FRI

176

2000

3000

4000

5000

6000

Employee_ID

WEEK

SALES

176

2000

s
a
h
176
6
3000
g)
r
o

176
6
4000
sa ide
e
d
176
6
5000
roy nt Gu
p
176
6
6000@
de
n
u
o
t
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O
ce
INSERT mediante giro PR le li
rabdebe crear una transformacin de forma que cada registro de
IONenflaeque
Giro es una operacin
C
A de entrada,
cualquierD
flujo
ns como una tabla de base datos no relacional, se deba convertir en varios
a
r
N
t
registros
nun- entorno de tabla de base de datos ms relacional.
FU npara
o
Suponga que recibe un juego de registros de ventas de una tabla de base de datos no relacional:

SALES_SOURCE_DATA, en el siguiente formato:


EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE, SALES_WED,
SALES_THUR, SALES_FRI

Desea almacenar estos registros en la tabla SALES_INFO con un formato relacional ms tpico:
EMPLOYEE_ID, WEEK, SALES

Para resolver este problema, debe crear una transformacin de forma que cada registro de la tabla de
base de datos no relacional original, SALES_SOURCE_DATA, se convierta en cinco registros para la
tabla SALES_INFO del almacn. Esta operacin normalmente se denomina giro.
En la pgina siguiente se muestra la solucin a este problema.

Oracle Database: Conceptos Fundamentales de SQL II 4-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT mediante giro


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;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
INSERT mediante giro P
(continuacin)
N rablosl datos de ventas se reciben de la tabla de base de datos no
Odiapositiva,
En el ejemplo C
de Ila
A ansfe
relacionalDSALES_SOURCE_DATA,
que son los detalles de las ventas realizadas por un vendedor
r
N
t
cada
una
n-semana, durante una semana con un ID de semana determinado.
FUda de
o
n
DESC SALES_SOURCE_DATA

Oracle Database: Conceptos Fundamentales de SQL II 4-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INSERT mediante giro (continuacin)


SELECT * FROM SALES_SOURCE_DATA;

DESC SALES_INFO

s
a
h
SELECT * FROM sales_info;
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
O lice
R
P
Observe que en el ejemplo anterior
leal utilizar INSERT mediante giro, una fila de la tabla
N
b
a
O
SALES_SOURCE_DATA
se
convierte
en cinco registros de la tabla relacional, SALES_INFO.
r
I
e
C
f
DA trans
N
FU non-

Oracle Database: Conceptos Fundamentales de SQL II 4-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Manipulacin de datos mediante subconsultas


Especificacin de valores por defecto explcitos en
sentencias INSERT y UPDATE
Uso de los siguientes tipos de sentencias INSERTs de
varias tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

s
a
h
Fusin de Filas en una Tabla
rg)
o

Seguimiento de los cambios en los datos a lo largo


sade iun
e
e
d
d
perodo de tiempo
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia MERGE

Proporciona la capacidad de actualizar, insertar o suprimir


datos de forma condicional en una tabla de base de datos.
Realiza una sentencia UPDATE si la fila existe y una
sentencia INSERT si es una fila nueva:
Evita actualizaciones independientes
Aumenta el rendimiento y es fcil de usar
Es til en aplicaciones de almacenamiento de datos

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia MERGE
P
l
Nsoportaralabsentencia
O
El servidor de Oracle
MERGE para operaciones INSERT, UPDATE y DELETE.
I
e
C
f
s
A
MedianteD
sentencia,
n puede actualizar, insertar o suprimir una fila de forma condicional en una
raevitar
Nporestalontanto,
t
tabla
y,
varias sentencias DML. La decisin sobre si se actualiza, se inserta o se
U
F
o
n
suprime en la tabla destino se basa en una condicin de la clusula ON.
Debe tener los privilegios de objeto INSERT y UPDATE en la tabla de destino y el privilegio de
objeto SELECT en la tabla de origen. Para especificar la clusula DELETE de
merge_update_clause, adems debe tener el privilegio de objeto DELETE en la tabla de
destino.
La sentencia MERGE es determinista. No puede actualizar la misma fila de la tabla de destino varias
veces en la misma sentencia MERGE.
Un enfoque alternativo es utilizar bucles PL/SQL y varias sentencias DML. La sentencia MERGE, sin
embargo, es fcil de utilizar y se expresa de una forma ms simple como una nica sentencia SQL.
La sentencia MERGE es adecuada en diferentes aplicaciones de almacenamiento de datos.
Por ejemplo, en una aplicacin de almacenamiento de datos, puede que necesite trabajar con datos
que provengan de varios orgenes, algunos de ellos pueden estar duplicados. Con la sentencia
MERGE, puede agregar o modificar filas de forma condicional.

Oracle Database: Conceptos Fundamentales de SQL II 4-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sintaxis de Sentencias MERGE


Puede insertar, actualizar, suprimir filas de forma condicional
en una tabla mediante la sentencia MERGE.
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col1_val,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Fusin de Filas
le
N
b
a
O
Puede actualizar
existentes
e insertar filas nuevas de forma condicional mediante la sentencia
er MERGE,
CIfilas
f
s
A
MERGE. Mediante
la
sentencia
puede suprimir filas obsoletas al mismo tiempo que actualiza
D tran
N
las filas
U de ounan-tabla. Para ello, incluya una clusula DELETE con su propia clusula WHERE en la
F
nla sentencia MERGE.
sintaxis de
En la sintaxis:
Clusula INTO
Clusula USING
Clusula ON
WHEN MATCHED |

especifica la tabla de destino que est actualizando o en la que est


insertando
identifica el origen de los datos que se van a actualizar o insertar; puede
ser una tabla, vista o subconsulta
la condicin en la que la operacin MERGE actualiza oinserta
indica al servidor cmo responder a los resultados de la condicin
de unin

WHEN NOT MATCHED


Nota: para obtener ms informacin, consulte Oracle Database SQL Reference (Referencia de SQL
de Oracle Database) para base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL II 4-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fusin de Filas: Ejemplo


Insertar o actualizar filas en la tabla COPY_EMP3 para que
coincidan con la tabla EMPLOYEES.
MERGE INTO copy_emp3 c
USING (SELECT * FROM EMPLOYEES ) e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
...
DELETE WHERE (E.COMMISSION_PCT IS NOT NULL)
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Fusin de Filas: Ejemplo
le
N
b
a
O
MERGE
INTO
copy_emp3
c
r
I
e
C
f
USING (SELECT
* FROM EMPLOYEES ) e
ns
DA
a
r
N
ON -(c.employee_id
t
n MATCHED THEN = e.employee_id)
FU noWHEN
UPDATE SET
c.first_name
= e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c.salary = e.salary*2,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
DELETE WHERE (E.COMMISSION_PCT IS NOT NULL)
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
Oracle Database: Conceptos Fundamentales de SQL II 4-35

Fundacin Proydesa
Fusin de Filas: Ejemplo (continuacin)
La tabla COPY_EMP3 se crea mediante el siguiente cdigo:
CREATE TABLE COPY_EMP3 AS SELECT * FROM EMPLOYEES
WHERE SALARY<10000;

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

A continuacin, consulte la tabla COPY_EMP3.


SELECT employee_id, salary, commission_pct FROM COPY_EMP3;

...

a
s
a
)h
g
r
o e
a
s
de Guid
...
y
o
pr ent
@
d
Observe que hay algunos empleados con SALARY < 10000
con
ony haySdostuempleados
i
c
COMMISSION_PCT.
a
is
d
h
n
t
u
f
El ejemplo de la diapositiva coincide el EMPLOYEE_ID
(
senela tabla COPY_EMP3 con el
u
A
EMPLOYEE_ID de la tabla EMPLOYEES.
Si
se
encuentra
S
to una coincidencia, la fila de la tabla
E
e
D
COPY_EMP3 se actualiza para que
s en la tabla EMPLOYEES y el salario de empleado
Y la filaecoincida
n
O
se dobla. Se suprimen los registros
ic dos empleados con valores en la columna
PR bledellos
COMMISSION_PCT.N
Si no se encuentra
ninguna coincidencia, se insertan las filas en la tabla
a
O
r
I
COPY_EMP3.C
A ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fusin de Filas: Ejemplo


TRUNCATE TABLE copy_emp3;
SELECT * FROM copy_emp3;
0 rows selected
MERGE INTO copy_emp3 c
USING (SELECT * FROM EMPLOYEES ) e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
...
DELETE WHERE (E.COMMISSION_PCT IS NOT NULL)
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, ...

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
SELECT * FROM copy_emp3;
on Stud
i
c
107 rows selected.
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Fusin de Filas: Ejemplo (continuacin)
le
N
b
a
O
Los ejemplos de Ila diapositiva
la tabla COPY_EMP3 est vaca. Se evala la condicin
C n
fer muestran que La
s
A
c.employee_id
=
e.employee_id.
condicin devuelve false, no hay coincidencias.
D tra
N
- la clusula WHEN NOT MATCHED, y el comandoMERGE inserta las filas de la tabla
La lgica
en
U est
n
F
o
n
EMPLOYEES en la tabla COPY_EMP3. Esto significa que la tabla COPY_EMP3 ahora tiene
exactamente los mismos datos que la tabla EMPLOYEES.

SELECT employee_id, salary, commission_pct from copy_emp3;

Oracle Database: Conceptos Fundamentales de SQL II 4-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Manipulacin de datos mediante subconsultas


Especificacin de valores por defecto explcitos en
sentencias INSERT y UPDATE
Uso de los siguientes tipos de sentencias INSERTs de
varias tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

s
a
h
Fusin de Filas en una Tabla
rg)
o

Seguimiento de los cambios en los datos a lo largo


sade iun
e
e
d
d
perodo de tiempo
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Seguimiento de Cambios en Datos


Consulta de
versiones
SELECT

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
n
ud
o
t
i
S
c
Versiones de filas recuperadas
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
RenODatos
l
Seguimiento de Cambios
P
le
N rabmodo,
Puede que detecteIO
que, de algn
los datos en una tabla se han cambiado de forma incorrecta.
e
C
f
Para averiguarlo,
puede
varias consultas de flashback para ver los datos de fila en puntos
nsutilizar
DA
a
r
N
especficos
en el-ttiempo.
Para una mayor eficacia, puede utilizar la funcin de consulta de flashback
U opara
n ver todos los cambios realizados en una fila en un perodo de tiempo. Esta funcin
deFversiones
n
permite agregar una clusula VERSIONS a una sentencia SELECT, que especifica un nmero de
cambio del sistema (SCN) o el rango de registro de hora en el que desea ver los cambios en los
valores de fila. La consulta tambin puede devolver metadatos asociados, como la transaccin
responsable del cambio.
Adems, despus de identificar la transaccin errnea, puede utilizar la funcin de consulta de
flashback de transacciones para identificar otros cambios realizados por la transaccin.
A continuacin, tendr la opcin de utilizar la funcin de flashback de tabla para restaurar la tabla a
un estado anterior a los cambios realizados.
Puede utilizar una consulta en una tabla con la clusula VERSIONS para producir todas las versiones
de todas las filas que existen o que han existido entre la hora de ejecucin de la consulta y los
segundos de undo_retention antes de la hora actual. undo_retention es un parmetro de
inicializacin, parmetro de ajuste automtico. Se hace referencia a una consulta que incluye una
clusula VERSIONS como una consulta de versiones. Los resultados de una consulta de versiones se
comportan como si se hubiera aplicado la clusula WHERE a las versiones de las filas. La consulta de
versiones devuelve versiones de las filas slo entre transacciones.
Nmero de cambio del sistema (SCN): el servidor de Oracle asigna un SCN para identificar los
registro de redo de cada transaccin confirmada.
Oracle Database: Conceptos Fundamentales de SQL II 4-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ejemplo de Consulta de Flashback de Versiones


SELECT salary FROM employees3
WHERE employee_id = 107;
UPDATE employees3 SET salary = salary * 1.30
WHERE employee_id = 107;

COMMIT;
SELECT salary FROM employees3
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE employee_id = 107;

a
s
a
)h
g
r
o e
a
s
de Guid
3
y
1
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ejemplo de Consulta de Flashback
le de Versiones
N
b
a
O
En el ejemplo C
de Ila diapositiva,
er se recupera el salario para el empleado 107 (1). El salario del
f
s
A
empleadoD
107 aumenta
n el 30 por ciento y se confirma este cambio (2). Se muestran las diferentes
a(3).
r
N del
t
versiones
salario
U
F non
La clusula
VERSIONS no cambia el plan de la consulta. Por ejemplo, si ejecuta una consulta en una
tabla que utiliza el mtodo de acceso a ndices, la misma consulta en la misma tabla con la clusula
VERSIONS contina utilizando el mtodo de acceso a ndices. Las versiones de las filas devueltas
por la consulta de versiones son versiones de filas entre transacciones. La clusula VERSIONS no
tiene ningn efecto en el comportamiento transaccional de una consulta. Esto significa que una
consulta en una tabla con una clusula VERSIONS hereda el entorno de consulta de la transaccin en
curso.
Se puede especificar la clusula VERSIONS por defecto como VERSIONS BETWEEN
{SCN|TIMESTAMP} MINVALUE AND MAXVALUE.
La clusula VERSIONS es una extensin SQL slo para consultar. Puede tener operaciones DML y
DDL que utilizan una clusula VERSIONS con subconsultas. La consulta de versiones de fila
recupera todas las versiones confirmadas de las filas seleccionadas. No se devuelven los cambios
realizados por la transaccin activa actual. La consulta de versiones recupera todas las encarnaciones
de la filas. Esto fundamentalmente significa que las versiones devueltas incluyen las versiones
suprimidas y posteriormente insertadas de dichas filas.
Oracle Database: Conceptos Fundamentales de SQL II 4-40

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Ejemplo de Consulta de Flashback de Versiones (continuacin)
El acceso a filas de una consulta de versiones se puede definir en una de las dos categoras
siguientes:
Acceso a filas segn ROWID: en el caso de un acceso basado en ROWID, se devuelven todas las
versiones del ROWID especificado sin tener en cuenta el contenido de fila. Esto
fundamentalmente significa que se devuelven todas las versiones del espacio del bloque que
indica ROWID.
Resto de acceso a filas: para el resto de acceso a filas, se devuelven todas las versiones de las
filas.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-41

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula VERSIONS BETWEEN


SELECT versions_starttime "START_DATE",
versions_endtime
"END_DATE",
salary
FROM
employees
VERSIONS BETWEEN SCN MINVALUE
AND MAXVALUE
WHERE last_name = 'Lorentz';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Clusula VERSIONS BETWEEN
P
N VERSIONS
bl BETWEEN para recuperar todas las versiones de la filas que
a
O
Puede utilizar la clusula
r
I
C nentre
fela hora de ejecucin de la consulta y un punto anterior en el tiempo.
s
Aexistido
existen oD
han
N n-retencin
tra de deshacer es menor que el tiempo de lmite inferior o el SCN de la
SiFelUtiempoode
n
clusula BETWEEN,
la consulta recupera las versiones slo hasta el tiempo de retencin de deshacer.
El intervalo de tiempo de la clusula BETWEEN se puede especificar como un intervalo de SCN o un
intervalo de tiempo real. Este intervalo de hora se cierra tanto en el lmite inferior como en el
superior.
En el ejemplo, se recuperan los cambios del salario de Lorentz. El valor NULL de END_DATE para la
primera versin indica que se trata de la versin existente en el momento de la consulta. El valor
NULL para START_DATE de la ltima versin indica que la versin se ha creado en un momento
anterior a la hora de retencin de deshacer.

Oracle Database: Conceptos Fundamentales de SQL II 4-42

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Al utilizar el comando INSERT o UPDATE, la palabra clave
DEFAULT le evita tener que codificar el valor por defecto en los
programar o consultar el diccionario para para buscarlo.
1. Verdadero
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 4-43

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Utilizar sentencias DML y transacciones de control
Describir las funciones de sentencias INSERTs
Utilizar los siguientes tipos sentencias INSERTs de varias
tablas:

INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional

a
s
a
)h
g
r
Fusionar filas en una tabla
o e
a
s
de Guid
Manipular datos mediante subconsultas
y
o
r
t a lo
plos
n
Realizar un seguimiento de los cambios
en
datos
e
@
n
ud
largo de un perodo de tiempo acio s St
i
d
h
n
t
u
f
(
se
u
A
Copyright 2010,
Todos
tolos derechos reservados.
ESOracle.
e
D
s
OY licen
R
P ble
Resumen
N
ra
IO haber
En esta leccin,
debe
aprendido
cmo manipular los datos en Oracle Database mediante
e
C
f
s
A
subconsultas.
Tambin
debe
haber
aprendido
sobre sentencias INSERT de varias tablas, la sentencia
D tran
N
MERGE
n- un seguimiento en los cambios en la base de datos.
FU ynaorealizar

Oracle Database: Conceptos Fundamentales de SQL II 4-44

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 4: Visin General


En esta prctica se abordan los siguientes temas:
Realizacin de INSERTs de varias tablas
Realizacin de operaciones MERGE

Seguimiento de versiones de fila

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 4-45

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Gestin de Datos Situados en


Distintas Zonas Horarias

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo siguiente:
Utilizar tipos de dato similares a DATE que almacenan segundos
fraccionarios y realizan un seguimiento de zonas horarias
Utilizar tipos de dato que almacenan la diferencia entre dos
valores de fecha/hora
Utilizar las siguientes funciones de fecha/hora:

CURRENT_DATE
CURRENT_TIMESTAMP
LOCALTIMESTAMP
DBTIMEZONE
SESSIONTIMEZONE
EXTRACT

TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_YMINTERVAL
TO_DSINTERVAL

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
En esta leccin, aprender
I
ea rutilizar tipos de dato similares a DATE que almacenan segundos
C
f
s
A
fraccionarios
n un seguimiento de zonas horarias. Esta leccin trata algunas de las funciones
D y realizan
-tra en Oracle Database.
deFfecha/hora
UN ondisponibles
n

Oracle Database: Conceptos Fundamentales de SQL II 5-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

CURRENT_DATE, CURRENT_TIMESTAMP
y LOCALTIMESTAMP
Tipo de dato INTERVAL

Uso de las siguientes funciones:

EXTRACT
TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_YMINTERVAL
TO_DSINTERVAL

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Zonas Horarias

+07:00

-08:00

+02:00

+10:00

a
s
a
)h
g
r
o e
a
s
La imagen representa la hora
dedeGuid
y
o
t de
cada zona horaria cuando
pr laehora
n
@
n
Greenwich es lasio12:00.
tud
S
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Zonas Horarias
le
N
b
a
O
r el giro de la tierra. La hora del da en un determinado momento
Ise midenfepor
Las horas del da
C
s
A
depende de
es medioda en Greenwich, Inglaterra, ser medianoche en la Lnea
ran LaCuando
ND sundeubicacin.
t
Internacional
Fecha.
tierra
se
divide en 24 zonas horarias, una para cada hora del da. La hora a
U
F
o
n
lo largo de la lnea de meridiano en Greenwich, Inglaterra, se denomina Hora Media de Greenwich
-05:00

(GMT). GMT se conoce ahora como Hora Universal Coordinada (UTC). UTC es la hora estndar
que toman como referencia el resto de las zonas horarias del mundo. Es la misma durante todo el ao
y no le afecta el horario de verano. La lnea de meridiano es una lnea imaginaria que a del polo norte
al polo sur. Se denomina longitud cero y es la lnea respecto a la que se miden las dems lneas de
longitud. Todas las horas se miden respecto a UTC y todos los lugares tienen una latitud (su distancia
hacia el norte o hacia el sur del ecuador) y una longitud (su distancia hacia el este o hacia el oeste del
meridiano de Greenwich).

Oracle Database: Conceptos Fundamentales de SQL II 5-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Parmetro de Sesin TIME_ZONE


TIME_ZONE se puede definir en:

Un desplazamiento absoluto
Zona horaria de la base de datos
Zona horaria local del sistema operativo
Una determinada regin

ALTER
ALTER
ALTER
ALTER

SESSION
SESSION
SESSION
SESSION

SET
SET
SET
SET

TIME_ZONE
TIME_ZONE
TIME_ZONE
TIME_ZONE

=
=
=
=

'-05:00';
dbtimezone;
local;
'America/New_York';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Parmetro de Sesin TIME_ZONE
P
N el almacenamiento
bl
a
O
r
I
Oracle Database
soporta
de la zona horaria en los datos de fecha y hora, as como
e El comando ALTER
Cfraccionarios.
f
s
A
de los segundos
SESSION se puede utilizar para cambiar los
D tran
N
valores
U de zona
n-horaria en una sesin del usuario. Los valores de zona horaria se pueden definir en
F
o
n
un desplazamiento absoluto, una determinada zona horaria, una zona horaria de base de datos o una
zona horaria local.

Oracle Database: Conceptos Fundamentales de SQL II 5-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

CURRENT_DATE, CURRENT_TIMESTAMP
y LOCALTIMESTAMP

CURRENT_DATE:
Devuelve la fecha actual de la sesin de usuario.
Tiene un tipo de dato DATE.

CURRENT_TIMESTAMP:
Devuelve la fecha y hora actual de la sesin de usuario.
Tiene el tipo de dato TIMESTAMP WITH TIME ZONE.

LOCALTIMESTAMP:
Devuelve la fecha y hora actual de la sesin de usuario.
Tiene un tipo de dato TIMESTAMP.
g)

has
or

a
es uide
d
y
ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice y LOCALTIMESTAMP
CURRENT_DATE, CURRENT_TIMESTAMP
P
N rabyl CURRENT_TIMESTAMP devuelven la fecha actual y el registro
O
Las funciones CURRENT_DATE
I
fe El tipo de dato de CURRENT_DATE es DATE. El tipo de dato de
s
ACrespectivamente.
de hora actual,
n
D
N n-tra es TIMESTAMP WITH TIME ZONE. Los valores devueltos muestran el
CURRENT_TIMESTAMP
U
F no de zona horaria de la sesin SQL que ejecuta las funciones. El desplazamiento de
desplazamiento

zona horaria es la diferencia (en horas y minutos) entre la hora local y UTC. El tipo de dato
TIMESTAMP WITH TIME ZONE tiene el formato:
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

donde fractional_seconds_precision especifica opcionalmente el nmero de dgitos de la


parte fraccionaria del campo de fecha/hora SECOND y puede ser un nmero del intervalo 0 a 9.
El valor por defecto es 6.
La funcin LOCALTIMESTAMP devuelve la fecha y hora actuales en la zona horaria de la sesin.
La diferencia entre LOCALTIMESTAMP y CURRENT_TIMESTAMP es que LOCALTIMESTAMP
devuelve un valor TIMESTAMP, mientras que CURRENT_TIMESTAMP devuelve un valor
TIMESTAMP WITH TIME ZONE.
Estas funciones son sensibles al soporte de idioma nacional (NLS), es decir, los resultados tendrn
los formatos de calendario y fecha/hora de NLS.
Nota: la funcin SYSDATE devuelve la fecha y hora actuales como un tipo de dato DATE. Ha
aprendido cmo utilizar la funcin SYSDATE en el curso titulado Oracle Database: Conceptos
Fundamentales de SQL I.
Oracle Database: Conceptos Fundamentales de SQL II 5-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Comparacin de Fecha y Hora en la


Zona Horaria de una Sesin
El parmetro TIME_ZONE se define en 5:00 y, a
continuacin, se ejecutan las sentencias SELECT para cada
fecha y hora para comparar las diferencias.
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

a
s
a
)h
g
r
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
o 2 e
a
s
de Guid
y
o
t 3
pr DUAL;
n
SELECT SESSIONTIMEZONE, LOCALTIMESTAMP@
FROM
e
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Comparacin de Fecha y Horale
en la Zona Horaria de una Sesin
N
b
a
O
El comando ALTER
SESSION
formato de fecha de la sesin en
er defineeseldecir,
CI HH24:MI:SS',
f
s
A
'DD-MON-YYYY
das del mes (131)-nombre abreviado del mes-hora
D tran
N
- 4 dgitos (023):minutos (059):segundos (059).
del
da del ao
nde
FU
o
n
El ejemplo de la diapositiva ilustra que la sesin se modifica para definir el parmetro TIME_ZONE
en 5:00. A continuacin, se ejecuta la sentencia SELECT para CURRENT_DATE,
CURRENT_TIMESTAMP y LOCALTIMESTAMP para observar las diferencias.
Nota: el parmetro TIME_ZONE especifica el desplazamiento de zona horaria local por defecto para
la sesin SQL actual. TIME_ZONE es slo un parmetro de sesin, no un parmetro de
inicializacin. El parmetro TIME_ZONE se define de la siguiente forma:
TIME_ZONE = '[+ | -] hh:mm'
La mscara de formato ([+ | -] hh:mm) indica las horas y minutos antes o despus de UTC.

Oracle Database: Conceptos Fundamentales de SQL II 5-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Comparacin de Fecha y Hora en la


Zona Horaria de una Sesin
Resultados de las consultas:

1
2
3

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Comparacin de Fecha y Horale
en la Zona Horaria de una Sesin (continuacin)
N
b
a
O
En este caso, la funcin
la fecha actual en la zona horaria de la sesin, la
CI nsCURRENT_DATE
fer devuelvedevuelve
A
funcin CURRENT_TIMESTAMP
la
fecha
y
hora actuales en la zona horaria de la sesin
D tra
N
- tipo de dato TIMESTAMP WITH TIME ZONE y la funcin LOCALTIMESTAMP
como
Uun valor
ndel
F
o
n
devuelve la fecha y hora actuales en la zona horaria de la sesin.

Oracle Database: Conceptos Fundamentales de SQL II 5-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

DBTIMEZONE y SESSIONTIMEZONE

Mostrar el valor de la zona horaria de la base de datos:


SELECT DBTIMEZONE FROM DUAL;

Mostrar el valor de la zona horaria de la sesin:


SELECT SESSIONTIMEZONE FROM DUAL;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
DBTIMEZONE y SESSIONTIMEZONE
P
N rapor
bl defecto de la base de datos mediante la especificacin de la
El DBA defineC
laIO
zona horaria
fede la sentencia CREATE DATABASE. Si se omite, la zona horaria por
s
ATIME_ZONE
clusula SET
n
D
rdea datos es la zona horaria del sistema operativo. La zona horaria de la base de
Nde la nbase
t
defecto
U
F nopuede cambiar para una sesin con la sentencia ALTER SESSION.
datos no se

La funcin DBTIMEZONE devuelve el valor de la zona horaria de la base de datos. El tipo de retorno
es un desplazamiento de zona horaria (un tipo de carcter con el formato: '[+|-]TZH:TZM') o un
nombre de regin de zona horaria, en funcin de cmo haya especificado el usuario el valor de zona
horaria de la base de datos en la sentencia CREATE DATABASE o ALTER DATABASE ms reciente.
El ejemplo de la diapositiva muestra que la zona horaria de la base de datos se ha definido en
05:00, ya que el parmetro TIME_ZONE tiene el formato:
TIME_ZONE = '[+ | -] hh:mm'

La funcin SESSIONTIMEZONE devuelve el valor de la zona horaria de la sesin actual. El tipo de


retorno es un desplazamiento de zona horaria (un tipo de carcter en formato '[+|-]TZH:TZM') o
un nombre de regin de zona horaria, en funcin de cmo haya especificado el usuario el valor de
zona horaria de la sesin en la sentencia ALTER SESSION ms reciente. El ejemplo de la
diapositiva muestra que la zona horaria de la sesin es el desplazamiento respecto a UTC de
8 horas. Observe que la zona horaria de la base de datos es diferente de la zona horaria de la sesin
actual.
Oracle Database: Conceptos Fundamentales de SQL II 5-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato TIMESTAMP

Tipo de Dato

Campos

TIMESTAMP

Year, Month, Day, Hour, Minute, Second


with fractional seconds

TIMESTAMP WITH TIME ZONE

Igual que el tipo de dato TIMESTAMP;


tambin incluye:
TIMEZONE_HOUR y TIMEZONE_MINUTE
o TIMEZONE_REGION

s
a
h
rg)
o

sa ide
e
Igual que el tipo de dato TIMESTAMP;
d
TIMESTAMP WITH LOCAL
tambin incluye un desplazamiento
roy nt Gdeu
p
TIME ZONE
zona horaria en su
n@valor.tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Tipos de Dato TIMESTAMP
P
l
N raesbuna
O
El tipo de dato TIMESTAMP
extensin del tipo de dato DATE.
I
e
C nsf(fractional_seconds_
A
TIMESTAMP
precision)
D tra
N
Este
n- contiene los valores de ao, mes y da, as como los valores de hora, minutos y
FUtipo ndeodato
segundos, donde la precisin de segundos fraccionarios significativa es el nmero de dgitos en la

parte fraccionaria del campo de fecha/hora SECOND. Los valores aceptados de


fractional_seconds_precision significativa son de 0 a 9. el valor por defecto es 6.
TIMESTAMP (fractional_seconds_precision) WITH TIME ZONE

Este tipo de dato contiene todos los valores de TIMESTAMP as como el valor de desplazamiento de
zona horaria.
TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE

Este tipo de dato contiene todos los valores de TIMESTAMP, con las siguientes excepciones:
Los datos se normalizan en la zona horaria de la base de datos al almacenarlo en la base de
datos.
Al recuperar los datos, los usuarios los ven en la zona horaria de la sesin.

Oracle Database: Conceptos Fundamentales de SQL II 5-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Campos TIMESTAMP

Campo Datetime

Valores Vlidos

YEAR

de 4712 a 9999 (excepto el ao 0)

MONTH

de 01 a 12

DAY

de 01 a 31

HOUR

de 00 a 23

MINUTE

de 00 a 59

s
a
h
TIMEZONE_HOUR
de 12 a 14
rg)
o

TIMEZONE_MINUTE
de 00 a 59
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O
ce
Campos TIMESTAMP PR le li
N rabest compuesto de varios de estos campos. Los tipos de dato de
IO
Cada tipo de dato
de fecha/hora
C
fecomparar y asignar mutuamente si tienen los mismos campos de
s
A se pueden
fecha/hora
slo
n
D
N n-tra
fecha/hora.
U
F no
SECOND

de 00 a 59.9(N), donde 9(N) es la precisin

Oracle Database: Conceptos Fundamentales de SQL II 5-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Diferencia entre DATE y TIMESTAMP


A

-- when hire_date is
of type DATE

ALTER TABLE employees


MODIFY hire_date TIMESTAMP;

SELECT hire_date
FROM employees;

SELECT hire_date
FROM employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o

pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
REjemplo
Tipo de Dato TIMESTAMP:
P
le
N
b
a
O
En la diapositiva,I el ejemplo
A muestra los datos de la columna hire_date de la tabla
C nelstipo
ferde
A
EMPLOYEES
cuando
dato de la columna es DATE. En el ejemplo B, la tabla se ha
D tra
N
modificado
U oynel-tipo de dato de la columna hire_date se ha convertido en TIMESTAMP. La salida
F
n diferencias de visualizacin. Puede convertir de DATE a TIMESTAMP cuando la
muestra las
columna tiene datos, pero no puede convertir de DATE o TIMESTAMP a TIMESTAMP WITH TIME
ZONE a menos que la columna est vaca.
Puede especificar la precisin de segundos fraccionarios para el registro de hora. Si no se especifica
ninguna, como se muestra en ejemplo, se define por defecto en 6.
Por ejemplo, la siguiente sentencia define la precisin de segundos fraccionarios en 7:
ALTER TABLE employees
MODIFY hire_date TIMESTAMP(7);

Nota: el tipo de dato de fecha de Oracle aparece por defecto como se muestra en este ejemplo.
Sin embargo, el tipo de dato de fecha contiene tambin informacin adicional como las horas,
minutos, segundos, AM y PM. Para obtener la fecha en este formato, puede aplicar una mscara de
formato o una funcin al valor de fecha.

Oracle Database: Conceptos Fundamentales de SQL II 5-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Comparacin de Tipos de Dato TIMESTAMP

CREATE TABLE web_orders


(order_date TIMESTAMP WITH TIME ZONE,
delivery_time TIMESTAMP WITH LOCAL TIME ZONE);
INSERT INTO web_orders values
(current_date, current_timestamp + 2);
SELECT * FROM web_orders;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
RDato
Comparacin de TiposP
de
eTIMESTAMP
l
N
b
Odiapositiva,
En el ejemplo de Ila
ra se crea una nueva tabla web_orders con una columna del tipo de
e
C
f
dato TIMESTAMP
ns TIME ZONE y una columna del tipo de dato TIMESTAMP WITH LOCAL
DA traWITH
N
- tabla se rellena cuando se establece web_order. El registro de hora y la zona
TIME
Esta
U ZONE.
n
F
o
n
horaria del usuario cuando se establece el orden se inserta segn el valor CURRENT_DATE.
El registro de hora y la zona horaria local se rellenan insertando dos das del valor
CURRENT_TIMESTAMP en el registro cada vez que se establece un orden. Cuando una compaa
basada en Web garantiza el envo, puede estimar su hora de entrega segn la zona horaria de la
persona que establece el orden.

Oracle Database: Conceptos Fundamentales de SQL II 5-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

CURRENT_DATE, CURRENT_TIMESTAMP
y LOCALTIMESTAMP
Tipos de dato INTERVAL

Uso de las siguientes funciones:

EXTRACT
TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_YMINTERVAL
TO_DSINTERVAL

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato INTERVAL

Los tipos de dato INTERVAL se utilizan para almacenar la


diferencia entre dos valores de fecha/hora.
Hay dos clases de intervalos:
Ao-mes
Da-hora

La precisin del intervalo:


Es el subjuego real de campos que constituye un intervalo.
Se especifica en el cualificador de intervalo.

a
s
a
)h
g
Tipo de Dato
Campos
r
o e
a
s
INTERVAL YEAR TO MONTH Year, Month
de Guid
y
o
pr withent
INTERVAL DAY TO SECOND Days, Hour, Minute, Second
fractional secondsn@
o
tud
i
S
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Tipos de Dato INTERVAL
P
l
N rasebutilizan
O
Los tipos de datoIINTERVAL
para almacenar la diferencia entre dos valores de
e
C
f
s
A
fecha/hora.
dosaclases
n de intervalos: intervalos ao-mes y da-hora. El tipo de intervalo ao-mes
r
NdeDunHay
t
consta
subjuego
contiguo de campos de YEAR y MONTH, mientras que el intervalo de da-hora
U
n
F
o
n
consta de un subjuego contiguo de campos que consta de DAY, HOUR, MINUTE y SECOND.
El subjuego de campos real que constituye un intervalo se denomina precisin del intervalo y se
especifica en el cualificador de intervalo. Puesto que el nmero de das de un ao depende del
calendario, el intervalo ao-mes depende de NLS, mientras que el intervalo da-hora es
independiente de NLS.
El cualificador de intervalo puede especificar tambin la precisin del campo inicial, que es el
nmero de dgitos del campo inicial o nico, y en caso de que el campo final sea SECOND, puede
especificar tambin la precisin de segundos fraccionarios, que es el nmero de dgitos en la parte
fraccional del valor SECOND. Si no se especifica, el valor por defecto para la precisin de campo
inicial es de 2 dgitos y el valor por defecto para la precisin de segundos fraccionarios es de 6
dgitos.

Oracle Database: Conceptos Fundamentales de SQL II 5-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato INTERVAL (continuacin)


INTERVAL YEAR (year_precision) TO MONTH
Este tipo de dato almacena un perodo de tiempo en aos y meses, donde year_precision es el
nmero de dgitos del campo de fecha/hora YEAR. Los valores aceptados son de 0 a 9. El valor por
defecto es 6.
INTERVAL DAY (day_precision) TO SECOND
(fractional_seconds_precision)
Este tipo de dato almacena un perodo de tiempo en das, horas, minutos y segundos, donde
day_precision es el nmero mximo de dgitos del campo de fecha/hora DAY (los valores
aceptados son de 0 a 9; el valor por defecto es 2) y fractional_seconds_precision es el
nmero de dgitos de la parte fraccionaria del campo SECOND. Los valores aceptados son de 0 a 9.
El valor por defecto es 6.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Campos INTERVAL

Campo INTERVAL

Valores Vlidos para el Intervalo

YEAR

Cualquier valor positivo o negativo

MONTH

de 00 a 11

DAY

Cualquier valor positivo o negativo

a
s
a
de 00 a 59
MINUTE
)h
g
r
o e
de 00 a 59.9(N), donde 9(N) es la precisin esa
SECOND
d Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Campos INTERVAL
P
N rapuede
bl tener los campos YEAR y MONTH.
O
INTERVAL YEAR
TO MONTH
I
C nsfe
ADAY
INTERVAL
D
N n-trTOa SECOND puede tener los campos DAY, HOUR, MINUTE y SECOND.
U
ElFsubjuegooreal de campos que constituye un elemento de cualquier tipo lo define un cualificador de
n
intervalo y este subjuego se denomina precisin del elemento.
HOUR

de 00 a 23

Los intervalos ao-mes slo se pueden comparar y asignar mutuamente con otros intervalos ao-mes
y los intervalos da-hora slo se pueden comparar y asignar mutuamente con otros intervalos dahora.

Oracle Database: Conceptos Fundamentales de SQL II 5-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

INTERVAL YEAR TO MONTH: Ejemplo

CREATE TABLE warranty


(prod_id number, warranty_time INTERVAL YEAR(3) TO
MONTH);
INSERT INTO warranty VALUES (123, INTERVAL '8' MONTH);
INSERT INTO warranty VALUES (155, INTERVAL '200'
YEAR(3));
INSERT INTO warranty VALUES (678, '200-11');
SELECT * FROM warranty;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ice
RO TOe MONTH
l
Tipo de Dato INTERVAL
YEAR
P
N raalmacena
bl
O
INTERVAL YEAR
TO MONTH
perodo de tiempo mediante los campos de fecha/hora
I
e INTERVALunYEAR
C Especifique
f
s
A
YEAR y MONTH.
TO MONTH como se muestra a continuacin:
D tran
N
- [(year_precision)] TO MONTH
INTERVAL
FU nonYEAR
donde year_precision es el nmero de dgitos del campo de fecha/hora YEAR. El valor por

defecto de year_precision es 2.
Restriccin: el campo inicial debe ser ms significativo que el final. Por ejemplo, INTERVAL '01' MONTH TO YEAR no es vlido.
Ejemplos
INTERVAL '123-2' YEAR(3) TO MONTH

Indica un intervalo de 123 aos y 2 meses.


INTERVAL '123' YEAR(3)

Indica un intervalo de 123 aos y 0 meses.


INTERVAL '300' MONTH(3)

Indica un intervalo de 300 meses.


INTERVAL '123' YEAR

Devuelve un error porque la precisin por defecto es 2 y 123 tiene tres dgitos.

Oracle Database: Conceptos Fundamentales de SQL II 5-18

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Tipo de Dato INTERVAL YEAR TO MONTH (continuacin)
Oracle Database soporta dos tipos de dato de intervalo: INTERVAL YEAR TO MONTH y INTERVAL
DAY TO SECOND; el tipo de columna, el argumento PL/SQL, la variable y el tipo de retorno debe ser
uno de los dos. Sin embargo, para los literales de intervalo, el sistema reconoce otros tipos de
intervalo ANSI (American National Standards Institute) como INTERVAL '2' YEAR o INTERVAL
'10' HOUR. En estos casos, cada intervalo se convierte en uno de los dos tipos soportados.
En el ejemplo de la diapositiva, se crea una tabla WARRANTY, que contiene una columna
warranty_time que utiliza el tipo de dato INTERVAL YEAR(3) TO MONTH. En ella se insertan
diferentes valores para indicar los aos y meses para diferentes productos. Cuando estas filas se
recuperen de la tabla, ver el valor de ao separado del valor de mes con un carcter (-).

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipo de Dato INTERVAL DAY TO SECOND:


Ejemplo

CREATE TABLE lab


( exp_id number, test_time INTERVAL DAY(2) TO SECOND);
INSERT INTO lab VALUES (100012, '90 00:00:00');
INSERT INTO lab VALUES (56098,
INTERVAL '6 03:30:16' DAY

TO SECOND);

a
s
a
SELECT * FROM lab;
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ice Ejemplo
ROTOeSECOND:
l
Tipo de Dato INTERVAL
DAY
P
N rabsel crea una tabla lab con una columna test_time del tipo de dato
O
En el ejemplo de Ila
diapositiva,
C TO nSECOND.
fe A continuacin, se inserta en la tabla el valor 90 00:00:00
s
ADAY
INTERVAL
D
ray 0 horas, 0 minutos y 0 segundos e INTERVAL '6 03:30:16' DAY TO
N 90n-das
t
paraU
indicar
F para
o indicar 6 das, 3 horas, 30 minutos y 16 segundos. La sentencia SELECT indica cmo
SECOND n
se muestran estos datos en la base de datos.

Oracle Database: Conceptos Fundamentales de SQL II 5-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

CURRENT_DATE, CURRENT_TIMESTAMP
y LOCALTIMESTAMP
Tipos de dato INTERVAL

Uso de las siguientes funciones:

EXTRACT
TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_YMINTERVAL
TO_DSINTERVAL

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

EXTRACT

Mostrar el componente YEAR de SYSDATE.


SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;

Mostrar el componente MONTH de HIRE_DATE para


aquellos empleados cuyo MANAGER_ID sea 100.
SELECT last_name, hire_date,
EXTRACT (MONTH FROM HIRE_DATE)
FROM employees
WHERE manager_id = 100;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
EXTRACT
P
l
N extrae
bdevuelve
a
O
La expresin EXTRACT
y
el valor de un campo de fecha/hora especificado o una
r
I
e
C
f
s
A
expresinD
de valores
Puede extraer cualquiera de los componentes mencionados en la
ande intervalo.
r
N sintaxis
t
siguiente
mediante
la
funcin
EXTRACT. La sintaxis de la funcin EXTRACT es:
U
FSELECT
nonEXTRACT ([YEAR] [MONTH][DAY] [HOUR] [MINUTE][SECOND]

[TIMEZONE_HOUR] [TIMEZONE_MINUTE]
[TIMEZONE_REGION] [TIMEZONE_ABBR]
FROM [datetime_value_expression] [interval_value_expression]);

Al extraer TIMEZONE_REGION o TIMEZONE_ABBR (abreviatura), el valor devuelto es una cadena


que contiene el nombre de la zona horaria adecuada correspondiente o su abreviatura. Al extraer
cualquiera de los dems valores, el valor devuelto es una fecha del calendario gregoriano. Cuando se
extrae de un campo de fecha/hora con un valor de zona horaria, el valor devuelto est en UTC.
En el primer ejemplo de la diapositiva, se utiliza la funcin EXTRACT para extraer YEAR de
SYSDATE. En el segundo ejemplo de la diapositiva, se utiliza la funcin EXTRACT para extraer
MONTH de la columna HIRE_DATE de la tabla EMPLOYEES para aquellos empleados que dependen
del gestor cuyo EMPLOYEE_ID es 100.

Oracle Database: Conceptos Fundamentales de SQL II 5-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

TZ_OFFSET
Mostrar el desplazamiento de zona horaria para las zonas
horarias 'US/Eastern', 'Canada/Yukon' y 'Europe/London':
SELECT TZ_OFFSET('US/Eastern'),
TZ_OFFSET('Canada/Yukon'),
TZ_OFFSET('Europe/London')
FROM
DUAL;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
TZ_OFFSET
P
N devuelve
bl el desplazamiento de zona horaria correspondiente al valor
a
O
La funcin TZ_OFFSET
r
I
fe depende de la fecha en la que se ejecute la sentencia. Por ejemplo, se
AElCvalorandesretorno
introducido.
D
-tr devuelve un valor 08:00, este valor indica que la zona horaria en la que se
la funcin
UN TZ_OFFSET
n
F
o
n el comando es de ocho horas por debajo de la hora UTC. Puede introducir un nombre de
ha ejecutado
zona horaria vlido, un desplazamiento de zona horaria a partir de UTC (que simplemente se
devuelve a s mismo) o la palabra clave SESSIONTIMEZONE o DBTIMEZONE. La sintaxis de la
funcin TZ_OFFSET es:
TZ_OFFSET ( ['time_zone_name'] '[+ | -] hh:mm' ]
[ SESSIONTIMEZONE] [DBTIMEZONE]

La compaa Fold Motor tiene su sede en Michigan, EE.UU., que es la zona horaria de
EE.UU./Oriental. El presidente de la compaa, el seor Fold, desea realizar una llamada a
conferencia con los vicepresidentes de operaciones en Canad y Europa, que se encuentran las zonas
horarias de Canad/Yukn y Europa/Londres, respectivamente. El seor Fold desea averiguar la hora
en cada uno de estos lugares para asegurarse de que su equipo de gestin senior est disponible para
asistir a la reunin. Su secretario, el seor Scott, le ayuda mediante la emisin de las consultas que se
muestran en el ejemplo y obtiene los siguientes resultados:
La zona horaria 'US/Eastern' es de cuatro horas por debajo de la hora UTC.
La zona horaria 'Canada/Yukon' es de siete horas por debajo de la hora UTC.
La zona horaria 'Europe/London' es de una hora por encima de la hora UTC.
Oracle Database: Conceptos Fundamentales de SQL II 5-23

Fundacin Proydesa
TZ_OFFSET (continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Para obtener una lista de los valores de nombre de las zonas horarias vlidas, puede consultar la vista
de rendimiento dinmico V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

FROM_TZ
Mostrar el valor de TIMESTAMP '2000-03-28 08:00:00' como
un valor de TIMESTAMP WITH TIME ZONE para la regin de
zona horaria 'Australia/North'.
SELECT FROM_TZ(TIMESTAMP
'2000-07-12 08:00:00', 'Australia/North')
FROM DUAL;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
FROM_TZ
P
Nconvierte
bunl valor de TIMESTAMP en un valor de TIMESTAMP WITH TIME
a
O
La funcin FROM_TZ
r
I
C nsfe
ZONE. DA
ra FROM_TZ es:
N denla-tfuncin
U
La
sintaxis
F no
FROM_TZ(TIMESTAMP timestamp_value, time_zone_value)
donde time_zone_value es una cadena de caracteres con el formato 'TZH:TZM' o una
expresin de caracteres que devuelve una cadena TZR (regin de zona horaria) con un formato TZD
opcional. TZD es una abreviatura de la cadena de zona horaria con la informacin de horario de
verano. TZR representa la regin de zona horaria en las cadenas de entrada de fecha/hora. Los
ejemplos son 'Australia/North', 'PST' para la hora oficial de EE.UU./Pacfico, 'PDT' para
el horario de verano de EE.UU./Pacfico, etc.
El ejemplo de la diapositiva convierte un valor de TIMESTAMP en un valor de TIMESTAMP WITH
TIME ZONE.
Nota: para ver una lista de los valores vlidos para los elementos de formato TZR y TZD, consulte la
vista de rendimiento dinmico V$TIMEZONE_NAMES.

Oracle Database: Conceptos Fundamentales de SQL II 5-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

TO_TIMESTAMP
Mostrar la cadena de caracteres '2007-03-06 11:00:00'
como un valor de TIMESTAMP:

SELECT TO_TIMESTAMP ('2007-03-06 11:00:00',


'YYYY-MM-DD HH:MI:SS')
FROM DUAL;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
TO_TIMESTAMP
P
N raconvierte
bl una cadena del tipo de dato CHAR, VARCHAR2, NCHAR o
O
La funcin TO_TIMESTAMP
I
e tipo de dato TIMESTAMP . La sintaxis de la funcin TO_TIMESTAMP
C un valor
fdel
s
Aen
NVARCHAR2
n
D
N n-tra
es:
U
F noTO_TIMESTAMP (char,[fmt],['nlsparam'])
El fmt opcional especifica el formato de char. Si omite fmt, a cadena debe tener el formato por
defecto del tipo de dato TIMESTAMP. El parmetro nlsparam opcional especifica el idioma en el
que se devuelven las abreviaturas y los nombres del mes y del da. Este argumento puede tener este
formato:
'NLS_DATE_LANGUAGE = language'

Si omite nlsparams, esta funcin utiliza el lenguaje de fecha por defecto para la sesin.
El ejemplo de la diapositiva convierte una cadena de caracteres en un valor de TIMESTAMP.
Nota: utilice la funcin TO_TIMESTAMP_TZ para convertir una cadena del tipo de dato CHAR,
VARCHAR2, NCHAR o NVARCHAR2 en un valor del tipo de dato TIMESTAMP WITH TIME ZONE.
Para obtener ms informacin, consulte Oracle Database SQL Language Reference (Referencia
sobre Lenguaje SQL de Oracle Database) para la base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL II 5-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

TO_YMINTERVAL
Mostrar una fecha que sea un ao y dos meses posterior a la
fecha de contratacin de los empleados que trabajan en el
departamento con el DEPARTMENT_ID 20.
SELECT hire_date,
hire_date + TO_YMINTERVAL('01-02') AS
HIRE_DATE_YMININTERVAL
FROM
employees
WHERE department_id = 20;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
TO_YMINTERVAL
P
l
N rabconvierte
O
La funcin TO_YMINTERVAL
una cadena de caracteres del tipo de dato CHAR,
I
C no sNVARCHAR2
fe
A
VARCHAR2,
NCHAR
en
un
tipo de dato INTERVAL YEAR TO MONTH. El tipo de
D tra
N
- YEAR TO MONTH almacena un perodo de tiempo mediante los campos de
datoU
INTERVAL
n
F
o
n
fecha/hora YEAR y MONTH. El formato de INTERVAL YEAR TO MONTH es el siguiente:

INTERVAL YEAR [(year_precision)] TO MONTH

donde year_precision es el nmero de dgitos del campo de fecha/hora YEAR. El valor por
defecto de year_precision es 2.
La sintaxis de la funcin TO_YMINTERVAL es:
TO_YMINTERVAL (char)

donde char es la cadena de caracteres que se va a convertir.


El ejemplo de la diapositiva calcula una fecha un ao y dos meses posterior a la fecha de contratacin
de los empleados del departamento 20 de la tabla EMPLOYEES.

Oracle Database: Conceptos Fundamentales de SQL II 5-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

TO_DSINTERVAL
Mostrar una fecha que sea 100 das y 10 horas posterior a la
fecha de contratacin de todos los empleados.
SELECT last_name,
TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date,
TO_CHAR(hire_date +
TO_DSINTERVAL('100 10:00:00'),
'mm-dd-yy:hh:mi:ss') hiredate2
FROM employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o

i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
TO_DSINTERVAL
P
l
N rabconvierte
O
La funcin TO_DSINTERVAL
una cadena de caracteres del tipo de dato CHAR,
I
C no sNVARCHAR2
fe
A
VARCHAR2,
NCHAR
en
un
tipo de dato INTERVAL DAY TO SECOND.
D tra
N
En
nde- la diapositiva, se obtiene la fecha 100 das y 10 horas posterior a la fecha de
FelUejemplo
o
n
contratacin.

Oracle Database: Conceptos Fundamentales de SQL II 5-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Horario de Verano

Primer Domingo de Abril


La hora pasa de 01:59:59 AM a 03:00:00 AM.
Los valores de 02:00:00 AM a 02:59:59 AM no son vlidos.

ltimo Domingo de Octubre


La hora pasa de 02:00:00 AM a 01:00:01 AM.
Los valores de 01:00:01 AM a 02:00:00 AM son ambiguos
porque se visitan dos veces.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Horario de Verano (DST)
le
N
b
a
O
La mayora deC
losI pases occidentales
adelantan el reloj una hora durante los meses de verano. Este
er
f
s
A
perodo se
de verano. El horario de verano abarca desde el primer domingo de abril
Ddenomina
anhorario
r
Nltimo
t
hasta
el
domingo
de
octubre
en la mayora de los Estado Unidos, Mxico y Canad. Los
U
n
F
o
n
pases de la Unin Europea tienen en cuenta el horario de verano, pero lo llaman perodo de verano.
El horario de varano en Europa empieza una semana antes que para sus homlogos norteamericanos,
pero finaliza al mismo tiempo.
Oracle Database determina automticamente, para cualquier regin de zona horaria, si el horario de
verano est en vigor y devuelve los valores de hora local correspondientes. El valor de fecha/hora es
suficiente para Oracle Database para determinar si el horario de verano est en vigor para una regin
determinada en todos los casos, excepto los de lmite. Un caso de lmite se produce durante el
perodo en el que entra en vigor o termina el horario de verano. Por ejemplo, en la regin de
EE.UU./Oriental, cuando entra en vigor el horario de verano, la hora cambia de 01:59:59 AM a
03:00:00 AM. El intervalo de una hora entre 02:00:00 AM y 02:59:59 AM. no existe. Cuando el
horario de verano termina, la hora cambia de 02:00:00 AM a 01:00:01 AM y el intervalo de una hora
entre 01:00:01 AM y 02:00:00 AM se repite.

Oracle Database: Conceptos Fundamentales de SQL II 5-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Horario de Verano (DST) (continuacin)


ERROR_ON_OVERLAP_TIME
ERROR_ON_OVERLAP_TIME es un parmetro de sesin que notifica al sistema que debe emitir un
error cuando encuentre un valor de fecha/hora que tenga lugar en el perodo solapado y no haya
especificado ninguna abreviatura de zona horaria para distinguir el perodo.
Por ejemplo, el horario de verano finaliza el 31 de octubre a las 02:00:01 AM. El perodo solapado
es:
de 10/31/2004 01:00:01 AM a 10/31/2004 02:00:00 AM (EDT)
de 10/31/2004 01:00:01 AM a 10/31/2004 02:00:00 AM (EST)
Si introduce una cadena de fecha/hora que tiene lugar en uno de estos dos perodos, debe especificar
la abreviatura de la zona horaria (por ejemplo, EDT o EST) en la cadena de entrada para que el
sistema determine el perodo. Sin esta abreviatura de fecha/hora, el sistema hace lo siguiente:
Si el parmetro ERROR_ON_OVERLAP_TIME es FALSE, asume que la hora de entrada es la hora
oficial (por ejemplo, EST). De lo contrario, se produce un error .

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 5-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
El parmetro de sesin TIME_ZONE se puede definir en:
1.
2.
3.
4.

Un desplazamiento relativo
Zona horaria de la base de datos
Zona horaria local del sistema operativo
Una determinada regin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuestas: 2, 3, 4
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 5-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin debe haber aprendido a utilizar las siguientes
funciones:

CURRENT_DATE
CURRENT_TIMESTAMP
LOCALTIMESTAMP
DBTIMEZONE
SESSIONTIMEZONE
EXTRACT
TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_YMINTERVAL
TO_DSINTERVAL

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
Esta leccin trata
ederlas funciones de fecha/hora disponibles en Oracle Database.
CIalgunas
f
s
A
ND n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 5-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 5: Visin General


En esta prctica se aborda el uso de las funciones de
fecha/hora.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 5: Visin General
le
N
b
a
O
En esta prctica, Imostrar e
r desplazamientos de zona horaria, CURRENT_DATE,
C nsf ylosLOCALTIMESTAMP.
A
CURRENT_TIMESTAMP
Tambin definir las zonas horarias y utilizar la
D tra
N
funcin
FU EXTRACT.
non

Oracle Database: Conceptos Fundamentales de SQL II 5-33

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Recuperacin de Datos mediante Subconsultas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Escribir una subconsulta de varias columnas
Utilizar subconsultas escalares en SQL
Solucionar problemas con subconsultas correlacionadas
Actualizar y suprimir filas mediante subconsultas
correlacionadas
Utilizar los operadores EXISTS y NOT EXISTS
Utilizar la clusula WITH
rg)

a
s
a
h
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I
En esta leccin,
subconsultas y subconsultas de varias columnas en la clusula
ea rescribirTambin
Caprender
f
s
Asentencia
FROM deD
una
SELECT.
aprender a solucionar problemas mediante subconsultas
n
a
r
N
t
escalares,
y la clusula WITH.
FU ncorrelacionadas
on-

Oracle Database: Conceptos Fundamentales de SQL II 6-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Escritura de una subconsulta de varias columnas


Uso de subconsultas escalares en SQL
Solucin de problemas con subconsultas correlacionadas
Uso de los operadores EXISTS y NOT EXISTS
Uso de la clusula WITH

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsultas de Varias Columnas

Consulta principal
WHERE (MANAGER_ID, DEPARTMENT_ID)

IN

Subconsulta
100
102
124

90
60
50

s
a
h
rg)
o

sa ide
e
d
Cada fila de una consulta principal se compara
Gu
roy ncon
t
p
los valores de una subconsulta de varias
dey
n@ tfilas
u
o
i
varias columnas.
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas de Varias Columnas
le
N
b
a
O
I subconsultas
Hasta ahora haC
escrito
de una sola fila y subconsultas de varias filas en las que slo se
er la sentencia
f
s
Acolumna
devuelveD
una
mediante
interna SELECT y sta se utiliza para evaluar la
n
a
r
N
t
expresin
U deolan-sentencia SELECT principal. Si desea comparar dos o ms columnas, debe escribir
F
n WHERE compuesta con operadores lgicos. Con las subconsultas de varias columnas,
una clusula

puede combinar condiciones WHERE duplicadas en una nica clusula WHERE.


Sintaxis

SELECT
column, column, ...
FROM table
WHERE(column, column, ...) IN
(SELECT column, column, ...
FROM
table
WHERE condition);

El grfico de la diapositiva ilustra que los valores de MANAGER_ID y DEPARTMENT_ID de la


consulta principal se van a comparar con los valores de MANAGER_ID y DEPARTMENT_ID
recuperados por la subconsulta. Puesto que el nmero de columnas que se van a comparar es ms de
una, el ejemplo cualifica una subconsulta de varias columnas.
Nota: antes de ejecutar los ejemplos de siguientes diapositivas, debe crear la tabla empl_demo y
rellenarla con datos mediante el archivo lab_06_insert_empdata.sql.
Oracle Database: Conceptos Fundamentales de SQL II 6-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Comparaciones de Columnas
La comparaciones de varias columnas con subconsultas
pueden ser:
Comparaciones no pairwise
Comparaciones pairwise

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Comparaciones Pairwise frente
lea No Pairwise
N
b
a
O
I de varias
Las comparaciones
ercolumnas con subconsultas pueden ser no pairwise o pairwise. Si tiene
C
f
s
A
en cuentaD
el ejemplo
los detalles de los empleados que trabajan en el mismo departamento
anMostrar
r
t
yF
tienen
gerente,
como
'Daniel'? obtendr el resultado correcto con la siguiente sentencia:
UNel mismo
n
first_name, last_name, manager_id, department_id
noSELECT
FROM empl_demo
WHERE manager_id IN (SELECT manager_id
FROM empl_demo
WHERE first_name = 'Daniel')
AND department_id IN (SELECT department_id
FROM empl_demo
WHERE first_name = 'Daniel');

Hay slo un Daniel en la tabla EMPL_DEMO (Daniel Faviet, que gestiona el empleado 108 y
trabaja en el departamento 100). Sin embargo, si las subconsultas devuelven ms de una fila, el
resultado puede no ser correcto. Por ejemplo, si ejecuta la misma consulta pero sustituye John por
Daniel, obtendr un resultado incorrecto. Esto se debe a que la combinacin de department_id
y manager_id es importante. Para obtener el resultado correcto para esta consulta, necesita una
comparacin pairwise.

Oracle Database: Conceptos Fundamentales de SQL II 6-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta de Comparacin Pairwise


Mostrar los detalles de los empleados que gestiona el mismo
gestor y que trabajan en el mismo departamento que los
empleados con el nombre the John.
SELECT employee_id, manager_id, department_id
FROM
empl_demo
WHERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM empl_demo
WHERE first_name = 'John')
AND first_name <> 'John';

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsulta de Comparacin lPairwise
e
N
b
a
O
El ejemplo de la Idiapositiva
rcompara la combinacin de valores de la columna MANAGER_ID y la
AC ansfe de cada fila de la tabla EMPL_DEMO con los valores de la columna
columna D
DEPARTMENT_ID
MANAGER_ID
UN on-ytlar columna DEPARTMENT_ID para los empleados de con un valor de
F
n de John. En primer lugar, se ejecuta la subconsulta para recuperar los valores de
FIRST_NAME

MANAGER_ID y DEPARTMENT_ID para los empleados con un valor de FIRST_NAME de John.


Esta subconsulta devuelve lo siguiente:

Oracle Database: Conceptos Fundamentales de SQL II 6-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta de Comparacin Pairwise (continuacin)


Estos valores se comparan con las columnas MANAGER_ID y DEPARTMENT_ID de cada fila de la
tabla EMPL_DEMO. Si coincide la combinacin, se muestra la fila. En la salida, los registros de los
empleados con un valor de FIRST_NAME de John no se mostrarn. A continuacin, se muestra la
salida de la consulta de la diapositiva:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta de comparacin No Pairwise


Mostrar los detalles de los empleados que gestiona el mismo
gestor que los empleados con el nombre John y que trabajan
en el mismo departamento que los empleados con el nombre
John.
SELECT employee_id, manager_id, department_id
FROM empl_demo
WHERE
manager_id IN
(SELECT manager_id
FROM empl_demo
WHERE first_name = 'John')
AND department_id IN
(SELECT department_id
FROM empl_demo
WHERE first_name = 'John')
AND first_name <> 'John';

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsulta de comparacin No
le Pairwise
N
b
a
O
r
El ejemplo muestra
una comparacin
no pairwise de columnas. En primer lugar, se ejecuta la
elos
CIrecuperar
f
s
A
subconsulta
para
valores
de MANAGER_ID para los empleados con un valor de
D tran
N
FIRST_NAME
U on-de John. Del mismo modo, se ejecuta la segunda subconsulta para recuperar los
F
valores denDEPARTMENT_ID para los empleados con un valor de FIRST_NAME de John. Los

valores recuperados de las columnas MANAGER_ID y DEPARTMENT_ID se comparan con las


columnas MANAGER_ID y DEPARTMENT_ID de cada fila de la tabla EMPL_DEMO. Si la columna
MANAGER_ID de la fila EMPL_DEMO coincide con alguno de los valores de MANAGER_ID
recuperados por la subconsulta interna y si la columna DEPARTMENT_ID de la fila de la tabla
EMPL_DEMO coincide con alguno de los valores de DEPARTMENT_ID recuperados por la segunda
subconsulta, se muestra el registro.

Oracle Database: Conceptos Fundamentales de SQL II 6-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta de Comparacin No Pairwise (continuacin)


A continuacin, se muestra la salida de la consulta de la diapositiva anterior:

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
SA to u
E
D nse
Y
O licaela comparacin pairwise (aqullas con la combinacin de
Esta consulta recupera filasR
adicionales
P
manager_id=100 yNdepartment_id=50
o 80, aunque ningn empleado con el nombre John
le
b
a
O
r
I
tenga dicha combinacin).
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Escritura de una subconsulta de varias columnas


Uso de subconsultas escalares en SQL
Solucin de problemas con subconsultas correlacionadas
Uso de los operadores EXISTS y NOT EXISTS
Uso de la clusula WITH

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Expresiones de Subconsultas Escalares

Una expresin de subconsulta escalar es una subconsulta


que devuelve exactamente un valor de columna de una fila.
Las subconsultas escalares se pueden utilizar en:
La parte de condicin y expresin de DECODE y CASE
Todas las clusulas de SELECT excepto GROUP BY
La clusula SET y WHERE de una sentencia UPDATE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas Escalares en SQL
le
N
b
a
O
Ique devuelve
Una subconsulta
er exactamente un valor de columna de una fila tambin se denomina
C
f
s
A
subconsulta
escalar.aLas
n subconsultas de varias columnas que se escriben para comparar dos o ms
r
NDmediante
t
columnas,
una
clusula WHERE compuesta y operadores lgicos, no se cualifican como
U
n
F
o
n
subconsultas escalares.

El valor de la expresin de subconsulta escalar es el valor del elemento de la lista de seleccin de la


subconsulta. Si la subconsulta devuelve 0 filas, el valor de la expresin de subconsulta escalar es
NULL. Si la subconsulta devuelve ms de una fila, el servidor de Oracle devuelve un error. El
servidor de Oracle ha soportado siempre el uso de una subconsulta escalar en una sentencia SELECT.
Puede utilizar subconsultas escalares en:
La parte de condicin y expresin de DECODE y CASE
Todas las clusulas de SELECT excepto GROUP BY
Las clusulas SET y WHERE de una sentencia UPDATE
Sin embargo, las subconsultas escalares no son expresiones vlidas en los siguientes casos:
Como valores por defecto para columnas y expresiones hash para clusters
En la clusula RETURNING de las sentencias de lenguaje de manipulacin de datos (DML)
Como base de un ndice basado en funciones
En clusulas GROUP BY, restricciones CHECK y condiciones WHEN
En clusulas CONNECT BY
En sentencias no relacionadas con consultas, como CREATE PROFILE
Oracle Database: Conceptos Fundamentales de SQL II 6-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsultas Escalares: Ejemplos

Subconsultas escalares en expresiones CASE:

SELECT employee_id, last_name,


(CASE
20
WHEN department_id =
(SELECT department_id
FROM departments
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM
employees;

s
a
h
rg)
SELECT
employee_id, last_name
o

FROM
employees e
sa ide
e
d
ORDER BY (SELECT department_name
y t Gu
o
r
p
FROM departments d
en
@
d
n
u
WHERE e.department_id = d.department_id);
t
io
S
c
a
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas Escalares: Ejemplos
le
N
b
a
O
El primer ejemplo
diapositiva
demuestra que las subconsultas escalares se pueden utilizar en
CI deLanlaconsulta
fer interna
s
A
expresiones
CASE.
devuelve el valor 20, que es el ID de departamento del
D tra
N
- ID de ubicacin es 1800. La expresin CASE de la consulta externa utiliza el
departamento
U oncuyo
F
n
resultado de la consulta interna para mostrar el ID de empleado, el apellido y un valor de Canada o

Subconsultas escalares en la clusula ORDER BY:

USA, en funcin de si el ID de departamento del registro recuperado por la consulta externa es 20 o no.
A continuacin, se muestra el resultado del primer ejemplo de la diapositiva:

Oracle Database: Conceptos Fundamentales de SQL II 6-12

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Subconsultas Escalares: Ejemplos (continuacin)
El segundo ejemplo de la diapositiva demuestra que las subconsultas escalares se pueden utilizar en
la clusula ORDER BY. El ejemplo ordena la salida segn el valor de DEPARTMENT_NAME
haciendo coincidir DEPARTMENT_ID de la tabla EMPLOYEES con el de DEPARTMENT_ID de la
tabla DEPARTMENTS. Esta comparacin se realiza en una subconsulta escalar en la clusula ORDER
BY. A continuacin, se muestra el resultado del segundo ejemplo:

s
a
h
rg)
o

sa ide
e

d
roy nt Gu
p
@subconsulta
El segundo ejemplo utiliza una subconsulta correlacionada. Ennuna
de correlacionada, la
u
o
t
i
S referencia en la sentencia
subconsulta hace referencia a una columna de una tablaaac
la que seshace
i
d
h
principal. Las subconsultas correlacionadas se explican
adelante
en esta leccin.
t
fun ms
e
(
s
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Escritura de una subconsulta de varias columnas


Uso de subconsultas escalares en SQL
Solucin de problemas con subconsultas correlacionadas
Uso de los operadores EXISTS y NOT EXISTS
Uso de la clusula WITH

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsultas Correlacionadas
Las subconsultas correlacionadas se utilizan para el
procesamiento fila por fila. Cada subconsulta se ejecuta una
vez para cada fila de la consultar externa.
GET
fila candidata de la consulta externa
EXECUTE
consulta interna con el
valor de la fila candidata

a
s
a
)h
g
r
o e
a
s
UTILIZAR
de Guid
valores de la consulta interna pararoy
p ent
cualificar o anular la cualificacin
@
on Stud
i
de la fila candidata
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas Correlacionadasle
bsubconsulta correlacionada cuando la subconsulta hace referencia a
a
r
IONrealiza
El servidor de C
Oracle
una
e
sfa la que se hace referencia en la sentencia principal. Una subconsulta
Ade unaatabla
una columna
n
D
correlacionada
UN onse-trevala una vez para cada fila procesada por la sentencia principal. La sentencia
F
principal n
puede ser una sentencia SELECT, UPDATE o DELETE.
Subconsultas Anidadas frente a Subconsultas Correlacionadas
Con una subconsulta anidada normal, la consulta SELECT interna se ejecuta en primer lugar y una
vez, devolviendo valores que utilizar la consulta principal. Una subconsulta correlacionada, sin
embargo, se ejecuta una vez para cada fila candidata considerada por la consulta externa. Es decir, la
consulta interna est controlada por la consulta externa.
Ejecucin de Subconsulta Anidada
La consulta interna se ejecuta en primer lugar y busca un valor.
La consulta externa se ejecuta una vez, con el valor de la consulta interna.
Ejecucin de Subconsulta Correlacionada
Obtenga una fila candidata (recuperada por la consulta externa).
Ejecute la consulta interna con el valor de la fila candidata.
Utilice los valores resultantes de la consulta interna para cualificar o anular la cualificacin del
candidato.
Repita este procedimiento hasta que no quede ninguna fila candidata.
Oracle Database: Conceptos Fundamentales de SQL II 6-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsultas Correlacionadas
La subconsulta hace referencia a una columna de una tabla de
la consulta principal.
SELECT column1, column2, ...
Outer_table
FROM
table1
WHERE column1 operator
(SELECT
FROM
WHERE

column1, column2
table2
expr1 =
Outer_table .expr2);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas Correlacionadasle(continuacin)
ON ferabes una forma de leer todas las filas de una tabla y comparar los
Icorrelacionada
Una subconsulta
C
A unaadensellas con los datos relacionados. Se utiliza cuando una subconsulta debe
valores deDcada
N
-tr diferente o un juego de resultados para cada fila candidata considerada por la
devolver
U unoresultado
n
F
n
consulta principal.
Es decir, debe utilizar una subconsulta correlacionada para responder a una
consulta de varias partes cuya respuesta depende del valor de cada fila procesada por la sentencia
principal.
El servidor de Oracle realiza una subconsulta correlacionada cuando la subconsulta hace referencia a
una columna de una tabla de la consulta principal.
Nota: puede utilizar los operadores ANY y ALL en una subconsulta correlacionada.

Oracle Database: Conceptos Fundamentales de SQL II 6-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Subconsultas Correlacionadas


Buscar todos los empleados que ganan ms del salario medio
de su departamento.
SELECT last_name, salary, department_id
FROM
employees outer_table
WHERE salary >
(SELECT AVG(salary)
FROM
employees inner_table
WHERE inner_table.department_id =
outer_table.department_id);

s
a
h
rg)
o

Cada que una fila


sa de ide
e
d
u
la consulta
G
roy externa
t
p
se procesa,
la
en
@
d
n
consulta
interna
u
t
io
S
c
a
se
evala.
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Subconsultas Correlacionadas
le
N
b
a
O
El ejemplo de C
la Idiapositiva
erdetermina qu empleados ganan ms del salario medio de su
f
s
A
departamento.
D Entreste
ancaso, la subconsulta correlacionada calcula especficamente el salario medio
deFcada
UNdepartamento.
n
notanto
Puesto que
la consulta interna como la externa utilizan la tabla EMPLOYEES en la clusula

FROM, se proporciona un alias a EMPLOYEES en la sentencia SELECT externa para una mayor
claridad. El alias hace toda la sentencia SELECT ms legible. Sin el alias, la consulta no funcionara
correctamente porque la sentencia no podra distinguir entre la columna de la tabla interna y la
columna de la tabla externa.

Oracle Database: Conceptos Fundamentales de SQL II 6-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Subconsultas Correlacionadas


Mostrar los detalles de aquellos empleados que han cambiado
de cargo al menos dos veces.
SELECT e.employee_id, last_name,e.job_id
FROM
employees e
WHERE 2 <= (SELECT COUNT(*)
FROM
job_history
WHERE employee_id = e.employee_id);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Subconsultas Correlacionadas
(continuacin)
le
N
b
a
O
El ejemplo de C
la Idiapositiva
los detalles de aquellos empleados que han cambiado de cargo
fermuestra
Aveces.aElnsservidor
al menosD
dos
de Oracle evala la subconsulta correlacionada de la siguiente forma:
N n-una
tr fila de la tabla especificada en la consulta externa. sta ser la fila candidata
Seleccione
F1.Uactual.
o
n
2. Almacene el valor de la columna a la que se hace referencia en la subconsulta desde la fila
candidata. (En el ejemplo de la diapositiva, la columna a la que se hace referencia en la
subconsulta es E.EMPLOYEE_ID.)
3. Ejecute la subconsulta en la que su condicin hace referencia al valor de la fila candidata de la
consulta externa. (En el ejemplo de la diapositiva, la funcin de grupo COUNT(*) se evala
segn el valor de la columna E.EMPLOYEE_ID obtenido en el paso 2.)
4. Evale la clusula WHERE de la consulta externa segn los resultados de la subconsulta
ejecutada en el paso 3. Esto determina si se selecciona la fila candidata para la salida. (En el
ejemplo, el nmero de veces que un empleado ha cambiado de cargo, evaluado por la
subconsulta, se compara con 2 en la clusula WHERE de la consulta externa. Si se cumple la
condicin, se muestra el registro de ese empleado.)
5. Repita el procedimiento para la siguiente fila candidata de la tabla, y as sucesivamente, hasta
que se hayan procesado todas las filas de la tabla.
La correlacin se establece a travs de un elemento de la consulta externa en la subconsulta. En este
ejemplo, se compara EMPLOYEE_ID de la tabla de la subconsulta con EMPLOYEE_ID de la tabla
de la consulta externa.
Oracle Database: Conceptos Fundamentales de SQL II 6-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Escritura de una subconsulta de varias columnas


Uso de subconsultas escalares en SQL
Solucin de problemas con subconsultas correlacionadas
Uso de los operadores EXISTS y NOT EXISTS
Uso de la clusula WITH

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador EXISTS

El operador EXISTS prueba la existencia de filas en el


juego de resultados de la subconsulta.
Si se encuentra un valor de fila de subconsulta:
La bsqueda no contina en la consulta interna
La condicin se marca como TRUE

Si no se encuentra un valor de fila de subconsulta:


La condicin se marca como FALSE

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Operador EXISTS
P
l
N rdeabanidamiento,
O
Con las sentencias
SELECT
todos los operadores lgicos son vlidos. Adems,
I
eEXISTS. Este operador
C
f
s
A
puede utilizar
el
operador
se suele utilizar con subconsultas correlacionadas
D tran
N
para
Uprobarosinun- valor recuperado por la consulta externa existe en el juego de resultados de los
F
n
valores recuperados
por la consulta interna. Si la subconsulta devuelve al menos una fila, el operador
La bsqueda contina en la consulta interna

devuelve TRUE. Si el valor no existe, se devuelve FALSE. En consecuencia, 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.

Oracle Database: Conceptos Fundamentales de SQL II 6-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador EXISTS


SELECT employee_id, last_name, job_id, department_id
FROM
employees outer
WHERE EXISTS ( SELECT 'X'
FROM
employees
WHERE manager_id =
outer.employee_id);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Operador EXISTS
P
Ngarantiza
bquel la bsqueda en la consulta interna no contine cuando la
a
O
El operador EXISTS
r
I
fe una coincidencia de gestor y nmero de empleado:
AC aalnsmenos
condicinDencuentre
N n-tr manager_id = outer.employee_id.
FU noWHERE
Observe que la consulta SELECT interna no tiene que devolver un valor concreto, por lo que se
puede seleccionar una constante.

Oracle Database: Conceptos Fundamentales de SQL II 6-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Buscar Todos los Departamentos que


No Tienen Empleados
SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM
employees
WHERE department_id = d.department_id);

s
a
h
rg)
o

sa ide
e

d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Operador NOT P
EXISTS
N rabl
O
I
Solucin Alternativa
sfe
AC anconstruccin
Se puedeD
utilizar una
NOT IN como alternativa a un operador NOT EXISTS, como se
r
N
t
U
muestra
F ennoelnsiguiente ejemplo:
SELECT department_id, department_name
FROM
WHERE

departments
department_id NOT IN (SELECT department_id
FROM
employees);

Sin embargo, NOT IN se evala como FALSE si alguno de los miembros del juego es un valor nulo
NULL. Por lo tanto, la consulta no devolver ninguna fila aunque haya filas en la tabla
departments que cumplan la condicin WHERE.

Oracle Database: Conceptos Fundamentales de SQL II 6-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta Correlacionada UPDATE


Utilizar una subconsulta correlacionada para actualizar las filas
de una tabla segn las filas de otra tabla.
UPDATE table1 alias1
SET
column = (SELECT expression
FROM
table2 alias2
WHERE alias1.column =
alias2.column);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
ROUPDATE
l
Subconsulta Correlacionada
P
le
N
b
a
O
En el caso de la sentencia
puede utilizar una subconsulta correlacionada para actualizar las
r
I
eUPDATE,
C
f
s
A
filas de una
segn
an las filas de otra tabla.
r
ND tabla
t
U
F non

Oracle Database: Conceptos Fundamentales de SQL II 6-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Subconsulta Correlacionada UPDATE

Desnormalizar la tabla EMPL6 mediante la adicin de una


columna para almacenar el nombre de departamento.
Rellenar la tabla mediante una actualizacin
correlacionada.

ALTER TABLE empl6


ADD(department_name VARCHAR2(25));
UPDATE empl6 e
SET
department_name =
(SELECT department_name
FROM
departments d
WHERE e.department_id = d.department_id);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce(continuacin)
i
ROUPDATE
l
Subconsulta Correlacionada
P
le
N
b
a
O
El ejemplo de la Idiapositiva
erdesnormaliza la tabla EMPL6 mediante la adicin de una columna para
C
f
s
A
almacenar
rande departamento y, a continuacin, rellena la tabla mediante una actualizacin
NDel nnombre
t
correlacionada.
U
F no
A continuacin,
se muestra otro ejemplo de una actualizacin correlacionada.
Sentencia con Problemas
La tabla REWARDS contiene una lista de empleados que han excedido sus expectativas de
rendimiento. Utilice una subconsulta correlacionada para actualizar las filas de la tabla EMPL6 segn
las filas de la tabla REWARDS:
UPDATE empl6
SET
salary = (SELECT empl6.salary + rewards.pay_raise
FROM
rewards
WHERE employee_id =
empl6.employee_id
AND payraise_date =
(SELECT MAX(payraise_date)
FROM
rewards
WHERE employee_id = empl6.employee_id))
WHERE empl6.employee_id
IN
(SELECT employee_id FROM rewards);
Oracle Database: Conceptos Fundamentales de SQL II 6-24

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Subconsulta Correlacionada UPDATE (continuacin)
En este ejemplo se utiliza la tabla REWARDS. La tabla REWARDS tiene las siguientes columnas:
EMPLOYEE_ID, PAY_RAISE y PAYRAISE_DATE. Cada vez que un empleado obtiene un
aumento de sueldo, se inserta un registro con detalles como el ID de empleado, el importe del
aumento de sueldo y la fecha de recepcin del aumento de sueldo en la tabla REWARDS. La tabla
REWARDS puede contener ms de un registro para un empleado. La columna PAYRAISE _DATE se
utiliza para identificar el aumento de sueldo ms reciente recibido por un empleado.
En el ejemplo, la columna SALARY de la tabla EMPL6 se actualiza para reflejar el ltimo aumento
de sueldo recibido por un empleado. Para ello, se agrega el salario actual del empleado con el
correspondiente aumento de sueldo desde la tabla REWARDS.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsulta Correlacionada DELETE


Utilizar una subconsulta correlacionada para suprimir filas de
una tabla segn las filas de otra tabla.
DELETE FROM table1 alias1
WHERE column operator
(SELECT expression
FROM
table2 alias2
WHERE alias1.column = alias2.column);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce
i
RODELETE
l
Subconsulta Correlacionada
P
le
N
b
a
O
En el caso de unaI sentencia
puede utilizar una subconsulta correlacionada para suprimir
r
eDELETE,
C
f
s
A
slo aquellas
existen en la otra tabla. Si decide que slo mantendr los cuatro
D filastrque
anslo
Nregistros
ltimos
del
historial
del cargo en la tabla JOB_HISTORY, cuando un empleado se
U
n
F
o
n
transfiera a un quinto cargo, tendr que suprimir la fila JOB_HISTORY ms antigua
consultando en la tabla JOB_HISTORY el registro MIN(START_DATE) del empleado. El
siguiente cdigo ilustra cmo se puede realizar la operacin anterior mediante una
subconsulta correlacionada DELETE:
DELETE FROM emp_history JH
WHERE employee_id =
(SELECT employee_id
FROM employees E
WHERE JH.employee_id = E.employee_id
AND START_DATE =
(SELECT MIN(start_date)
FROM job_history JH
WHERE JH.employee_id = E.employee_id)
AND 5 > (SELECT COUNT(*)
FROM job_history JH
WHERE JH.employee_id = E.employee_id
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) >= 4));
Oracle Database: Conceptos Fundamentales de SQL II 6-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de una Subconsulta Correlacionada DELETE


Utilizar una subconsulta correlacionada para suprimir slo
aquellas filas de la tabla EMPL6 que tambin existen en la
tabla EMP_HISTORY.
DELETE FROM empl6 E
WHERE employee_id =
(SELECT employee_id
FROM
emp_history
WHERE employee_id = E.employee_id);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
ce(continuacin)
i
RODELETE
l
Subconsulta Correlacionada
P
le
N
b
a
O
Ejemplo
CI nsfer
A
D setrautilizan dos tablas: Son las siguientes:
En esteNejemplo
- que proporciona detalles de todos los empleados actuales.
U
nEMPL6,
F La tabla
o
n
La tabla EMP_HISTORY, que proporciona detalles de los empleados anteriores.

EMP_HISTORY contiene datos relativos a los empleados anteriores, por lo que sera un error que el
mismo registro del empleado existiera en las tablas EMPL6 y EMP_HISTORY. Puede suprimir
dichos registros errneos mediante la subconsulta relativa mostrada en la diapositiva.

Oracle Database: Conceptos Fundamentales de SQL II 6-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Escritura de una subconsulta de varias columnas


Uso de subconsultas escalares en SQL
Solucin de problemas con subconsultas correlacionadas
Uso de los operadores EXISTS y NOT EXISTS
Uso de la clusula WITH

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 6-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula WITH

Con la clusula WITH, puede utilizar el mismo bloque de


consulta en una sentencia SELECT cuando se produce
ms de una vez en una consulta compleja.
La clusula WITH recupera los resultados de un bloque de
consulta y lo almacena en el tablespace temporal del
usuario.
La clusula WITH puede mejorar el rendimiento.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Clusula WITH
P
Npuederadefinir
bl un bloque de consulta antes de utilizarlo en una consulta. La
O
Con la clusula WITH,
I
fe anteriormente subquery_factoring_clause) permite reutilizar
s
AC(denominada
clusula WITH
n
D
raconsulta en una sentencia SELECT cuando se produce ms de una vez en una
N bloque
t
el mismo
de
U
n
F no Esto es especialmente til cuando una consulta tiene muchas referencias al mismo
consulta compleja.
bloque de consulta y existen uniones y agregaciones.
Con la clusula WITH, puede reutilizar la misma consulta cuando es muy costoso evaluar el bloque
de consulta y se produce ms de una vez en una consulta compleja. Con la clusula WITH, el servidor
de Oracle recupera los resultados de un bloque de consulta y lo almacena en el tablespace temporal
del usuario. Esto puede mejorar el rendimiento.
Ventajas de la Clusula WITH
Facilita la lectura de la consulta.
Evala una clusula una sola vez, incluso si aparece varias veces en la consulta.
En la mayora de los casos, puede mejorar el rendimiento de grandes consultas.

Oracle Database: Conceptos Fundamentales de SQL II 6-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula WITH: Ejemplo


Con la clusula WITH, escriba una consulta para mostrar el
nombre de departamento y el total de los salarios de aquellos
departamentos cuyo salario total sea superior al salario medio
de los departamentos.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Clusula WITH: Ejemplo
P
N renalabldiapositiva podra necesitar clculos intermedios:
O
I
El problema que
se
muestra
fede cada departamento y almacene el resultado mediante la clusula
s
AelCsalario
1. Calcule
total
n
D
N n-tra
WITH.
U
F2. Calcule
noel salario medio de los departamentos y almacene el resultado mediante una clusula

WITH.
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 determinado departamento es superior al salario medio de
todos los departamentos, muestre el nombre de departamento y el salario total del departamento.
En la pgina siguiente se proporciona la solucin a este problema.

Oracle Database: Conceptos Fundamentales de SQL II 6-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula WITH: Ejemplo

WITH
dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM
employees e JOIN departments d
ON
e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost
AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM
dept_costs)
SELECT *
FROM
dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Clusula WITH: Ejemplo
(continuacin)
P
N rabesl un ejemplo de una situacin en la que puede mejorar el rendimiento
El cdigo SQL deIO
la diapositiva
sfe mediante la clusula WITH. La consulta crea los nombres de consulta
ACmsasimplemente
y escribirD
SQL
n
r
DEPT_COSTS
y, a continuacin, los utiliza en el cuerpo de la consulta principal.
UN on-ytAVG_COST
F
Internamente,
n la clusula WITH se resuelve como una vista en lnea o una tabla temporal. El
optimizador selecciona la resolucin adecuada en funcin del costo o beneficio del almacenamiento
temporal de los resultados de la clusula WITH.
La salida generada por el cdigo SQL de la diapositiva es el siguiente:

Notas de Uso de la Clusula WITH


Se utiliza slo con las sentencias SELECT.
El nombre de la consulta es visible para todos los bloques de consulta de elementos WITH
(incluidos sus bloques de subconsulta) definidos despus de ella y del propio bloque de consulta
principal (incluidos sus bloques de subconsulta).
Cuando el nombre de consulta es el mismo que el de una tabla existente, el analizador busca desde
adentro afuera y el nombre del bloque de consulta tiene prioridad sobre el nombre de tabla.
La clusula WITH puede contener ms de una consulta. Cada consulta se separa a continuacin
por una coma.
Oracle Database: Conceptos Fundamentales de SQL II 6-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula WITH Recursiva


La clusula WITH recursiva

Permite la formulacin de consultas recursivas.


Crea una consulta con un nombre, denominado nombre
de elemento de WITH recursiva.

Contiene dos tipos de miembro de bloques de consulta:


fijacin y recursivo.
Es compatible con ANSI.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Clusula WITH Recursiva
P
N rab2,l la clusula WITH se ha ampliado para permitir la formulacin de
O
En Oracle Database
11g Versin
I
AC ansfe
consultasD
recursivas.
-trrecursiva define una consulta recursiva con un nombre, el nombre de elemento de
UN oWITH
La
n
Fclusula
n La definicin de elemento de WITH recursiva debe contener al menos dos bloques
WITH recursiva.
de consulta: un miembro de fijacin y un miembro recursivo. Puede haber varios miembros de
fijacin, pero slo uno recursivo.
La clusula WITH recursiva, Oracle Database 11g Versin 2, cumple parcialmente el estndar ANSI
(American National Standards Institute). La clusula WITH recursiva se puede utilizar para consultar
datos jerrquicos como los grficos de organizacin.

Oracle Database: Conceptos Fundamentales de SQL II 6-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula WITH Recursiva: Ejemplo


FLIGHTS Table

WITH Reachable_From (Source, Destin, TotalFlightTime) AS


(
SELECT Source, Destin, Flight_time
FROM Flights
UNION ALL
SELECT incoming.Source, outgoing.Destin,
incoming.TotalFlightTime+outgoing.Flight_time
FROM Reachable_From incoming, Flights outgoing
WHERE incoming.Destin = outgoing.Source
)
SELECT Source, Destin, TotalFlightTime
FROM Reachable_From;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c3 is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
REjemplo
Clusula WITH Recursiva:
P
le
N
b
a
O
El ejemplo 1 de laI diapositiva
er muestra los registros de una tabla FLIGHTS que describe los vuelos
C
f
s
A
entre dosD
ciudades.a
Este
n ejemplo es especfico de 11g versin R2 de Oracle Database.
r
N
t
U
Con
n del ejemplo 2, puede consultar la tabla FLIGHTS para mostrar el tiempo total del
F la consulta
nocualquier
vuelo entre
origen y el destino. La clusula WITH de la consulta, que se denomina

Reachable From, tiene una consulta UNION ALL con dos ramas. La primera rama es la rama de
fijacin, que selecciona todas las filas de la tabla Flights. La segunda rama es la rama recursiva.
Une el contenido de Reachable From con la tabla Flights para buscar otras ciudades a las que
se pueda viajar y las agrega al contenido de Reachable From. La operacin terminar cuando la
rama recursiva no encuentre ms filas.
El ejemplo 3 muestra el resultado de la consulta que selecciona todo el contenido del elemento de la
clusula WITH Reachable From.
Para obtener ms informacin, consulte:
Oracle Database SQL Language Reference 11g Release 2.0
Oracle Database Data Warehousing Guide 11g Release 2.0

Oracle Database: Conceptos Fundamentales de SQL II 6-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Con una subconsulta correlacionada, la sentencia SELECT
interna controla la sentencia SELECT externa.
1. Verdadero
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 6-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Una subconsulta de varias columnas devuelve ms
de una columna.
Las comparaciones de varias columnas pueden ser
pairwise o no pairwise.
Una subconsulta de varias columnas se puede utilizar
tambin en la clusula FROM de una sentencia SELECT.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
Puede utilizar lasIsubconsultas
r de varias columnas para combinar varias condiciones WHERE en una
ecomparaciones
C
f
s
A
nica clusula
WHERE.
Las
de columnas de una subconsulta de varias columnas
D tran
N
pueden
pairwise o no pairwise.
nFU sernocomparaciones
Puede utilizar una subconsulta para definir una tabla en la que se podr operar mediante una consulta
de contenido.
Las subconsultas escalares se pueden utilizar en:
La parte de condicin y expresin de DECODE y CASE
Todas las clusulas de SELECT excepto GROUP BY
Una clusula SET y WHERE de la sentencia UPDATE

Oracle Database: Conceptos Fundamentales de SQL II 6-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen

Las subconsultas correlacionadas son tiles cuando una


subconsulta debe devolver un resultado diferente para
cada fila candidata.
El operador EXISTS es un operador booleano que prueba
la presencia de un valor.
Las subconsultas correlacionadas se pueden utilizar con
sentencias SELECT, UPDATE y DELETE.
Puede utilizar la clusula WITH para usar el mismo bloque
s
de consulta en una sentencia SELECT que se produce ) ha
rg
o
ms de una vez.

es uide
d
y
ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen (continuacin)
le
N
b
a
O
I realiza
El servidor de C
Oracle
eruna subconsulta correlacionada cuando la subconsulta hace referencia a
f
s
A
una columna
n a la que se hace referencia en la sentencia principal. Una subconsulta
atabla
revala
ND ndese-una
t
correlacionada
una vez para cada fila procesada por la sentencia principal. La sentencia
U
F
o
n
principal puede ser una sentencia SELECT, UPDATE o DELETE. Con la clusula WITH, puede
reutilizar la misma consulta cuando es muy costoso volver a evaluar el bloque de consulta y se
produce ms de una vez en una consulta compleja.

Oracle Database: Conceptos Fundamentales de SQL II 6-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 6: Visin General


En esta prctica se abordan los siguientes temas:
Creacin de subconsultas de varias columnas
Escritura de subconsultas correlacionadas
Uso del operador EXISTS

Uso de subconsultas escalares


Uso de la clusula WITH

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Prctica 6: Visin General
P
N subconsultas
bl de varias columnas y subconsultas escalares y
a
O
r
I
En esta prctica,
escribir
feresolver problemas escribiendo la clusula WITH.
s
ACTambin
correlacionadas.
n
D
N n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 6-37

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Soporte para Expresiones Normales

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Mostrar las ventajas del uso de expresiones regulares
Utilizar expresiones regulares para buscar, hacer coincidir
y sustituir cadenas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I
En esta leccin,
aprender
ea rutilizar la funcin de soporte de expresiones regulares. El soporte de
C
f
s
A
expresiones
anest disponible en SQL y PL/SQL.
r
ND regulares
t
U
F non

Oracle Database: Conceptos Fundamentales de SQL II 7-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin a expresiones regulares


Uso de metacaracteres con expresiones regulares
Uso de funciones de expresiones regulares:

REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR

Acceso a subexpresiones
Uso de la funcin REGEXP_COUNT

s
a
h
rg)
o

sa ide
Expresiones regulares y restricciones de control
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 7-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Qu Son Expresiones Regulares?

Utilice las expresiones regulares para buscar (y manipular)


patrones simples y complejos en datos de cadena
mediante convenciones de sintaxis estndar.
Utilice un juego de condiciones y funciones SQL para
buscar y manipular cadenas en SQL y PL/SQL.
Especifique una expresin regular mediante:
Metacaracteres, que son operadores que especifican los
algoritmos de bsqueda
Literales, que son los caracteres que est buscando

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Qu Son ExpresionesP
Regulares?
N rasoporte
bl para expresiones regulares. La implantacin cumple con el
O
I
Oracle Database
proporciona
feOperating System for UNIX), controlado por IEEE (Institute of Electrical
s
AC(Portable
estndar POSIX
n
D
ra
N n-Engineers),
t
and
Electronics
para la sintaxis y semntica de coincidencia de datos ASCII. Las
U
F
o
n
capacidades multilinges de Oracle amplan las capacidades de coincidencia de los operadores ms
all del estndar POSIX. Las expresiones normales son un mtodo de descripcin de patrones tanto
simples como complejos para la bsqueda y la manipulacin.
La manipulacin y la bsqueda de cadenas contribuyen a un amplio porcentaje de la lgica dentro de
una aplicacin basada en web. Su uso va desde una tarea simple, como la bsqueda de la palabra
"San Francisco" en un texto especificado, la tarea compleja de extraccin de todas las URL del texto
hasta la tarea ms compleja de bsqueda de todas las palabras cuyo segundo carcter sea una vocal.
Junto con SQL nativo, el uso de expresiones regulares permite operaciones muy potentes de
bsqueda y de manipulacin en datos almacenados en Oracle Database. Puede utilizar esta funcin
para resolver problemas de forma sencilla que de otra manera implicara una programacin compleja.

Oracle Database: Conceptos Fundamentales de SQL II 7-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ventajas de Utilizar Expresiones Regulares


Las expresiones regulares permiten implantar la lgica de
coincidencia compleja en la base de datos con las siguientes
ventajas:
Al centralizar la lgica de coincidencia en Oracle
Database, evita el procesamiento complejo de cadenas de
juegos de resultados de SQL mediante aplicaciones de
nivel medio.
Mediante el uso de expresiones regulares del servidor
para aplicar restricciones, elimina la necesidad de codificar s
a
h
)
la lgica de validacin de datos en el cliente.
rg
o

Las condiciones y funciones de expresiones regulares


sa ide
e
d
PL/SQL y SQL incorporadas hacen que las
roy nt Gu
p
manipulaciones de cadenas sean ms
de y potentes
n@sencillas
u
o
t
i
c Oracle
que en las versiones anteriores
is SDatabase 11g.
dade

fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ventajas de Utilizar Expresiones
le Regulares
N
b
a
O
I
Las expresiones
regulares
esonr un componente de procesamiento de texto potente de lenguajes de
C
f
s
A
programacin
comoaPERL
Por ejemplo, un script de PERL puede procesar cada archivo
r n leery suJava.
NenDun ndirectorio,
t
HTML
contenido
en una variable escalar como una nica cadena y, a
U
F
o
n
continuacin, utilizar expresiones regulares para buscar URL en la cadena. Uno de los motivos por el
que muchos desarrolladores escriben en PERL, es que se trata de una funcionalidad de coincidencia
de patrones slida. El soporte de Oracle de expresiones regulares permite a los desarrolladores
implantar la lgica de coincidencia compleja en la base de datos. Las expresiones regulares se
introdujeron en Oracle Database 10g.

Oracle Database: Conceptos Fundamentales de SQL II 7-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Funciones y Condiciones


de Expresiones Regulares en SQL y PL/SQL
Nombre de Funcin o
Condicin

Descripcin

REGEXP_LIKE

Es similar al operador LIKE, pero utiliza la


coincidencia de expresiones regulares en lugar de la
coincidencia de patrones simple (condicin).

REGEXP_REPLACE

Busca un patrn de expresin normal y lo reemplaza


por una cadena de sustitucin.

REGEXP_INSTR

Busca una cadena para un patrn de expresin


regular y devuelve la posicin de la coincidencia
encontrada.

a
s
a
)h
g
r
Busca un patrn de expresin regular dentroade
REGEXP_SUBSTR
ouna e
s
cadena dada y extrae la subcadena coincidente.
de Guid
y
o
t
pr se haeencontrado
n
Devuelve el nmero de veces
que
REGEXP_COUNT
@
d de entrada.
una coincidencia de patrn
on en una
tucadena
i
S
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Funciones y Condiciones
le de Expresiones Regulares en SQL y PL/SQL
N
b
a
O
Iproporciona
Oracle Database
er un juego de funciones SQL que puede utilizar para buscar y manipular
C
f
s
A
cadenas mediante
Utilice estas funciones en un literal de texto, variable de
D trexpresiones
an queregulares.
No cualquier
enlace
columna
contenga
datos de caracteres como CHAR, NCHAR, CLOB, NCLOB,
U
n
F
o
n
NVARCHAR2 y VARCHAR2 (pero noLONG). Una expresin regular debe ir entre comillas simples.
Esto garantiza que la funcin SQL interpreta la expresin completa y puede mejorar la legibilidad del
cdigo.
REGEXP_LIKE: Esta condicin busca una columna con caracteres para un patrn. Utilice esta
condicin en la clusula WHERE de una consulta para devolver las filas coincidentes con la
expresin regular especificada.
REGEXP_REPLACE: Esta funcin busca un patrn en una columna de caracteres y sustituye
cada incidencia de dicho patrn con el patrn especificado.
REGEXP_INSTR: Esta funcin busca una cadena para una determinada incidencia de un patrn
de expresin regular. Especifique las incidencias que desea buscar y la posicin inicial desde la
que buscar. Esta funcin devuelve un entero que indica la posicin en la cadena en la que se
encuentra la coincidencia.
REGEXP_SUBSTR: Esta funcin devuelve la coincidencia de subcadena actual con el patrn de
expresin regular especificado.
REGEXP_COUNT: Esta funcin, introducida en 11g versin 2, devuelve el nmero de veces que
se encuentra una coincidencia de patrn en la cadena de entrada.
Oracle Database: Conceptos Fundamentales de SQL II 7-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin a expresiones regulares


Uso de metacaracteres con expresiones regulares
Uso de funciones de expresiones regulares:

REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR

Acceso a subexpresiones
Uso de la funcin REGEXP_COUNT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 7-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Que Son Metacaracteres?

Los metacaracteres son caracteres especiales con un


significado especial, como un comodn, un carcter
repetitivo, un carcter no coincidente o un rango de
caracteres.
Puede utilizar varios smbolos de metacaracteres
predefinidos en la coincidencia de patrones.
Por ejemplo, la expresin regular ^(f|ht)tps?:$ busca
lo siguiente desde el principio de la cadena:

s
a
Los literales f o ht
h
rg)
El literal t
o

sa ide
e
El literal p, seguido opcionalmente por el literal
s
d
u
y
pro ent G
El literal dos puntos : al final de la cadena

n@ tud
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Que Son Metacaracteres?
P
N
bl coincide con las cadenas http:, https:, ftp: y ftps: strings.
a
O
r
I
La expresin regular
de
la
diapositiva
fe
slista
AC auna
n
Dobtener
Nota: N
para
de metacaracteres de expresiones regulares, consulte Oracle Database
r
t
U
Advanced
Developers Guide for 10g or 11g (Gua del Desarrollador de Aplicaciones
n
F nApplication
o
Avanzadas de Oracle Database para 10g u 11g).

Oracle Database: Conceptos Fundamentales de SQL II 7-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Metacaracteres con Expresiones Normales


Sintaxis

Descripcin

Coincide con cualquier carcter en el juego de caracteres soportados,


excepto NULL.

Coincide con una o ms incidencias.

Coincide con ninguna o una ocurrencia.

Coincide con ninguna o ms incidencias de una subexpresin anterior.

{m}

Coincide exactamente con m incidencias de la expresin anterior.

{m, }

Coincide al menos con m incidencias de la subexpresin anterior.

{m,n}

Coincide al menos con m, pero no ms de n, incidencias de la subexpresin


anterior.

s
a
h
g)
r
o

Coincide con cualquier carcter nico de la lista entre corchetes. a


[]
s ide
e
d
Coincide con una de las alternativas.
|
roy nt Gu
p
e
( ... ) Trata la expresin entre parntesis como una
unidad. La d
subexpresin
n@
u
o
t
i
puede ser una cadena de literales o una
expresin
compleja
con operadores.
S
c
a
s
i
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Metacaracteres en Funciones
le de Expresiones Regulares
N
b
a
O
Cualquier carcter,
CI n s. fe: ra.b coincide con las cadenas abb, acb y adb, pero no con acc.
A
Uno o ms,
ND n+-tr:aa+ coincide con las cadenas a, aa y aaa, pero no coincide con bbb.
U
F o uno,
Cero
no ? : ab?c coincide con las cadenas abc y ac, pero no coincide con abbc.

Cero o ms, * : ab*c coincide con las cadenas ac, abc y abbc, pero no coincide con
abb.
Recuento exacto {m} : a{3} coincide con las cadenas aaa, pero no coincide con aa.
Al menos el recuento, {m,} : a{3,} coincide con las cadenas aaa y aaaa, pero no con
aa.
Entre recuento, {m,n} : a{3,5} coinciden con las cadenas aaa, aaaa y aaaaa, pero no
con aa.
Lista de caracteres coincidentes, [] : [abc] coincide con el primer carcter en las cadenas
all, bill y cold, pero no coincide con los caracteres en doll.
O, | : a|b coincide con el carcter a o b.
Subexpresin, () :(abc)?def coincide con la cadena opcional abc, seguida de def. La
expresin coincide con abcdefghi y def, pero no coincide con ghi. La subexpresin puede ser
una cadena de literales o una expresin compleja con operadores.
Oracle Database: Conceptos Fundamentales de SQL II 7-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Metacaracteres con Expresiones Normales


Sintaxis

Descripcin

Coincide con el principio de una cadena.

Coincide con el final de una cadena.

Trata el metacarcter posterior en la expresin como un literal.

\n

Coincide con la n (19) subexpresin anterior de lo introducido entre


parntesis. Los parntesis hacen que se recuerde una expresin; una
referencia hacia atrs hace referencia a la misma.

\d

Carcter dgito.

s
a
h
[:class:] Coincide con los caracteres que pertenecen a la clase de caracteres rg)
POSIX especificada.
o e
a
s
e
id
la d
lista entre u
[^:class:] Coincide con cualquier carcter nico que no est en
y
G
o
corchetes.
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Metacaracteres en Funciones
le de Expresiones Regulares (continuacin)
N
b
a
O
Principio/fin de Ila fijacin
lnea, ^ y $: ^def coincide con def en la cadena defghi
C con ndef
feenrdeabcdef.
s
A
pero no coincide
def$ coincide con def en la cadena abcdef pero no
D tra
N
- en la cadena defghi.
coincide
def
n
FU con
o
n
Carcter de escape \ : \+ busca un signo +. Coincide con el carcter de signo ms en la

cadena abc+def, pero no coincide con Abcdef.


Referencia haca atrs, \n :(abc|def)xy\1 coincide con las cadenas abcxyabc y
defxydef, pero no coincide con abcxydef ni abcxy. Una referencia haca atrs permite buscar
una cadena repetida sin conocer la cadena real con anterioridad. Por ejemplo, la expresin
^(.*)\1$ coincide con una lnea con dos instancias adyacentes de la misma cadena.
Carcter de dgito, \d: La expresin ^\[\d{3}\] \d{3}-\d{4}$ coincide con [650] 555-1212 pero no
con 650-555-1212.
Clase de caracteres, [:class:] : [[:upper:]]+ busca uno o ms caracteres en
mayscula consecutivos. Coincide con DEF en la cadena abcDEFghi pero no con la cadena
abcdefghi.
Lista de caracteres no coincidentes (o clase), [^...] : [^abc] coincide con el carcter d en
la cadena abcdef, pero no con a, b ni c.

Oracle Database: Conceptos Fundamentales de SQL II 7-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin a expresiones regulares


Uso de metacaracteres con expresiones regulares
Uso de funciones de expresiones regulares:

REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR

Acceso a subexpresiones
Uso de la funcin REGEXP_COUNT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 7-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Condiciones y Funciones
de Expresiones Regulares: Sintaxis
REGEXP_LIKE

(source_char, pattern [,match_option]

REGEXP_INSTR

(source_char, pattern [, position


[, occurrence [, return_option
[, match_option [, subexpr]]]]])

REGEXP_SUBSTR (source_char, pattern [, position


[, occurrence [, match_option
[, subexpr]]]])

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
REGEXP_COUNT (source_char, pattern [, position
p
n@ tude
o
[, occurrence [, match_option]]])
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Condiciones y Funciones de Expresiones
Regulares: Sintaxis
le
N
b
a
O
La sintaxis de C
lasIcondiciones
de expresiones regulares es la siguiente:
er y funciones
f
s
A
source_char:
expresin
de
carcter
que sirve como valor de bsqueda.
D tran
N
-expresin regular, literal de texto.
pattern:
F Uoccurrence:
non entero positivo que indica la incidencia de patrn que se debe buscar en el
REGEXP_REPLACE(source_char, pattern [,replacestr
[, position [, occurrence
[, match_option]]]])

servidor de Oracle source_char El valor por defecto es 1.


position: entero positivo que indica el carcter de source_char dnde debe empezar a
buscar el servidor de Oracle. El valor por defecto es 1.
return_option:
- 0: devuelve la posicin del primer carcter de la incidencia (por defecto).
- 1: devuelve la posicin del carcter que sigue a la incidencia.
Replacestr: cadena de carcter que sustituye el patrn.
match_parameter:
- c : utiliza una coincidencia sensible a maysculas y minsculas (por defecto).
- i : utiliza una coincidencia no sensible a maysculas y minsculas.
- n : permite el operador de coincidencia de cualquier carcter.
- m : trata la cadena origen como cadena de varias lneas.
subexpr: fragmento del patrn entre parntesis. Las subexpresiones se explican ms adelante
en esta misma leccin.
Oracle Database: Conceptos Fundamentales de SQL II 7-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Realizacin de una Bsqueda Bsica


mediante la Condicin REGEXP_LIKE

REGEXP_LIKE(source_char, pattern [, match_parameter ])

SELECT first_name, last_name


FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
cemediante la Condicin REGEXP_LIKE
i
RO Bsica
l
Realizacin de una Bsqueda
P
le
N
b
a
O
REGEXP_LIKE Ies similarearla condicin LIKE, excepto que REGEXP_LIKE realiza coincidencias
sfen lugar de las coincidencias de patrones simples que realiza LIKE. Esta
ACregulares
de expresiones
n
D
a
r
N n-tcadenas
condicin
mediante caracteres como define el juego de caracteres de entrada.
FU nevala
o
Ejemplo de REGEXP_LIKE
En esta consulta, al contrario que la tabla EMPLOYEES, se muestran todos los empleados cuyos
nombres contengan Steven o Stephen. En la expresin utilizada '^Ste(v|ph)en$ ':
^ indica el principio de la expresin
$ indica el final de la expresin
| indica cualquiera/o

Oracle Database: Conceptos Fundamentales de SQL II 7-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sustitucin de Patrones
mediante la Funcin REGEXP_REPLACE
REGEXP_REPLACE(source_char, pattern [,replacestr
[, position [, occurrence [, match_option]]]])

SELECT REGEXP_REPLACE(phone_number, '\.','-') AS phone


FROM employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
Sustitucin de Patrones
mediante
P
e la Funcin REGEXP_REPLACE
l
N
b
Con la funcin REGEXP_REPLACE,
vuelva a formatear el nmero de telfono para sustituir el
IO fera
C
s
A
delimitador
D de punto n(.) por un delimitador de guin (-). A continuacin se muestra una explicacin
deFcada
UNunooden-lostraelementos utilizados en el ejemplo de la expresin regular:
n
phone_number
es la columna de origen.
Original

Resultados parciales

'\.' es el patrn de bsqueda.


- Utilice comillas simples ( ) para buscar el punto (.) del carcter literal.
- Utilice una barra invertida (\) para buscar un carcter que normalmente se trata como
metacarcter.
'-' es la cadena de sustitucin.

Oracle Database: Conceptos Fundamentales de SQL II 7-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Bsqueda de Patrones
mediante la Funcin REGEXP_REPLACE
REGEXP_INSTR (source_char, pattern [, position [,
occurrence [, return_option [, match_option]]]])
SELECT street_address,
REGEXP_INSTR(street_address,'[[:alpha:]]') AS
First_Alpha_Position
FROM locations;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
e
RO e lalicFuncin
Bsqueda de PatronesP
mediante
REGEXP_REPLACE
l
N
b
En este ejemplo, IlaOfuncineREGEXP_INSTR
se utiliza para buscar la direccin de la ubicacin del
ra
C
f
s
A
primer carcter
de si est en mayscula o minscula. Tenga en cuenta
ranimplicaindependientemente
ND n-alfabtico,
t
queU
[:<class>:]
una clase de caracteres y coincide con cualquier carcter en dicha clase;
F no coincide con cualquier carcter alfabtico. Se muestran los resultados parciales.
[:alpha:]
En la expresin utilizada en la consulta '[[:alpha:]]':
[ inicia la expresin
[:alpha:] indica la clase de caracteres alfabticos
[ finaliza la expresin
Nota: el operador de la clase de caracteres POSIX permite buscar una expresin en una lista de
caracteres que sea miembro de una clase de caracteres POSIX. Puede utilizar este operador para
buscar formato especfico como caracteres en mayscula o puede buscar caracteres especiales como
caracteres de dgitos o puntuacin. Est soportado el juego completo de las clases de caracteres
POSIX. Utilice la sintaxis [:class:], donde class es el nombre de la clase de caracteres POSIX
que buscar. La siguiente expresin regular busca uno o ms caracteres en mayscula consecutivos:
[[:upper:]]+ .

Oracle Database: Conceptos Fundamentales de SQL II 7-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Bsqueda de Patrones
mediante la Funcin REGEXP_SUBSTR
REGEXP_SUBSTR (source_char, pattern [, position
[, occurrence [, match_option]]])
SELECT REGEXP_SUBSTR(street_address , ' [^ ]+ ') AS Road
FROM locations;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
e
RO e lalicFuncin
Bsqueda de PatronesP
mediante
REGEXP_SUBSTR
l
N
b
Oextraen
En este ejemplo, Ise
los
ranombre de vas de la tabla LOCATIONS. Para ello, se devuelve el
e
C
f
contenidoDenAla columna
nsSTREET_ADDRESS que se encuentra despus del primer espacio mediante
a
r
N
t
la funcin
REGEXP_SUBSTR.
En la expresin utilizada en la consulta ' [^ ]+ ':
F U[ inicia
nolanexpresin
^ indica NO

indica espacio
[ finaliza la expresin
+ indica 1 o ms

indica espacio

Oracle Database: Conceptos Fundamentales de SQL II 7-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin a expresiones regulares


Uso de metacaracteres con expresiones regulares
Uso de funciones de expresiones regulares:

REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR

Acceso a subexpresiones
Uso de la funcin REGEXP_COUNT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 7-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subexpresiones
Examine esta expresin:

(1 2 3)(4(5 6)(7 8))


Las subexpresiones son:

(1 2 3)(4(5 6)(7 8))

a
s
a
)h
g
r
o e
2
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subexpresiones
le
N
b
a
O
I11g proporciona
Oracle Database
er el parmetro de soporte de expresiones regulares para acceder a
C
f
s
A
una subexpresin.
la diapositiva, se muestra una cadena de dgitos. Los parntesis
anel ejemploen dela cadena
rEn
NDlasnsubexpresiones
t
identifican
de dgitos. La lectura de izquierda a derecha y desde los
U
F
o
n
parntesis externos a los internos, las subexpresiones en la cadena de dgitos son:
1

1. 123
2. 45678
3. 56
4. 78
Puede buscar aquellas subexpresiones con las funciones REGEXP_INSTR y REGEXP_SUBSTR.

Oracle Database: Conceptos Fundamentales de SQL II 7-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Subexpresiones con


el Soporte para Expresiones Regulares
SELECT
REGEXP_INSTR
-- source char or search value
1 ('0123456789',
'(123)(4(56)(78))',
-regular expression patterns
2
-- position to start searching
3 1,
-- occurrence
4 1,
0,
-return option
5
-- match option (case insensitive)
6 'i',
-- sub-expression on which to search
7 1)
"Position"
FROM dual;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Subexpresiones con elle
Soporte para Expresiones Normales
N
b
a
O
REGEXP_INSTRI y REGEXP_SUBSTR
tienen un parmetro opcional SUBEXPR que permite
er
C
f
s
A
dirigirse aDuna subcadena
an determinada de la expresin regular que se est evaluando.
r
N
t
U
En
nque muestra la diapositiva, puede que desee buscar el primer patrn de subexpresin
Fel ejemplo
o
n
de la lista de subexpresiones. El ejemplo mostrado identificar varios parmetros para la funcin

REGEXP_INSTR. Este ejemplo es especfico de 11g versin R2 de Oracle Database.


1. Se identifica la cadena que est buscando.
2. Se identifican las subexpresiones. La primera subexpresin es 123. La segunda subexpresin es
45678, la tercera 56 y la cuarta 78.
3. El tercer parmetro identifica desde qu posicin iniciar la bsqueda.
4. El cuarto parmetro identifica la incidencia del patrn que desea buscar. 1 significa buscar la
primera incidencia.
5. El quinto parmetro es la opcin de devolucin. Se trata la posicin del primer carcter de la
incidencia. (Si especifica 1, se devuelve la posicin del carcter que sigue a la incidencia).
6. El sexto parmetro identifica si la bsqueda debe ser sensible a mayscula y minsculas.
7. El ltimo parmetro es el parmetro agregado en Oracle Database 11g. Este parmetro
especifica la subexpresin que desea buscar. En el ejemplo mostrado, est buscando la primera
subexpresin, que es 123.

Oracle Database: Conceptos Fundamentales de SQL II 7-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Por qu Acceder a la n Subexpresin?

Un uso ms realista: secuenciacin de ADN


Es posible que necesite buscar un subpatrn que
identifique una protena necesaria para la inmunidad
en el ADN del ratn.
SELECT
REGEXP_INSTR('ccacctttccctccactcctcacgttctcacctgtaaagcgtccctc
cctcatccccatgcccccttaccctgcagggtagagtaggctagaaaccagagagctccaagc
tccatctgtggagaggtgccatccttgggctgcagagagaggagaatttgccccaaagctgcc
tgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagttttca
ccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagag
gctcttgggtctgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggc
atgtaggggcgtggggatgcgctctgctctgctctcctctcctgaacccctgaaccctctggc
taccccagagcacttagagccag',

a
s
a
)h
g
r
'(gtc(tcac)(aaag))',
o e
a
1, 1, 0, 'i',
s
de Guid
1) "Position"
y
o
FROM dual;
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Por qu Acceder a la P
n Subexpresin?
l
bque
a
ONesfposible
r
En ciencias deC
la Ivida,
necesite extraer los desplazamientos de las coincidencias de
e
s
A
subexpresiones
de una
secuencia de ADN para un procesamiento posterior. Por ejemplo, puede que
ansecuencia
r
NDbuscar
t
tenga
que
una
de protenas especfica, como el desplazamiento inicial de la
U
n
F
o
n
secuencia de ADN precedida por gtc y seguida por tcac y por aaag. Para cumplir este objetivo,

puede utilizar la funcin REGEXP_INSTR, que devuelve la posicin en la que se encuentra una
coincidencia.
En el ejemplo de la diapositiva, se devuelve la posicin de la primera subexpresin (gtc). gtc
aparece a partir de la posicin 195 de la cadena de ADN. Este ejemplo es especfico de 11g R2
versin de Oracle Database.
Si modifica el ejemplo de la diapositiva para buscar la segunda subexpresin (tcac), la consulta da
como resultado la siguiente salida. tcac aparece a partir de la posicin 198 de la cadena de ADN.

Si modifica el ejemplo de la diapositiva para buscar la tercera subexpresin (aaag), la consulta da


como resultado la siguiente salida. aaag aparece a partir de la posicin 202 de la cadena de ADN.

Oracle Database: Conceptos Fundamentales de SQL II 7-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

REGEXP_SUBSTR: Ejemplo

SELECT
REGEXP_SUBSTR
1 ('acgctgcactgca', -- source char or search value
2 'acg(.*)gca',
-- regular expression pattern
3 1,
-- position to start searching
4 1,
-- occurrence
-- match option (case
5 'i',
insensitive)
6
1)
-- sub-expression
"Value"
FROM dual;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
REGEXP_SUBSTR: Ejemplo
P
N rabl
Odiapositiva:
En el ejemplo C
deIla
A ansesfeel origen que se va a buscar.
1. acgctgcactgca
D
N n-tr es el patrn que se va a buscar. Busque acg seguido de gca con los caracteres
F2.Uacg(.*)gca
no entre acg y gca.
potenciales
3.
4.
5.
6.

Inicie la bsqueda en el primer carcter del origen.


Busque la primera incidencia del patrn.
Utilice una coincidencia no sensible a maysculas y minsculas en el origen.
Utilice un valor entero no negativo que identifique la n subexpresin a la que se va a dirigir. Se
trata de un parmetro de subexpresin. En este ejemplo, 1 indica la primera subexpresin. Puede
utilizar un valor de 0-9. Un cero significa que no se ha dirigido ninguna subexpresin. El valor
por defecto de este parmetro es 0.
Este ejemplo es especfico de 11g versin R2 de Oracle Database.

Oracle Database: Conceptos Fundamentales de SQL II 7-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Introduccin a expresiones regulares


Uso de metacaracteres con expresiones regulares
Uso de funciones de expresiones regulares:

REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR

Acceso a subexpresiones
Uso de la funcin REGEXP_COUNT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL II 7-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin REGEXP_COUNT


REGEXP_COUNT (source_char, pattern [, position
[, occurrence [, match_option]]])
SELECT REGEXP_COUNT(
'ccacctttccctccactcctcacgttctcacctgtaaagcgtccctccctcatccccatgcccccttaccctgcag
ggtagagtaggctagaaaccagagagctccaagctccatctgtggagaggtgccatccttgggctgcagagagaggag
aatttgccccaaagctgcctgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagtt
ttcaccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagaggctcttgggtc
tgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggcatgtaggggcgtggggatgcgctctg
ctctgctctcctctcctgaacccctgaaccctctggctaccccagagcacttagagccag',

a
s
a
)h
FROM dual;
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin REGEXP_COUNT
P
N raevala
bl cadenas mediante caracteres como define el juego de caracteres
O
La funcin REGEXP_COUNT
I
fe que indica el nmero de incidencias del patrn. Si no se encuentra
AC anunsentero
de entrada.
Devuelve
D
N n-tr la funcin devuelve 0.
ninguna
FU coincidencia,
no de la diapositiva, el nmero de incidencias de una subcadena de ADN se determina
En el ejemplo
'gtc') AS Count

mediante la funcin REGEXP_COUNT. Este ejemplo es especfico de 11g versin R2 de Oracle


Database.
El siguiente ejemplo muestra que el nmero de veces que se produce el patrn 123 en la cadena
123123123123 es tres veces. La bsqueda se inicia a partir de la segunda posicin de la cadena.
SELECT REGEXP_COUNT
('123123123123', -- source char or search value
'123',
-- regular expression pattern
2,
-- position where the search should start
'i')
-- match option (case insensitive)
As Count
FROM dual;

Oracle Database: Conceptos Fundamentales de SQL II 7-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Expresiones Regulares
y Restricciones de Control: Ejemplos
ALTER TABLE emp8
ADD CONSTRAINT email_addr
CHECK(REGEXP_LIKE(email,'@')) NOVALIDATE;

INSERT INTO emp8 VALUES


(500,'Christian','Patel','ChrisP2creme.com',
1234567890,'12-Jan-2004','HR_REP',2000,null,102,40);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Expresiones Regulares y Restricciones
de Control: Ejemplos
le
N
b
a
O
Las expresiones regulares
r se pueden utilizar en restricciones CHECK. En este ejemplo, se
CI nCHECK
fetambin
s
A
agrega una
restriccin
en la columna EMAIL de la tabla EMPLOYEES. Esto garantiza que
D tra
N
-las cadenas que contengan el smbolo @. Se prueba la restriccin. Se viola la
slo
Use aceptan
n
F
o
n
restriccin CHECK porque la direccin de correo electrnico no contiene el smbolo necesario. La
clusula NOVALIDATE garantiza que no se comprueban los datos existentes.
En el ejemplo de la diapositiva, la tablaemp8 se crea mediante el siguiente cdigo:
CREATE TABLE emp8 AS SELECT * FROM employees;

Nota: el ejemplo de la diapositiva se ejecuta mediante la opcin Execute Statement en SQL


Developer. El formato de salida es diferente si utiliza la opcin Run Script.

Oracle Database: Conceptos Fundamentales de SQL II 7-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Con el uso de las expresiones regulares en SQL y PL/SQL,
puede:
1. Evitar el procesamiento complejo de cadenas del juego de
resultados de SQL mediante aplicaciones de nivel medio
2. Evitar la lgica de validacin de datos en el cliente
3. Aplicar restricciones en el servidor

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuestas: 1, 2, 3
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL II 7-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido a utilizar expresiones
regulares para buscar, hacer coincidir y sustituir cadenas.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
I
En esta leccin,
aprender
ea rutilizar las funciones de soporte de expresiones regulares. El soporte de
C
f
s
A
expresiones
anest disponible en SQL y PL/SQL.
r
ND regulares
t
U
F non

Oracle Database: Conceptos Fundamentales de SQL II 7-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 7: Visin General


Esta prctica trata el uso de funciones de expresiones
regulares para realizar las siguientes tareas:
Buscar, sustituir y manipular datos
Crear una nueva tabla CONTACTS y agregar una
restriccin CHECK a la columna p_number para garantizar
que se introducen los nmeros de telfono en la base de
datos en un formato estndar especfico
Probar la adicin de algunos nmeros de telfono en la
s
a
columna p_number mediante varios formatos
h
)

rg
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
A Todos
SOracle.
o
Copyright 2010,
los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 7: Visin General
le
N
b
a
O
En esta prctica,
funciones
regulares para buscar, sustituir y manipular datos.
er de expresiones
CIutilice
f
s
A
Cree tambin
una
nueva
tablaCONTACTS
y
agregue
una restriccin CHECK a la columna
D tran
N
p_number
U opara
n- garantizar que se introducen los nmeros de telfono en la base de datos en un
F
n
formato estndar especfico.

Oracle Database: Conceptos Fundamentales de SQL II 7-27

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t