Professional Documents
Culture Documents
Para tener acceso a cualquier manejador de base de datos relacional, y para efectuar
cualquier operacin sobre los datos almacenados en la base de datos, es necesario el
uso de SQL (Structured Query Language - Lenguaje de Consultas Estructuradas) como
lenguaje intermediario.
SQL es un lenguaje no procedimental, el cual se caracteriza, por no requerir (de parte del
desarrollador), informacin sobre la ubicacin fsica de los archivos, ni de la distribucin
de los datos, es decir, al momento de efectuar una operacin cualquiera sobre la base de
datos, no es necesario indicar la ruta de acceso o PATH, ya que de esto se encargar el
manejador de la base de datos al momento de la creacin de las tablas. Otra de las
caractersticas de este lenguaje, es la de acceder a mltiples registros a la vez, con el
uso de una sola instruccin, sin importar si estos registros pertenecen a una o varias
tablas.
Para que los usuarios y programadores puedan tener acceso a SQL, ORACLE
ofrece un conjunto de herramientas desde las cuales se pueden ejecutar comandos
de SQL. Entre estas instrumentos tenemos Oracle SQL Developer es una
herramienta grfica gratuita diseada para simplificar las interaccinoes con la base
de datos. Con slo unos pocos clics, se pueden crear y depurar fcilmente
procedimientos almacenados, probar sentencias SQL y ver planes de optimizacin.
Vista: Es un objeto de la base de datos que muestra una representacin lgica de una o
varias tablas. Esta se deriva de una tabla pero no tiene su propio almacenamiento. Su
manejo es similar al de una tabla.
Join: Es una condicin de enlace en una consulta, la consulta est compuesta por datos
extrados de dos o ms tablas o vistas, gobernadas por la condicin.
DATE: Puede almacenar valores de tipo fecha y de tipo hora; las fechas van desde el
1ero de enero de 4.712 antes de Cristo, al 31 de diciembre de 4.712 despus de Cristo.
LONG : Similar a CHAR, pero puede almacenar 65.535 bytes de longitud. Este campo
tiene algunas restricciones:
NUMBER: Es un valor numrico, representado por uno o mas dgitos que van del cero
(0) al nueve (9), con los signos opcionales positivo (+), negativo (-) y punto decimal (.). El
mximo valor de NUMBER puede tener 38 dgitos.
En las secciones siguientes, se exponen varios ejemplos con la finalidad de ilustrar los
conceptos tericos expuestos en cada seccin. Los nombres de campos, tipos de datos y
los resultados presentados en algunos de ellos son extrados de tablas de ejemplo
predefinidas. La estructura y el contenido de estas tablas se muestra a continuacin:
Creando conexiones
1. En la pestaa de conexiones, presionamos botn de la derecha del mouse
sobre Connections y seleccionamos New Connection.
2. Aparece una ventana titulada New/Select Database Connection, all se
ingresan diferentes datos, tales como, el nombre de la conexin, el usuario y
password del esquema que usaremos para conectarnos. De igual forma
debemos llenar otros datos, tales como:
a. Role: hacemos uso de SYSDBA o default.
Nota: no siempre ste comando se encuentra disponible, ya que esto depender del
criterio del Administrador de la base de datos.
Utilizando el comando HELP, se pueden listar todos los comandos de SQL y SQL*Plus o
un comando en particular, para listar todos los comandos utilizamos la instruccin:
CLEAR: Limpia o borra el valor o seleccin en curso para una opcin especfica.
Forma abreviada: CL
Sintaxis: CLEAR Opcin
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
Texto_n (aceptar comando)
(aceptar nuevamente para concluir la adicin de lneas al buffer)
SELECT : Esta sentencia muestra una o ms filas de datos, con sus respectivas
columnas, las cuales pueden ser extradas de una o ms tablas, vistas o sinnimos. El
nmero de columnas a visualizar puede ser total o parcial.
Columnas: son los nombres de todas aquellas columnas que se desean visualizar,
debern estar separadas por una coma (,). Si se desean visualizar todas las columnas de
la tabla, se podr abreviar la operacin, colocando en lugar de los nombres de las
columnas, un asterisco (*). Adicionalmente se puede usar como columnas de
visualizacin constantes, operaciones aritmticas, funciones, nidos de funciones y
funciones de grupo.
Origen _ datos: son los nombres de todas aquellas tablas, vistas o sinnimos de los
cuales se desea extraer la informacin, los cuales debern estar separados por una
coma (,) y tener un alias.
Como se dijo anteriormente se pueden visualizar de forma total o parcial las columnas de
una tabla. Para realizar la seleccin parcial se deben listar los nombres de columnas que
se desea mostrar separadas por una coma.
Sintaxis: SELECT columna1, columna2, ... , columna-n
FROM Origen_datos;
Sintaxis: SELECT *
FROM tabla;
20
A continuacin se muestra un ejemplo de aplicacin:
SQL> SELECT *
2 FROM EMPLEADO;
O P E R AC I O N E S A R I T M T I C AS E N U N A C O N S U L T A
El orden de precedencia establecido puede cambiarse utilizando parntesis "( )", para
indicar la precedencia deseada.
21
En el siguiente ejemplo se ilustra la forma de efectuar una operacin aritmtica en
una consulta:
E L I M I N AN D O V A L O R E S D U P L I C A D O S - L A C L U S U L A D I S T I N C T
Esta clusula forma parte de la instruccin SQL y sirve para eliminar valores
repetidos en una consulta, la sintaxis es la siguiente:
Ejemplo 4: Realizar una consulta de todos los cargos que posee la empresa, sin
repetir ningn cargo.
CARGO
---------------------------
GERENTE
SECRETARIA
....
ANALISTA ADMINISTRATIVO
CHOFER
22
C O N S U L T AN D O L A E S T R U C T U R A DE UN OBJETO - EL
CO M ANDO DE SCRI BE
Este comando permite visualizar la estructura de una tabla o vista y las restricciones
asociadas a los datos que almacenar. Indica los nombres, tipo y tamao de las
columnas que conforman el objeto, y muestra adems las columnas que pueden estar
vacas al momento de almacenar una fila de datos y cuales no deben estarlo.
Si al momento de manipular una tabla o vista, no recuerda los nombres de las columnas
o las caractersticas de estas, se puede hacer uso del comando DESCRIBE para obtener
la informacin.
Ejemplo 5:
23
ALI AS O NOMBRE SUSTI TUTO
Ejemplo 6: Realizar una consulta del campo NOMBRE de la tabla EMPLEADO, que
permita etiquetar la columna NOMBRE con el rtulo NOMBRE DEL
TRABAJADOR
NOMBRE DE TRABAJADOR
--------------------
FRANCISCO MONTERO
LAURA MONTILLA
MARIA PEREZ
LUIS CARRILLO
CARLOS FERNANDEZ
JOSE PERALES
LUIS PERNIA
LEONOR PEREZ
JOSE LOPEZ
MARIA BLANCO
24
Ejemplo 7: Realizar la misma consulta de (8) rotulando la columna NOMBRE con la
etiqueta NOM
NOM
--------------------
FRANCISCO MONTERO
LAURA MONTILLA
MARIA PEREZ
LUIS CARRILLO
CARLOS FERNANDEZ
JOSE PERALES
LUIS PERNIA
LEONOR PEREZ
JOSE LOPEZ
MARIA BLANCO
NOMBRE BONO
-------------------- ----------
FRANCISCO MONTERO 5000
LAURA MONTILLA 4200
MARIA PEREZ 2000
LUIS CARRILLO 1000
CARLOS FERNANDEZ 1000
JOSE PERALES 2500
LUIS PERNIA 3000
LEONOR PEREZ 3500
JOSE LOPEZ 1000
MARIA BLANCO 2000
25
Seleccin condicionada de filas
La instruccin SELECT puede recuperar, en una sola consulta, mltiples registros o filas,
las cuales pueden provenir de una o ms tablas, pero su verdadera utilidad radica en
poder seleccionar datos que cumplan con una determinada condicin. Para obtener
subconjuntos de datos que cumplan con una o ms condiciones se utiliza la clusula
WHERE, en combinacin con la ya conocida instruccin SELECT ... FROM
En este caso Condiciones contiene las restricciones. Est formada por nombres de
columnas, constantes, expresiones y un operador de comparacin. Las cadenas de
caracteres y las fechas que aparecern en la condicin deben estar encerradas entre
comillas simples () y todos los casos de comparacin de caracteres diferencian los casos
de maysculas y minsculas.
O P E R AD O R E S D E C O M P AR AC I N
26
BETWEEN ... AND ... Entre dos valores (inclusive)
IN ( lista_de_valores ) Igual a uno de los elementos de la lista de valores
LIKE Busca todo lo que cumpla con el patrn de bsqueda
IS NULL Si el valor es nulo
Ejemplo 10 : Realizar una consulta que permita mostrar todos los empleados cuyo
salario este entre 20.000 y 40.000.
SQL> SELECT *
2 FROM EMPLEADO
3 WHERE SALARIO BETWEEN 20000 AND 40000;
Ejemplo 11: Realizar una consulta que permita mostrar todos los empleados que
devengan salarios de 10.000, 11.000 y 20.000
SQL> SELECT *
2 FROM EMPLEADO
3 WHERE SALARIO IN (10000, 11000, 20000);
27
Ejemplo 12 : Realizar una consulta que permita mostrar todos los empleados que
tengan en la segunda posicin de su nombre la letra "A".
SQL> SELECT *
2 FROM EMPLEADO
3 WHERE NOMBRE LIKE '_A%';
O P E R AD O R E S L G I C O S
Ejemplo 13: Realizar una consulta que permita mostrar todos los empleados, que
pertenezcan al departamento 1 y que devenguen un salario mayor de
20000 y el cargo sea GERENTE
SQL> SELECT *
2 FROM EMPLEADO
3 WHERE NUMDEPT = 01
4 AND SALARIO > 20.000
5 AND CARGO = 'GERENTE';
28
El resultado debe ser similar al siguiente:
O P E R AD O R E S D E C O N J U N T O
Ejemplo 16: Realizar una consulta que permita mostrar todos los empleados por
departamento, mostrarlos a partir de las tablas de departamentos
EMP_OPERACIN, EMP_INVESTIGACION.
29
EMPNO NOMBRE CARGO NUMDEPT
--------- -------------------- ---------- ----------
300 MARIA PEREZ SECRETARIA 2
400 LUIS CARRILLO CHOFER 1
500 CARLOS FERNANDEZ CHOFER 2
El resultado ser el siguiente, observe que el empleado LUIS CARRILLO aparece una
sola vez, en lugar de una vez por cada departamento:
EMPNO NOMBRE CARGO NUMDEPT
---------- -------------------- ---------- ----------
100 FRANCISCO MONTERO GERENTE 1
200 LAURA MONTILLA GERENTE 1
300 MARIA PEREZ SECRETARIA 2
400 LUIS CARRILLO CHOFER 1
500 CARLOS FERNANDEZ CHOFER 2
30
Operador INTERSECT: Obtiene como resultado las filas comunes a dos o ms tablas,
eliminando las filas que no pertenecen a todas las tablas a la vez. La siguiente imagen
muestra una representacin grfica del operador INTERSECT (INTERSECCIN).
Ejemplo 17: Realizar una consulta que permita mostrar todos los empleados que
prestan sus servicios en los dos departamentos.
Las consultas individuales sern iguales al ejemplo 5 anterior. Haciendo uso del
operador INTERSECT, la consulta ser:
El resultado ser el siguiente, ntese que solo retorna el empleado LUIS CARRILLO que
presta sus servicios en los dos departamentos:
Operador MINUS: Muestra las filas que pertenecen a la primera consulta y que no
aparecen en la segunda consulta. Es decir recupera las filas de la primera consulta,
recupera las filas de la segunda consulta y elimina tanto las filas comunes como las de la
segunda consulta. La siguiente imagen muestra una representacin grfica del operador
MINUS (MENOS).
31
Ejemplo 18: Realizar una consulta que permita mostrar todos los empleados que
solo prestan sus servicios en el departamento de OPERACIONES.
O P E R AD O R E S D E C O N C AT E N AC I O N
Ejemplo 19: Realizar una consulta que permita mostrar todos los empleados,
mostrando el nombre y el cargo como una sola columna.
NOMBRE Y CARGO
------------------------------------------
FRANCISCO MONTEROGERENTE
LAURA MONTILLAGERENTE FINANCIERO
MARIA PEREZSECRETARIA
LUIS CARRILLOCHOFER
CARLOS FERNANDEZCHOFER
JOSE PERALESANALISTA CONTABLE
LUIS PERNIAANALISTA ADMINISTRATIVO
LEONOR PEREZGERENTE OPERACIONES
JOSE LOPEZCHOFER
MARIA BLANCOSECRETARIA
32
C AD E N AS D E C A R AC T E R E S L I T E R AL E S
Ejemplo 20: Realizar una consulta que permita mostrar todos los empleados,
mostrando el nombre y el cargo como una sola columna, colocando el literal se
desempea como.
NOMBRE Y CARGO
------------------------------------------------------------------
FRANCISCO MONTERO SE DESEMPEA COMO GERENTE
LAURA MONTILLA SE DESEMPEA COMO GERENTE FINANCIERO
MARIA PEREZ SE DESEMPEA COMO SECRETARIA
LUIS CARRILLO SE DESEMPEA COMO CHOFER
CARLOS FERNANDEZ SE DESEMPEA COMO CHOFER
JOSE PERALES SE DESEMPEA COMO ANALISTA CONTABLE
LUIS PERNIA SE DESEMPEA COMO ANALISTA ADMINISTRATIVO
LEONOR PEREZ SE DESEMPEA COMO GERENTE OPERACIONES
JOSE LOPEZ SE DESEMPEA COMO CHOFER
MARIA BLANCO SE DESEMPEA COMO SECRETARIA
O P E R AD O R Q
Ejemplo 21: Realizar una consulta que permita mostrar el nombre del departamento
y su ubicacin, con el literal q esta ubicado en.
33
SQL> SELECT NOMBRE || q'[ Q' ESTA UBICADO EN: ]'||UBICACION
2 FROM DEPARTAMENTO;
NOMBRE||Q'[Q'ESTAUBICADOEN:]'||UBICACION
------------------------------------------------
INVESTIGACION Q' ESTA UBICADO EN: CARACAS
VENTAS Q' ESTA UBICADO EN: CARACAS
ADMINISTRACION Q' ESTA UBICADO EN: CARACAS
C O N S I D E R AC I O N E S AL E S C R I B I R S E N T E N C I AS S Q L
34
Captulo 2
FUNCIONES DE SQL
35
ORDENAMIENTO DE DATOS
Cuando se ejecuta una consulta, el orden en que se muestran las filas de datos es
indefinido. Pero en muchas ocasiones, es necesario mostrar la informacin ordenada por
una o ms columnas, ya sea de forma ascendente o descendente. Cuando se desea
obtener informacin ordenada en una consulta se utiliza la clusula ORDER BY.
Ejemplo 22: Realizar una consulta que permita mostrar los datos de todos los
empleados del departamento 1. Donde el campo CARGO est
ordenado en forma descendente y el campo NOMBRE est ordenados
de manera ascendente.
SQL> SELECT *
2 FROM EMPLEADO
3 WHERE NUMDEPT = 01
4 ORDER BY CARGO DESC, NOMBRE ASC;
36
El resultado debe ser el siguiente, ntese el ordenamiento:
Ejemplo 23: Realizar una consulta que permita mostrar la tabla empleados ordenada
por la segunda columna, y con las columnas en el siguiente orden
NOMBRE, SALARIO, CARGO
37
AGRUPAMIENTO DE DATOS
Aparte de ordenar la informacin obtenida, en muchas ocasiones es necesario obtener
algunas medidas para una porcin particular de datos, como son por ejemplo totales,
promedios, conteo de registros, etc. Es aqu donde se origina el concepto de grupo. Para
agrupar un conjunto de datos similares, se utiliza la clusula GROUP BY inmersa en la
consulta que se est ejecutando.
Funciones de grupo
Para usar la clusula GROUP BY es necesario, que el o los nombres de las columnas
que aparecen en la sentencia SELECT hayan sido especificadas en la sentencia GROUP
BY, o en su defecto poseer alguna de las funciones de agrupamiento indicadas a
continuacin:
Funcin de Utilidad
Grupo
SUM(n) Retorna la sumatoria de los valores de la columna "n"
COUNT(n) Retorna el nmero de filas que tiene la columna "n", ignorando
valores nulos
MAX(n) Retorna el mximo valor de la columna "n"
MIN(n) Retorna el mnimo valor de la columna "n"
AVG(n) Retorna el promedio (average) de la columna "n", ignorando valores
nulos
En la clusula GROUP BY deben aparecer, separadas por comas, todas las columnas
que no estn como argumento de una funcin de grupo. Ntese que se puede utilizar un
alias para etiquetar el resultado de la funcin de grupo.
38
Ejemplo 24: Realizar una consulta que permita mostrar una lista de todos los cargos
que existen. Debe listarse el CARGO y la CANTIDAD de empleados
con el cargo existentes.
CARGO CANTIDAD
-------------------------------------------------- ----------
GERENTE 1
SECRETARIA 2
ANALISTA CONTABLE 1
GERENTE OPERACIONES 1
GERENTE FINANCIERO 1
ANALISTA ADMINISTRATIVO 1
CHOFER 3
De la misma manera que se usa la clusula WHERE para excluir o filtrar datos, podemos
utilizar la clusula HAVING para restringir grupos en una consulta. Esta instruccin solo
puede usarse en combinacin con la sentencia GROUP BY, excepto cuando solo se usa
la funcin de grupo, en cuyo caso no existe la clusula GROUP BY.
39
En este caso Condicion_de_grupo, es una expresin que, usando una funcin de grupo
permitir seleccionar los datos que cumplan con la condicin especificada. Esta es la
forma mas completa de la sentencia de seleccin de datos en SQL*Plus.
CARGO CANTIDAD
-------------------------------------------------- ----------
GERENTE 1
ANALISTA CONTABLE 1
GERENTE OPERACIONES 1
GERENTE FINANCIERO 1
ANALISTA ADMINISTRATIVO 1
40
OTRAS FUNCIONES DE SQL
En las secciones anteriores, se pudo apreciar que el poder de las sentencias de SQL se
ve incrementado grandemente, al permitir la inclusin en las consultas de operaciones
aritmticas y funciones de grupo las cuales permiten obtener resultados, clasificarlos y
organizarlos de acuerdo a criterios lgicos. Adicionalmente, SQL incluye una amplia
variedad de funciones numricas y de tratamiento de caracteres que lo hacen an ms
poderoso, ms sencillo de entender y ms fcil de utilizar, aun cuando el usuario no sea
un programador, ni posea amplios conocimientos de informtica.
La siguiente tabla muestra una breve resea de las funciones mas utilizadas de SQL:
Funciones Numricas
Funciones Utilidad
Numricas
41
GREATEST(n, m) Retorna el mayor entre "n" y "m"
En este caso "n" y "m" son valores de tipo fecha y hora (segn el caso), "c" es un valor de
tipo caracter.
Funciones de Caracteres
Funciones de Utilidad
carcter
INITCAP(c1) Retorna la primera letra de cada palabra del contenido de "c1"
en maysculas, y todas las dems letras en minsculas
UPPER(c1) Retorna el contenido de "c1" en maysculas
LOWER(c1) Retorna el contenido de "c1" en minsculas
SUBSTR(c1, n1, n2) Extrae del contenido de "c1", "n2" caracteres, partiendo desde
la posicin "n1"
LENGTH(c1) Retorna el nmero de caracteres del contenido de "c1"
LPAD(c1, n1,[c2]) Muestra el contenido de c1, colocando por el lado izquierdo los
42
caracteres "c2" tantos como sean necesarios para completar la
longitud "n1". Si "c2" no existe, se tomar por defecto espacios
en blanco
RPAD(c1, n1,[c2]) Muestra el contenido de c1, colocando por el lado derecho los
caracteres "c2" tantos como sean necesarios para completar la
longitud "n1". Si "c2" no existe, se tomar por defecto espacios
en blanco
REPLACE(c1, c2, Se busca "c2" en el contenido de "c1", si es encontrada, se
[c3]) sustituye por "c3", de lo contrario la funcin devolver NULL. Si
no se especifica "c3", y "c2" es encontrada en "c1", por defecto
se borrar
TRANSLATE(c1,c2, Se busca "c1", carcter a carcter en el contenido de "c2", si el
c3) carcter es encontrado, se sustituye por el correspondiente
carcter de "c3" en la cadena "c1", de lo contrario no tendr
ningn efecto sobre "c1". Ejemplo: TRANSLATE('HOLA',
'AHOL', 'OCHA') Resultado de la ejecucin: CHAO.
En la tabla anterior "c1", "c2" y "c3" son valores de tipo carcter, los cuales pueden
ser un nombre entre comillas, o un nombre de columna. "n1" y "n2" son valores
numricos.
Funciones de Utilidad
conversin
Convierte un valor de tipo fecha, hora o numrico "d", a un
valor de tipo char, pudiendo especificar opcionalmente un
formato "f". Si no se especifica el formato "f", se tomar el
TO_CHAR(d, [f]) formato por defecto de la instalacin.
La funcin de TO_CHAR, es cambiar la forma de visualizacin
del dato "d" al formato "f"
TO_DATE(c, [f]) Convierte el contenido de "c", a un valor de tipo fecha u hora,
pudiendo especificar opcionalmente un formato "f". Si no se
especifica el formato "f", por defecto se tomar "DD-MON-YY"
TO_NUMBER(c) Convierte el contenido de "c", a un valor de tipo numrico.
Se asume que "c" contiene caracteres numricos
Conversin entre dos diferentes implementaciones de una
misma seleccin de caracteres, ejemplo: de caracteres
CONVERT(c, set1, multilenguaje DEC8 bit a caracteres multilenguaje HP 8 bit. "c"
43
set2) es el carcter a convertir. "set1", es la seleccin de caracteres
destino. "set2" es la seleccin de caracteres fuente. Ejemplo:
Select CONVERT('A B C D E ', 'US7ASCII',
'WE8ISO8859P1') from dual; devuelve 'A B C D E A E I ? ?'
CAST ( [ Expression | La funcin CAST convierte un valor de un tipo de datos a otro
NULL | ? ] AS y proporciona un tipo de datos a un parmetro dinmico (?) O
Datatype) un valor NULL. Ejemplo: SELECT CAST('22-OCT-1997' AS
TIMESTAMP WITH LOCAL TIME ZONE) FROM dual; esto
devuelve 22-OCT-97 12.00.00.000000 AM
En la tabla anterior "d" es un valor de tipo fecha u hora, "n" es un valor de tipo
numrico, "c" es un valor de tipo carcter y "f" es un modelo de formato.
Funciones Varias
44
Juego de caracteres multilenguaje ms comunes
45
Formatos de fecha ms utilizados
Formato Significado
YYYY Los cuatro dgitos del ao
YYY Los ltimos tres dgitos del ao
YY Los ltimos dos dgitos del ao
Y El ltimo dgito del ao
MM Nmero del mes (del 1 al 12)
MON Nombre del mes (abreviado a 3 letras)
MONTH Nombre del mes, acompaado de un mximo de 9 caracteres en
blanco
D Das de la semana (del 1 al 7)
DD Das del mes (del 1 al 31)
DDD Das del ao (del 1 al 366)
MI Minutos
SS Segundos
Ejemplo 26: Elaborar una consulta que permita mostrar el nmero de departamento,
el salario ms alto, el salario promedio y el total de salarios por
departamento, visualizar la informacin de la siguiente manera:
DEPARTAMENTO, MAXIMO SALARIO, SALARIO PROMEDIO, TOTAL
SALARIO
46
El resultado debe ser el siguiente:
Ejemplo 27: Elaborar una consulta que permita mostrar la cantidad de empleados,
que devengan salarios: Menores o iguales a 15.000, entre 15.001 y
20.000, superiores a 20.000. Esto se realizar para todos aquellos
departamentos que tengan ms de 1 empleado.
Ejemplo 28: Elaborar una consulta que permita mostrar por cada departamento lo
que se cancela en total por concepto de salarios y el salario promedio
por departamento.
47
El resultado debe ser el siguiente :
48
1 FRANCISCO MONTERO 01/01/1990
1 LUIS CARRILLO 01/01/2000
2 JOSE LOPEZ 01/03/1990
2 LEONOR PEREZ 01/01/1990
2 MARIA BLANCO 01/01/1990
4 CARLOS FERNANDEZ 01/01/1999
4 JOSE PERALES 15/09/2000
4 LAURA MONTILLA 01/01/1990
4 LUIS PERNIA 01/03/2000
4 MARIA PEREZ 01/01/1998
Ejemplo 29: Realizar una consulta que permita concatenar el string EMPLEADO
antes del NOMBRE de cada empleado y concatenar el string Fecha de
Ingreso antes de la FECHA DE INGRESO, obtener adems el
departamento y ordenar los datos por DEPARTAMENTO.
DEPARTAMENTO 'ELEMPLEADO'||NOMBRE||'INGRESOEL'||TO_CHAR(FINGRESO)
------------ -----------------------------------------------------
1 El Empleado FRANCISCO MONTERO Ingreso el 01-JAN-90
1 El Empleado LUIS CARRILLO Ingreso el 01-JAN-00
2 El Empleado JOSE LOPEZ Ingreso el 01-MAR-90
2 El Empleado LEONOR PEREZ Ingreso el 01-JAN-90
2 El Empleado MARIA BLANCO Ingreso el 01-JAN-90
4 El Empleado CARLOS FERNANDEZ Ingreso el 01-JAN-99
4 El Empleado JOSE PERALES Ingreso el 15-SEP-00
4 El Empleado LAURA MONTILLA Ingreso el 01-JAN-90
4 El Empleado LUIS PERNIA Ingreso el 01-MAR-00
4 El Empleado MARIA PEREZ Ingreso el 01-JAN-98
Ejemplo 30 : Realizar una consulta que permita escribir en letras el NUMERO DEL
DEPARTAMENTO para los departamentos 10 y 20, para el resto de los
departamentos colocar el literal OTRO DEPARTAMENTO, visualizar
49
en la consulta los campos NUMERO DE DEPARTAMENTO, NOMBRE
DE EMPLEADO y EL LITERAL.
Ejemplo 31: Realizar una consulta que permita obtener en el primer campo, el
nombre del departamento, en el segundo campo la subcadena formada
por los caracteres desde el 3 hasta el 7 (ambos inclusive) del campo
nombre del departamento, en la tercera posicin fijar la longitud del
mismo campo a 15 caracteres rellenando con asteriscos los espacios
en blanco a la izquierda, en el cuarto campo se obtendr el mismo caso
anterior pero rellenando con asteriscos los espacios a la derecha.
50
El resultado debe ser el siguiente, ntese los nombres de columna IZQUIERDA y
DERECHA que usan alias y el intervalo de las subcadenas:
En muchas consultas existen columnas que no poseen valor (su contenido es el valor
nulo), cuando esto sucede es probable que el resultado obtenido sea incierto debido a
que los operadores hasta ahora conocidos no tienen efecto sobre valores nulos.
Tambin es posible que se deba identificar en una consulta un valor nulo y convertirlo en
otro para evitar una operacin inadecuada, por ejemplo sustituir por uno un valor cero
durante una divisin, en este caso se utiliza la funcin NVL.
Ejemplo 32 : Elaborar una consulta que permita obtener el nombre de todos aquellos
empleados que no posean jefe
51
NOMBRE JEFE
-------------------- ----------
FRANCISCO MONTERO
LAURA MONTILLA
Ejemplo 33 : Elaborar una consulta que permita combinar las tablas EMPLEADO y
DEPARTAMENTO, visualizar los campos NOMBRE DE
DEPARTAMENTO, NOMBRE DE EMPLEADO, SALARIO y COMISION,
indicando cuando no haya comisin el literal SIN COMISION.
Caso 1 : Sin el uso de alias de tablas en las columnas DEPTNO que tienen el mismo
nombre en las dos tablas. Ntese el error que se genera cuando el
manejador encuentra el nombre de la columna NUMDEPT duplicado.
Caso 2 : Usando los alias de tablas (tabla1, tabla2) en las columnas DEPTNO que
tienen el mismo nombre en las dos tablas. Ntese que el error desaparece,
si en la columna nombre en lugar del alias TABLA1 se coloca TABLA2,
Qu sucedera?
52
PRACTICA 1
De la tabla VENDEDOR
Realizar una consulta que muestre los Nombres y Apellidos de los vendedores que
tienen ventas mayores a 70000.
1.2 Realizar una consulta que muestre los Nombres, Apellidos, Cedula de los
vendedores que tienen ventas menores o igual a 50000.
1.3 Realizar una consulta que muestre la cantidad de vendedores que existen en la
empresa.
1.3.1 Realizar una consulta que muestre la cantidad de ventas por montos realizadas
mayores o iguales 70000 y la cantidad de ventas con montos menores o iguales a
50000.
1.4 A los vendedores que realizaron ventas mayores a 70000 recibirn una comisin
del 20% .
1.5 Realizar una consulta que permita mostrar todos los empleados cuyo salario este
entre 18000 y 38000.
1.6 Realizar una consulta que permita mostrar el nombre de los empleados que tengan
en la segunda posicin n la letra A.
PRACTICA 2
2. - De la tabla DEPORTES
2.1. Realizar una consulta que muestre la Edad, Estatura, Peso y el Deporte de los
estudiantes.
2.2. Realizar una consulta que muestre el Nombre, Deporte, Peso de los alumnos que
tengan una estatura comprendida entre 1.60 y 1.85.
2.3. Realizar una consulta de los deportes que se imparten en la institucin, sin repetir
ningn deporte.
53
2.4. Realizar una consulta que permita mostrar los datos de todos los alumnos que
practiquen bsquetbol, adems ordenar el campo nombre de forma ascendente y el
campo carrera de forma descendente.
2.5. Realizar una consulta que permita mostrar el Nombre, Carrera, Edad, de aquel
deporte en el que la cantidad de alumnos sea menor a 8.
PRACTICA 3
3. De la tabla RECTANGULO
3.1 Realizar una consulta que muestre la longitud, ancho y el rea de aquellos
rectngulos cuyo permetro sea mayor a 24.
PRACTICA 4
4. De la tabla VENDEDOR.
4.1 Realizar una consulta que muestre nombres y apellidos del vendedor, esta
informacin debe aparecer en una columna llamada NOMBRE DEL VENDEDOR,
tambin mostrar las ventas y el salario, si el salario es igual a 110000 colocar en una
columna denominada ESTUDIO DE AUMENTO, la frase NO APLICA, de lo contrario
colocar AUMENTO EN ESTUDIO.
PRACTICA 5
5. De la tabla DEPORTES
5.1 Realizar una consulta que muestre las carrera y los nombres de los estudiantes,
adems se desea sustituir la palabra Informtica por Computacin de la columna
carrera, mostrar solo los 10 primeros caracteres de la carrera y llamar a esta columna
Carreras.
54
Captulo 3
PRECEDENCIAS, SUBSTITUCIN DE
VARIABLES Y SUBQUERIES.
55
PRECEDENCIAS
Orden Operador
1 Aritmeticos
2 Concatenacin
3 Comparacin
4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 Not equal to
7 NOT Condicin lgica
8 AND Condicin lgica
9 Or Condicin logica
Ejemplos sobre las reglas de precedencia:
56
SUBSTITUCION DE VARIABLES
Hasta el momento, todas las sentencias SQL han sido ejecutadas con columnas
predeterminadas, condiciones y sus valores. Pero supongamos, que desea una
consulta que enumere los empleados con varios trabajos y no slo aquellos cuyo
cargo es ANALISTA ADMINISTRATIVO. Una opcin es editar la clusula WHERE
para proporcionar un valor diferente cada vez que ejecute el comando, pero tambin
hay una forma ms sencilla.
De esta forma un mismo query funciona a diferentes usuarios, los cuales suministran
sus propios valores para restringir el intervalo de datos devueltos. Puede incrustar
variables de sustitucin en un archivo de comandos o en una nica sentencia de
SQL. Una variable puede ser pensada como un contenedor en el que los valores se
almacenan temporalmente. Cuando se ejecuta la sentencia, se sustituye el valor
almacenado.
57
En todos los valores a proporcionar para la sentencia SELECT
Ejecute varias veces la siguiente sentencia
SELECT *
FROM EMPLEADO
WHERE EMPNO = &NROEMP
Escriba el comando define y asigne el valor, luego ejecute varias veces la sentencia
DEFINE nombre_variable = valor
SELECT *
FROM EMPLEADO
WHERE EMPNO = & nombre_variable
58
SET VERIFY ON
SELECT *
FROM EMPLEADO
WHERE CARGO = '&VCARGO';
SUBQUERIES
El subquery se convierte en una consulta interna (inner query) que alimenta a una
consulta externa (outer query). La consulta interna devuelve un valor que es utilizado
por la consulta externa. El uso de un subquery es equivalente a realizar dos
consultas secuenciales y utilizar el resultado de la primera consulta como el valor de
bsqueda en la segunda consulta.
Pueden ser muy tiles cuando necesita seleccionar filas de una tabla con una
condicin que depende de los datos de la tabla en s. Se puede colocar el subquery
en varias clusulas SQL, entre las que se incluyen las siguientes:
WHERE
HAVING
FROM
Para trabajar subqueries que arrojan ms de un registro, tenemos los operadores IN,
ALL y ANY.
59
El operador IN realiza la evaluacin tal y como lo hemos visto, basndose en el
conjunto de datos que se proporciona.
El operador ALL, se utiliza para comparar un valor con una lista o los registros
devueltos por un subquery. Debe estar precedido por alguno de estos smbolos =, !=,
>, <, <=, >=.
Suponiendo que los subqueries no devuelvan cero registros, se pueden hacer las
siguientes sentencias para las versiones de lista y subqueries:
"X = ALL (...)": El valor debe coincidir con todos los valores de la lista para
evaluar a TRUE.
"X! = ALL (...)": El valor no debe coincidir con ningn valor de la lista para
evaluar a TRUE.
"X> ALL (...)": El valor debe ser mayor que el valor ms grande de la lista
para evaluar a TRUE.
"X <ALL (...)": El valor debe ser menor que el valor ms pequeo de la lista
para evaluar a TRUE.
"X> = ALL (...)": El valor debe ser mayor o igual que el valor ms grande de
la lista para evaluar a TRUE.
"X <= ALL (...)": El valor debe ser menor o igual que el valor ms pequeo
de la lista para evaluar a TRUE.
Un equivalente al uso de este operador es colocar AND para cada uno de los valores
a evaluar.
El operador ANY, Se utiliza para comparar un valor con una lista o una subconsulta.
Debe ser precedido por =,! =,>, <, <=,> =. Emplear "= any" es lo mismo que emplear
"in".
"X = ANY (...)": El valor debe coincidir con uno o ms valores de la lista para
evaluar a TRUE.
"X! = ANY (...)": El valor no debe coincidir con uno o ms valores de la lista
para evaluar a TRUE.
"X> ANY (...)": El valor debe ser mayor que el valor ms pequeo de la lista
para evaluar a TRUE.
60
"X <ANY (...)": El valor debe ser menor que el valor ms grande de la lista
para evaluar a TRUE.
"X> = ANY (...)": El valor debe ser mayor o igual que el valor ms pequeo de
la lista para evaluar a TRUE.
"X <= ANY (...)": El valor debe ser menor o igual al valor ms grande de la
lista para evaluar a TRUE.
Si una subconsulta devuelve cero filas, la condicin se evala como FALSE, por lo
que no se mostraran registros.
Un equivalente al uso de este operador es colocar OR para cada uno de los valores
a evaluar.
Cuando uno de los valores devueltos por el subquery es un valor nulo, la consulta
completa no devuelve registros.
PRACTICAS CAPITULO 3
1. Realice una consulta que muestre la cedula, nombre, apellido y salario de los
vendedores que en su nombre contenga el valor MARIA o que la cedula no sea
4567890 y tomando en cuenta que el SALARIO sea mayor a 80000;
2. Elabore una consulta que muestre el primer nombre y el primer apellido
concatenado y la longitud de dicha concatenacin, para la tabla vendedores, en
base a un valor que deber ingresar el usuario y que puede ubicarse en cualquier
parte del nombre.
3. Muestre el monto de las ventas truncado, en tres posiciones a la izquierda del
punto que indica decimales, para todos los vendedores.
4. Muestre la fecha de ingreso, y redondee la fecha de ingreso al mes de ingreso y la
cantidad de meses transcurridos entre la fecha de ingreso y la fecha actual, sin
decimales y sin aproximacin.
5. Seleccione la fecha actual del sistema, el ltimo da del mes actual y el prximo
viernes despus del fin de mes actual
61
6. Muestre el redondeo del resto entero de la divisin entre el monto de ventas y la
cantidad de ventas para todos los vendedores que ganen ms de un valor que
suministrara al ejecutar el query, ordenado de forma ascendente.
7. Muestre el nombre unido a literal QUIEN SE DESEMPEA COMO concatenado
al CARGO concatenado con la fecha de ingreso mostrada en fomato digitos para
el dia y ao y el nombre completo del mes. Todo en mayuscula. Si el dia es menor
a 10, no mostrar el 0 delante del digito.
8. Muestre el monto de las ventas en un formato que tenga capacidad para 6 digitos,
de los cuales 2 son decimales, que observa? Corrigalo y coloque el simbolo del
dolar a dicho formato.
9. Muestre el nombre, salario, comisin (donde si es nula deber aparecer 0) y una
columna donde si tiene comisin muestre S y si no tiene Muestre N/A.
10. Muestre el nombre, cargo, salario actual y el salario revisado, basndose en que
para el caso de los choferes deber aumentarles en un 60% y para las secretarias
un 45%, el resto mantendr el salario actual como salario revisado. Haga esto con
una expresin CASE.
11. Haga el mismo query del punto 10 pero utilizando el DECODE.
12. Ejecute un query que use la funcion de grupo COUNT para todos los registros y
otro que utilice el campo comisin para el conteo. Que nota? Explique el por qu.
13. Muestre la cantidad de departamentos en la tabla empleado, sin repetir valores.
14. Genere un producto cartesiano usando las tablas empleado y departamento
15. Utilice el join que elimina el producto cartesiano.
16. Muestre la informacin de los departamentos que no tengan empleados
asociados.
17. Conectado como el usuario HR, realice una consulta que muestre el employee_id
y el job_id actual y anterior, para todos los empleados. Muestre cada empleado
solo una vez por cada tabla. Las tablas a utilizar son EMPLOYEES y
JOB_HISTORY.
18. Haga lo mismo del punto anterior, pero mostrando los empleados tantas veces se
repitan en cada tabla.
62
19. Muestre el employee id y el job id de todos los empleados que actualmente tienen
un cargo igual al anterior (es decir, cambiaron de trabajo pero ahora han vuelto al
mismo cargo que tenian anteriormente).
20. Muestre el employee id de aquellos empleados que no han tenido ningn cambio
de cargo.
21. Usando el operador UNION, muestre el employee id, el job id y el salario de todos
los empleados. Recuerde trabajar con las tablas EMPLOYEES y JOB_HISTORY.
63
64
Captulo 4
MANIPULANDO DATOS
65
Manejando los datos
Sentencia Insert
66
Otra variacin del INSERT, es la sentencia para mltiples tablas, esto inserta
registros derivados de las filas devueltas de la evaluacin de un subquery, en una o
ms tablas.
67
Ejemplo:
INSERT ALL
WHEN HIREDATE < '01-JAN-95' THEN
INTO emp_history VALUES(EMPID,HIREDATE,SAL)
WHEN COMM IS NOT NULL THEN
INTO emp_sales VALUES(EMPID,COMM,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, commission_pct COMM
FROM employees
68
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;
176 6 2000
176 6 3000
176 6 4000
176 6 5000
176 6 6000
Sentencia Merge
69
Con esta sentencia logramos:
Evitar actualizaciones independientes
Aumentar el rendimiento y facilidad de uso
Es til en aplicaciones de data warehousing
La sintaxis es:
MERGE INTO nombre de la table alias
USING (tabla|vista|subquery) alias
ON (condicion del join)
WHEN MATCHED THEN
UPDATE SET
col1 = col1_val,
col2 = col2_val
DELETE WHERE condicion
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values)
Ejemplo:
70
Sentencia UPDATE
Para modificar los valores existentes en una table, trabajamos con la sentencia
UPDATE. Podemos modificar mas de un registro si es necesario. La sintaxis de esta
sentencia es:
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
Ejemplo
UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;
71
El uso de subqueries en la sentencia UPDATE, permite que actualicemos valores
basados en otras tablas.
Sentencia DELETE
Para remover registros existentes en una tabla usamos la sentencia DELETE, para
restringir el borrado debemos condicionar la sentencia. La sintaxis es:
DELETE [FROM] table
[WHERE condition];
Sentencia TRUNCATE
Para eliminar todas las filas de una tabla, dejando la tabla vaca y la estructura de la
tabla intacta, usamos la sentencia TRUNCATE. Esta es una instruccin de lenguaje
de definicin de datos (DDL) en lugar de una instruccin DML; por lo que no se
puede deshacer pues tiene un commit implcito. La sintaxis es:
72
Las transacciones comienzas cuando la primera sentencia DML es ejecutada y
finalizan cuando ocurre uno de los siguientes eventos:
Se ejecuta una sentencia Commit o Rollback
Se ejecuta una sentencia DDL o DCL, pues estas tienen un commit implcito.
El usuario sale de SQL Developer o SQL *Plus
Ocurre una cada del sistema.
73
El SAVEPOINT nos permite deshacer los cambios hasta un punto dado. Para lograr
esto debemos crear un marcador en la transaccin que se esta realizando, usando la
instruccin SAVEPOINT. Luego continuamos realizando nuestras operaciones DML,
si requerimos deshacer cambios realizados, hacemos uso de la sentencia
ROLLBACK al SAVEPOINT que corresponda. La sintaxis es:
SAVEPOINT nombre
ROLLBACK TO SAVEPOINT nombre
74
Despus de hacer un COMMIT:
Los cambios realizados son grabados en la base de datos.
El estado previo de la data es sobreescrito.
Todos los usuarios puedes visualizar los resultados.
Los registros afectados son liberados, permitiendo que estn disponibles para
que otros usuarios los puedan manipular.
Todos los savepoint son borrados.
Si una sentencia DML falla durante la ejecucin, solo esta sentencia es revertida. El
servidor de Oracle implementa un savepoint implcito. Los dems cambios
realizados, se mantienen y quedan a la espera de que el usuario termine la
transaccin explcitamente.
Read consistency
75
antiguos que se estn cambiando y que sobre los cuales an no se ha realizado un
commit, por lo que los mantiene en el segmento undo.
Cuando se realiza una operacin de insercin, actualizacin o eliminacin en la base
de datos, el servidor de Oracle toma una copia de los datos antes de que se cambie
y lo escribe en un segmento undo.
Todos los lectores, excepto el que emiti el cambio, ven la base de datos tal como
exista antes de que comenzaran los cambios; Ellos ven la "instantnea" de los datos
del segmento undo. Esto garantiza que los lectores de los datos leen datos
consistentes que no estn sufriendo cambios.
Al hacer el commit sobre la instruccin DML, el cambio realizado en la base de datos
se vuelve visible para cualquier persona que emita una instruccin SELECT despus
de la confirmacin. El espacio ocupado por los datos antiguos en el archivo de
segmento undo se libera para su reutilizacin.
Si la transaccin se deshace, los cambios se deshacen:
La versin de los datos del segmento undo se escribe de nuevo en la tabla.
Todos los usuarios ven la base de datos tal como exista antes de comenzar la
transaccin.
Puede agregar la palabra clave opcional NOWAIT a la clusula FOR UPDATE para
indicarle al servidor Oracle que no espere si la tabla ha sido bloqueada por otro
usuario. En este caso, el control se devolver inmediatamente a su programa o a su
entorno de SQL Developer para que pueda realizar otro trabajo o simplemente
espere un perodo de tiempo antes de intentarlo de nuevo.
76
Sin la clusula NOWAIT, su proceso se bloquear hasta que la tabla est disponible,
cuando los bloqueos sean liberados por el otro usuario a travs de un COMMIT o
ROLLBACK. La sintaxis es:
PRACTICAS CAPITULO 4
77
Ejecute un insert all condicionado para aquellos casos donde el salario sea
mayor a 50000; inserte en la tabla emp1 sino en la tabla emp2. Los valores
deber buscarlos en la tabla empleado, donde el nmero de empleado sea
menor a 700.
4. Utilice la sentencia Merge para insertar y actualizar los registros de la tabla
emp1, en base a la tabla empleado.
5. Cree una copia de la estructura de la tabla empleado, solo con aquellos
registros que pertenezcan al departamento 1 y luego use una sentencia merge
para actualizar o insertar los registros que corresponda. Usar como base un
query sobre la tabla empleado.
6. Inserte un registro en la tabla empleado donde todos los valores de los
campos sean suministrados por el usuario.
7. Coloque un savepoint, nombrelo s1
8. Actualice el salario a 25000 para aquellos empleados donde el salario sea
menor 22000.
9. Coloque un savepoint, nmbrelo s2
10. Elimine la informacin de la tabla vendedor. Haga una consulta de la tabla.
11. Haga rollback al savepoint s2
12. Haga una consulta de la tabla vendedor
13. Utilizando el esquema HR, Utilizando el esquema HR, muestre el employee id,
salary y comission, donde el job_id sea ST_CLERK y la localizacin del
departamento sea 1500. Bloquee los registros, Ordene por employee id.
78
Captulo 5
TABLAS
79
CREANDO TABLAS
Constraints
80
A continuacin los tipos de constraint:
NOT NULL: especifica que la columna no puede tener valores nulos
UNIQUE: especifica que el valor debe ser nico para todos los registros en la
tabla.
PRIMARY KEY: es el identificador nico para cada registro de la tabla.
FOREIGN KEY: establece una referencia de integridad entre la columna de la
tabla a la que pertenece y la columna de la tabla a la que hace referencia, la
cual debe contener valores que coincidan con los de la otra tabla.
CHECK: especifica una condicin la cual debe cumplirse.
[table_constraint]);
81
Ejemplo:
CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name VARCHAR2(20),
...);
Ejemplo:
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));
82
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(7,2) NOT NULL);
Los constraints UNIQUE, PRIMARY KEY, CHECK y FOREIGN KEY pueden ser
definidos a nivel de columna o de tabla. Ejemplos:
CREATE TABLE dept(
2 deptno NUMBER(2),
3 dname VARCHAR2(14),
4 loc VARCHAR2(13),
5 CONSTRAINT dept_dname_uk UNIQUE,
6 CONSTRAINT dept_deptno_pk PRIMARY KEY,
10 CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99));
83
La opcin ON DELETE SET NULL convierte los registros dependientes en nulos.
84
ALTER TABLE
DROP TABLE
85
La sintaxis es:
DROP TABLE table [PURGE]
Pautas
Todos los datos se eliminan de la tabla.
Todas las vistas y sinnimos permanecen, pero no son vlidas.
Se ejecuta un commit, finalizando cualquier transaccin pendiente.
Slo el creador de la tabla o un usuario con el privilegio DROP ANY TABLE puede
eliminar una tabla.
Nota: Utilice la instruccin FLASHBACK TABLE para restaurar una tabla eliminada,
desde la papelera de reciclaje.
PRACTICAS CAPITULO 5
86
4. Coloque la tabla employees 2 para solo lectura.
5. Inserte un registro en la tabla employees2 de acuerdo a los siguientes valores
(34, 'Grant','Marcie',5678,10). Que ocurre?
6. Coloque la tabla employees2 habilitada para lectura y escritura.
7. Realice el insert del paso 5.
8. Borre la tabla employees2.
87
Captulo 6
CREANDO OTROS OBJETOS
88
VISTAS
Hay dos clasificaciones para las vistas: simples y complejas. La diferencia bsica
est relacionada con las operaciones DML (INSERT, UPDATE y DELETE).
Una vista simple es aquella que:
Deriva datos de una sola tabla
No contiene funciones ni grupos de datos
Puede realizar operaciones DML a travs de la vista
Una visin compleja es aquella que:
Obtiene datos de muchas tablas
Contiene funciones o grupos de datos
No siempre permite operaciones DML a travs de la vista
Para crear una vista, hacemos uso de un subquery. La sintaxis para la creacin de
vistas es:
89
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
90
Reglas para ejecutar operaciones DML en las vistas
Usamos esta opcin para asegurarnos que las operaciones DML realizadas en la
vista permanezcan en el dominio de la vista.
91
Es posible realizar comprobaciones de integridad referencial a travs de las vistas,
pero el uso es muy limitado.
La clusula WITH CHECK OPTION especifica que el INSERT y UPDATE realizados
a travs de la vista no pueden crear registros que la vista no puede seleccionar. Por
lo tanto, permite que las restricciones de integridad y las comprobaciones de
validacin de datos, se apliquen en los datos que se insertan o actualizan. Si se
intenta realizar operaciones DML en filas que la vista no ha seleccionado, se
mostrar un error junto con el nombre de restriccin si se ha especificado.
Ejemplo:
CREATE OR REPLACE VIEW empvu20
AS SELECT *
FROM employees
WHERE department_id = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;
92
Ejemplo:
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT employee_id, last_name, job_id
FROM employees
WHERE department_id = 10
WITH READ ONLY ;
DROP VIEW
Podemos eliminar una vista sin perder la data, porque una vista se basa en tablas
subyacentes de la base de datos. La sintaxis es:
DROP VIEW view;
SECUENCIAS
93
La sintaxis de creacin es:
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
94
NOCACHE
NOCYCLE;
95
El valor DEFAULT de una columna en una sentencia CREATE TABLE o
ALTER TABLE.
Query de una vista o de una vista materializada
Una instruccin SELECT que se combina con otra instruccin SELECT con el
operador conjunto UNION, INTERSECT o MINUS.
La clusula WHERE de una instruccin SELECT
El constraint CHECK
SELECT dept_deptid_seq.CURRVAL
FROM dual;
Modificando Secuencias
96
Ejemplo:
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
INDICES
Un ndice proporciona acceso directo y rpido a las filas de una tabla. Su propsito
es reducir la E / S del disco utilizando una ruta indexada para localizar rpidamente
los datos. El servidor Oracle utiliza y mantiene automticamente un ndice. Despus
de crear un ndice, el usuario no requiere ninguna actividad directa.
97
Los ndices son lgicamente y fsicamente independientes de la tabla que indexan.
Esto significa que pueden crearse o eliminarse en cualquier momento y no tienen
ningn efecto en las tablas base u otros ndices.
Ejemplo:
CREATE INDEX emp_last_name_idx
ON employees(last_name);
98
Consideraciones sobre la creacin de ndices.
Para poder borrar un ndice, se debe ser el dueo o tener el privilegio DROP ANY
INDEX.
SINONIMOS
Proporcionan nombres alternativos para los objetos. Por lo cual, podemos usarlos
para referirnos a una tabla que es propiedad de otro usuario, eliminando la necesidad
99
de calificar el nombre del objeto con el esquema. Este mtodo puede ser
especialmente til con nombres de objetos largos, como las vistas.
Sintaxis:
CREATE [PUBLIC] SYNONYM synonym
FOR object;
Reglas
El objeto no puede estar contenido en un paquete.
Un nombre de sinnimo privado debe ser distinto de todos los dems objetos
que pertenecen al mismo usuario.
TABLAS TEMPORALES
Una tabla temporal es una tabla que contiene datos que slo existen durante la
duracin de una transaccin o sesin. Los datos de una tabla temporal son privados
para la sesin, lo que significa que cada sesin slo puede ver y modificar sus
propios datos.
Las tablas temporales son tiles en aplicaciones donde un conjunto de resultados
debe ser almacenado en bfer. Por ejemplo, un carrito de la compra en una
aplicacin en lnea puede ser una tabla temporal. Cada elemento est representado
por un registro en la tabla temporal. Mientras que usted est haciendo compras en
100
una tienda en lnea, usted puede seguir agregando o quitando artculos de su carro.
Durante la sesin, los datos de este carrito son privados. Despus de finalizar sus
compras y realizar los pagos, la aplicacin mueve la fila del carro elegido a una tabla
permanente. Al final de la sesin, los datos temporales se eliminan automticamente.
Dado que las tablas temporales estn definidas estticamente, puede crear ndices
para ellas. Los ndices creados en tablas temporales tambin son 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 disparador en una tabla temporal.
DELETE ROWS: crea una tabla temporal que es especfica de la transaccin. Una
sesin se vincula a la tabla temporal con la primera insercin de una transaccin en
la tabla. El enlace desaparece al final de la transaccin. La base de datos trunca la
tabla (eliminar todos los registros) despus de cada commit.
PRESERVE ROWS: crea una tabla temporal que es especfica de la sesin. Cada
sesin de representante de ventas puede almacenar sus propios datos de ventas
para el da en la tabla. Esta vinculacin desaparece al final de la sesin o emitiendo
un TRUNCATE de la tabla en la sesin. La base de datos trunca la tabla cuando
termina la sesin.
Cuando crea una tabla temporal en una base de datos Oracle, crea una definicin de
tabla esttica. Al igual que las tablas permanentes, las tablas temporales se definen
en el diccionario de datos. Sin embargo, las tablas temporales y sus ndices no
asignan automticamente un segmento cuando se crean. En su lugar, los segmentos
temporales se asignan cuando los datos se insertan por primera vez. Hasta que los
datos se carguen en una sesin, la tabla aparece vaca.
101
TABLAS EXTERNAS
Una tabla externa es una tabla read-only, cuyos metadatos se almacenan en la base
de datos pero los datos se almacenan fuera de la base de datos. Esta definicin de
tabla externa se puede considerar como una vista que se utiliza para ejecutar
cualquier consulta SQL contra datos externos sin requerir que los datos externos
primero se carguen en la base de datos. Los datos de la tabla externa se pueden
consultar y unir directamente y en paralelo sin requerir que los datos externos se
carguen por primera vez en la base de datos. Puede utilizar SQL, PL/SQL y Java
para consultar los datos en una tabla externa.
La diferencia principal entre tablas externas y tablas regulares es que las tablas
externas son de slo lectura. No es posible realizar operaciones DML, y no se
pueden crear ndices sobre ellas. Sin embargo, puede crear una tabla externa y, por
tanto, descargar datos mediante el comando CREATE TABLE AS SELECT.
Oracle Server proporciona dos controladores de acceso principales para las tablas
externas. Uno es el ORACLE_LOADER, que se utiliza para leer datos de archivos
externos cuyo formato puede ser interpretado por la utilidad SQL*Loader. Tenga en
cuenta que no todas las funcionalidades de SQL*Loader estn soportadas con tablas
externas. El otro controlador es el ORACLE_DATAPUMP, que puede utilizarse para
importar y exportar datos utilizando un formato independiente de la plataforma. El
ORACLE_DATAPUMP escribe los registros con una instruccin SELECT para
cargarse en una tabla externa como parte de una instruccin CREATE TABLE ...
ORGANIZATION EXTERNAL ... AS SELECT. A continuacin, puede utilizar SELECT
para leer datos de ese archivo de datos. Tambin puede crear una definicin de tabla
externa en otro sistema y utilizar ese archivo de datos. Esto permite que los datos se
muevan entre las bases de datos de Oracle.
102
Para crear tablas externas, utilice la instruccin CREATE DIRECTORY para crear un
objeto de directorio. Un objeto de directorio especifica un alias para un directorio a
nivel del sistema operativo, donde reside un origen de datos externo.
Debe tener privilegios de sistema CREATE ANY DIRECTORY para crear directorios.
Cuando crea un directorio, se le conceden automticamente los privilegios READ y
WRITE y puede conceder estos a otros usuarios y roles. El DBA tambin puede
otorgar estos privilegios a otros usuarios y roles.
Un usuario necesita privilegios de lectura para todos los directorios utilizados en las
tablas externas a las que se accede y los privilegios de ESCRITURA para las
ubicaciones de los archivos log, bad y discard que se utilizan.
Sintaxis:
CREATE TABLE <table_name>
( <col_name> <datatype>, )
ORGANIZATION EXTERNAL
(TYPE <access_driver_type>
DEFAULT DIRECTORY <directory_name>
ACCESS PARAMETERS
( ) )
LOCATION ('<location_specifier>')
REJECT LIMIT [0 | <number> | UNLIMITED];
103
Utilice la clusula ORGANIZATION para especificar el orden en el que se almacenan
las filas de datos de la tabla. Al especificar EXTERNAL en la clusula
ORGANIZATION, indica que la tabla es una tabla de slo lectura situada fuera de la
base de datos. Tenga en cuenta que los archivos externos ya deben existir fuera de
la base de datos.
Ejemplo:
CREATE OR REPLACE DIRECTORY emp_dir
AS '//emp_dir';
104
PRACTICAS CAPITULO 6
105
Captulo 7
MANEJANDO OBJETOS
106
ALTER TABLE
Despus de crear una tabla, se puede requerir cambiar la estructura, por omisin de
columnas la definicin de las columnas esta erada, e incluso se puede requerir la
eliminacin de columnas. Para todo lo anterior, trabajamos con la sentencia ALTER
TABLE.
MANEJANDO COLUMNAS
ADD
Sintaxis:
ALTER TABLE nombre de la tabla
ADD (columna tipo de datos [DEFAULT expr]
[,columna tipo de datos]...);
Si una tabla ya contiene filas cuando se agrega una columna, la nueva columna es
inicialmente nula o toma el valor por default para todas las filas. Puede agregar una
columna NOT NULL a una tabla que contenga datos en las otras columnas slo si
especifica un valor por Default. Puede agregar una columna NOT NULL a una tabla
vaca sin el valor por Default. No se puede especificar un orden para la columna,
aparecer al final.
MODIFY
Sintaxis:
ALTER TABLE nombre de la tabla
MODIFY (columna tipo de datos [DEFAULT expr]
[,columna tipo de datos]...);
107
Pautas sobre las modificaciones
Puede aumentar el ancho o la precisin de una columna numrica.
Puede aumentar el ancho de las columnas de caracteres.
Puede reducir el ancho de una columna si:
La columna slo contiene valores nulos
La tabla no tiene registros
La disminucin en el ancho de columna no es menor que los valores
existentes en esa columna.
Puede cambiar el tipo de datos si la columna contiene slo valores nulos. La
excepcin a esto es las conversiones CHAR en el tipo de datos VARCHAR2 o
convertir una columna VARCHAR2 en el tipo de datos CHAR slo si la
columna no cambia de tamao.
Un cambio en el valor por default de una columna slo afecta a las inserciones
posteriores de la tabla.
DROP
Sintaxis:
ALTER TABLE nombre de la tabla
DROP (columna [, columna] );
108
SET UNUSED
Esta opcin marca una o ms columnas como no utilizadas para que puedan ser
eliminadas cuando la demanda en los recursos del sistema sea menor. La
especificacin de esta clusula no elimina realmente las columnas de destino de
cada fila de la tabla (es decir, no restaura el espacio en disco utilizado por estas
columnas). Por lo tanto, el tiempo de respuesta es ms rpido que si ejecuta la
clusula DROP. Las columnas no utilizadas se tratan como si se hubieran eliminado,
aunque sus datos de columna permanezcan en las filas de la tabla.
Sintaxis:
ALTER TABLE <table_name>
SET UNUSED(<column_name> [ , <column_name>]);
Despus de marcar una columna como no utilizada, no tiene acceso a esa columna.
Una consulta SELECT * no recuperar datos de columnas no utilizadas. Adems, los
nombres y tipos de columnas marcadas UNUSED no se mostrarn durante una
sentencia DESCRIBE y se puede agregar a la tabla, una nueva columna con el
mismo nombre que una columna UNUSED. La informacin de estas columnas se
almacena en la vista de diccionario USER_UNUSED_COL_TABS.
Nota: Las pautas para establecer una columna a UNUSED son similares a las que se
usan para eliminar una columna.
109
DROP UNUSED COLUMNS;
Con esta sentencia se elimina de la tabla todas las columnas marcadas como
UNUSED. Puede utilizar esta instruccin cuando desee recuperar el espacio de disco
de estas columnas en la tabla. Si la tabla no contiene columnas UNUSED, la
sentencia regresa sin errores.
MANEJANDO CONSTRAINTS
MODIFY
La modificacin de las restricciones est sujeta a las siguientes restricciones:
No puede cambiar el estado de una restriccin NOT DEFERRABLE a
INITIALLY DEFERRED.
Si especifica esta clusula para un index-organized table, no puede
especificar ninguna otra clusula en la misma sentencia.
110
No puede cambiar la restriccin NOT NULL en una columna FOREIGN KEY
de una tabla con particin de referencia y no puede cambiar el estado de una
constraint de particin referencial de una tabla con particiones de referencia.
ENABLE
Especifique ENABLE si desea que el constraint se aplique a los datos de la tabla.
DISABLE
Especifique DISABLE para desactivar el constraint.
111
Especifique NOT DEFERRABLE para indicar que en transacciones posteriores no
pueden utilizar la clusula SET CONSTRAINT [S] para aplazar la comprobacin de
estos constraints hasta que se ejecute el commit. Por lo tanto, la comprobacin de un
constraint NOT DEFERRABLE nunca puede ser diferida al final de la transaccin.
Ejemplos
ALTER TABLE dept2
ADD CONSTRAINT dept2_id_pk
PRIMARY KEY (department_id)
DEFERRABLE INITIALLY DEFERRED
ALTER SESSION
SET CONSTRAINTS= IMMEDIATE
CREATE TABLE emp_new_sal (salary NUMBER
CONSTRAINT sal_ck
CHECK (salary > 100)
DEFERRABLE INITIALLY IMMEDIATE,
bonus NUMBER
CONSTRAINT bonus_ck
CHECK (bonus > 0 )
DEFERRABLE INITIALLY DEFERRED );
112
Ejemplo 1: Insertamos un registro que viola el sal_ck. En la sentencia de CREATE
TABLE, sal_ck esta especificado como un constraint initially immediate. Esto significa
que el constraint es chequeado inmediatamente despues del INSERT, por lo que se
va a generar un error.
INSERT INTO emp_new_sal VALUES(90,5);
Ejemplo 2: Inserte una fila que viole bonus_ck. En la instruccin CREATE TABLE,
bonus_ck se especifica como diferido y tambin diferido inicialmente. Por lo tanto, el
constraint no se verifica hasta que se ejecute un COMMIT o se establezca el estado
a inmediato.
INSERT INTO emp_new_sal VALUES(110, -1);
El commit fall debido a la violacin del constraint. Por lo tanto, en este punto, la se
hace el rollback de la transaccin.
DROP
Para eliminar una restriccin, puede identificar el nombre de restriccin de las vistas
de diccionario de datos USER_CONSTRAINTS y USER_CONS_COLUMNS. A
continuacin, utilice la instruccin ALTER TABLE con la clusula DROP. La opcin
CASCADE de la clusula DROP hace que tambin se eliminen las restricciones
dependientes.
Sintaxis:
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [CASCADE];
113
Ejemplos:
ALTER TABLE emp2
DROP CONSTRAINT emp_mgr_fk;
Ejemplo:
ALTER TABLE marketing
RENAME COLUMN team_id TO id;
114
Ejemplo:
ALTER TABLE marketing RENAME CONSTRAINT mktg_pk
TO new_mktg_pk;
PRACTICAS CAPITULO 7
1. Elimine la columna first_name de la tabla employees2. Luego vea la
estructura.
2. Establezca la columna dept_id de la tabla employees2 como UNUSED. Luego
vea la estructura.
3. Elimine la columna UNUSED de la tabla employees2. Revise la estructura al
finalizar.
4. Cree un constraint de primary key sobre el campo id para la tabla emp2.
5. Cree un constraint foreign key sobre el campo dept_id para la tabla emp2
haciendo referencia al campo usado en el constraint del punto anterior.
6. Agregue la columna commission a la tabla emp2, numrico de 4 con 2
decimales. En la misma sentencia agregue un constraint de check que llamar
my_emp_comm_ck para validar que el valor sea mayor a 0.
115
116
Captulo 8
VISTAS DEL DICCIONARIO DE DATOS
117
EL DICCIONARIO DE DATOS
Dado que el diccionario de datos es de slo lectura, slo puede emitir consultas en
sus tablas y vistas, a travs de instrucciones SQL. Puede consultar las vistas de
diccionario que se basan en las tablas de diccionario para encontrar informacin
como:
Definiciones de todos los objetos de esquema en la base de datos (tablas,
vistas, ndices, sinnimos, secuencias, procedimientos, funciones, paquetes,
disparadores, etc.)
Valores por defecto para las columnas
Informacin de constraints
Nombres de los usuarios de Oracle
Privilegios y roles que cada usuario ha recibido
Otra informacin general de la base de datos
Hay varias vistas que resumen y muestran la informacin almacenada en las tablas
base del diccionario de datos. Estas vistas descodifican los datos de la tabla base,
mediante combinaciones y clusulas WHERE para simplificar la informacin. La
mayora de los usuarios tienen acceso a las vistas en lugar de las tablas base.
El usuario SYS es el owner de todas las tablas base y vistas accesibles por el
usuario sobre el diccionario de datos.
118
El diccionario de datos consiste en conjuntos de vistas. En muchos casos, un
conjunto consiste en tres vistas que contienen informacin similar y se distinguen
entre s por sus prefijos. Por ejemplo, hay una vista denominada USER_OBJECTS,
otra denominada ALL_OBJECTS y una tercera denominada DBA_OBJECTS.
Estas tres vistas contienen informacin similar sobre objetos en la base de datos,
excepto que el mbito es diferente. USER_OBJECTS contiene informacin acerca de
los objetos que posee o crea. ALL_OBJECTS contiene informacin sobre todos los
objetos a los que tiene acceso. DBA_OBJECTS contiene informacin acerca de
todos los objetos propiedad de todos los usuarios. Para las vistas que estn
prefijadas con ALL o DBA, generalmente hay una columna adicional en la vista
denominada OWNER para identificar quin es el propietario del objeto. Tambin hay
un conjunto de vistas que tiene el prefijo v$. Estas son de naturaleza dinmica y
contienen informacin sobre el rendimiento.
Para familiarizarse con las vistas del diccionario, puede utilizar la vista denominada
DICCIONARIO. Esta contiene el nombre y una breve descripcin de cada vista de
diccionario a la que tiene acceso.
Puede utilizar la vista USER_TABLES para obtener los nombres de todas sus tablas.
La vista USER_TABLES contiene informacin acerca de las tablas. Adems de
proporcionar el nombre de la tabla, contiene informacin detallada sobre el
almacenamiento.
119
USER_CONS_COLUMNS describe las columnas que son de su propiedad y que se
especifican en los constraints.
PRACTICAS CAPITULO 8
120
3. Muestre el nombre de la tabla y el dueo de aquellas tablas sobre las que
tenga permisologa pero no es dueo.
4. Muestre el nombre de la columna, el tipo de datos, la longitud, la precisin, la
escala y si acepta nulos, para una tabla que sea suministrada por el usuario.
5. Muestre el nombre de la columna, el nombre el constraint, el tipo de
constraint, la condicin y el estatus, para una tabla suministrada por el
usuario.
6. Escriba el siguiente comentario para la tabla departamentos 'Company
department information including name, code, and location.' y luego bsquelo
en el diccionario de datos.
7. Seleccione el nombre y el texto de las vistas que le pertenecen.
8. Seleccione el nombre, el valor maximo, el valor de incrementacin y el ltimo
nmero de las secuencias que le pertenecen.
9. Seleccione el nombre y el tipo de todos los objetos que le pertenezcan que
comiencen con 'EMP' y 'DEP'
121
122
Captulo 9
CONTROLANDO EL ACCESO DE
USUARIOS
123
Con la seguridad de la base de datos de Oracle Server, puede hacer lo siguiente:
Controlar el acceso a la base de datos.
Dar acceso a objetos especficos en la base de datos.
Confirmar los privilegios otorgados y recibidos.
La seguridad del sistema abarca el acceso y el uso de la base de datos a nivel del
sistema, como el nombre de usuario y la contrasea, el espacio en disco asignado a
los usuarios y las operaciones del sistema que pueden realizar los usuarios.
124
Copias de seguridad de tablas
Creacin de Usuarios
Despus de que el DBA crea un usuario, el DBA puede asignar privilegios a ese
usuario.
125
Para facilitar la renovacin y el mantenimiento de los privilegios, el administrador de
base de datos puede crear un rol. Un rol es un grupo nombrado de privilegios
relacionados que se pueden conceder al usuario. Un usuario puede tener acceso a
varios roles y se puede asignar a varios usuarios el mismo rol.
Sintaxis
CREATE ROLE role;
Una vez creado, 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 que cualquier usuario puede agregar privilegios a un rol.
Ejemplo:
CREATE ROLE manager;
GRANT create table, create view
TO manager;
GRANT manager TO alice;
126
PRIVILEGIOS DE OBJETOS
Los privilegios de objetos varan de un objeto a otro. Un owner tiene todos los
privilegios sobre el objeto. Un owner puede dar privilegios especficos sobre sus
objetos.
Sintaxis:
GRANT object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];
Ejemplos:
GRANT select
ON employees
TO demo;
127
GRANT select
ON alice.departments
TO PUBLIC;
Los privilegios sobre los objetos concedidos a otros usuarios, pueden ser revocados.
Los privilegios que especificaN se revocan de los usuarios que usted indique y de
cualquier otro usuario al que el usuario revocado otorg esos privilegios..
Sintaxis:
REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user[, user...]|role|PUBLIC}
Ejemplo:
REVOKE select, insert
ON departments
FROM demo;
PRACTICAS CAPITULO 9
128
d. Los usuarios pueden ver los privilegios que se les conceden y los que
se conceden en sus objetos.
2. Otorgue el privilegio de select sobre la tabla REGIONS al usuario training.
3. otorgue el privilegio de select, update e insert sobre la tabla COUNTRIES a
training.
129