Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Fundacin Proydesa
s
a
h
rg)
o
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
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
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
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
iv
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
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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-
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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:
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Significado
BETWEEN
...AND...
IN(set)
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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)
COUNT({*|[DISTINCT|ALL]expr})
MAX([DISTINCT|ALL]expr)
MIN([DISTINCT|ALL]expr)
STDDEV([DISTINCT|ALL]n)
SUM([DISTINCT|ALL]n)
VARIANCE([DISTINCT|ALL]n)
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Revisin de Subconsultas
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 );
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Descripcin
INSERT
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
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
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Administrador de
base 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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Privilegios
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
DROP USER
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
CREATE SEQUENCE
CREATE VIEW
CREATE PROCEDURE
En la sintaxis:
privilege
user
|role|PUBLIC
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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.
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Crear un rol:
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Cambio de Contrasea
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Privilegios de Objeto
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
GRANT
ON
TO
select
employees
demo;
GRANT
ON
TO
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
GRANT
ON
TO
WITH
select, insert
departments
demo
GRANT OPTION;
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Descripcin
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
USER_ROLE_PRIVS
USER_SYS_PRIVS
USER_TAB_PRIVS_MADE
USER_TAB_PRIVS_RECD
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
s
a
h
rg)
o
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Adicin de Columnas
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Modificacin de Columnas
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
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).
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Clusula ON DELETE
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.
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
INITIALLY IMMEDIATE
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.
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);
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));
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Borrado de Restricciones
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Desactivacin de Restricciones
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Activacin de Restricciones
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Restricciones en Cascada
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));
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;
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);
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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));
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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));
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Eliminacin de ndices
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
Nota: si borra una tabla, los ndices, restricciones y disparadores se borran automticamente, pero
permanecen las vistas y secuencias.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
s
a
h
rg)
o
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;
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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
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
directory
'path_name'
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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' ;
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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' ;
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
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
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
s
a
h
rg)
o
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Objetivo
USER
ALL
DBA
V$
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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%';
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Vista USER_OBJECTS
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
s
a
h
rg)
o
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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).
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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).
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Consulta de USER_CONS_COLUMNS
DESCRIBE user_cons_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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
s
a
h
rg)
o
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
DESCRIBE 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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Confirmacin de Secuencias
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
USER_INDEXES: Ejemplos
a
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));
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);
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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)
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
s
a
h
rg)
o
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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 '';
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional
s
a
h
Fusin de Filas en una Tabla
rg)
o
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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;
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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');
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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'
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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');
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:
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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;
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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:
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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-
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional
s
a
h
Fusin de Filas en una Tabla
rg)
o
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Sentencia MERGE
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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 |
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
INSERT incondicional
INSERT mediante giro
INSERT ALL condicional
INSERT FIRST condicional
s
a
h
Fusin de Filas en una Tabla
rg)
o
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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
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
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
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).
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
DBTIMEZONE y SESSIONTIMEZONE
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'
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Tipo de Dato
Campos
TIMESTAMP
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Campos TIMESTAMP
Campo Datetime
Valores Vlidos
YEAR
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
-- when hire_date is
of type DATE
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Campos INTERVAL
Campo INTERVAL
YEAR
MONTH
de 00 a 11
DAY
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Devuelve un error porque la precisin por defecto es 2 y 123 tiene tres dgitos.
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
EXTRACT
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]);
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
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.
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:
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.
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:
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)
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Horario de Verano
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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-
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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
SELECT
column, column, ...
FROM table
WHERE(column, column, ...) IN
(SELECT column, column, ...
FROM
table
WHERE condition);
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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:
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
s
a
h
rg)
o
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Clusula WITH
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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:
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Resumen
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Descripcin
REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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).
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Descripcin
{m}
{m, }
{m,n}
s
a
h
g)
r
o
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
Descripcin
\n
\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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Condiciones y Funciones
de Expresiones Regulares: Sintaxis
REGEXP_LIKE
REGEXP_INSTR
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]]]])
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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]]]])
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
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:]]+ .
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Subexpresiones
Examine esta expresin:
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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.
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
Agenda
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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
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;
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;
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
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
Fundacin Proydesa
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates
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.
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