Sei sulla pagina 1di 67

MANUAL SQL

NDICE
1. CONSULTAS

2. INTRODUCCIN A LOS COMANDOS SQL*PLUS

3. FUNCIONES NUMRICAS Y ALFANUMRICAS

4. TRATAMIENTO DE FECHAS

5. FUNCIONES DE GRUPO

6. CONSULTAS ANIDADAS

7. COMBINACIONES

8. LENGUAJE DE MANIPULACIN DE DATOS

9. LENGUAJE DE DEFINICIN DE DATOS

10. VISTAS

11. MEJORA DE PRESTACIONES

12. SEGURIDAD DE LOS DATOS

MANUAL SQL

Captulo 1. Consultas
COMANDO SELECT

El objetivo de este tema es el de conocer cmo se puede efectuar una de las


operaciones ms comunes que se realizan sobre una base de datos relacional: la de
extraer informacin de las tablas que la componen. Siempre que se desee informacin
de las tablas que componen una base de datos relacional manipulada con el lenguaje
SQL, se utilizar el comando SELECT con una serie de clusulas, las cuales sern
estudiadas en este tema. Un primer formato para el comando SELECT es:
SELECT col1, col2, ... , coln
FROM nombre_tabla.
Con esta sentencia se seleccionan los datos contenidos en las columnas especificadas
de la tabla. Solo se seleccionarn las columnas especificadas despus de la palabra
clave SELECT y en ese mismo orden. Sern devueltas todas las filas de la tabla y en
el orden en el que fueron insertadas en la tabla.
Si se desea obtener los datos de todas las columnas de la tabla y en el orden en el
que fueron insertadas, se tendr que sustituir la especificacin de las columnas por
un asterisco, quedando la sentencia de la siguiente manera:
SELECT * FROM nom_tabla.

MANUAL SQL
CLAUSULA DISTINCT
Si seleccionamos ciertas columnas de la base de datos que contienen datos iguales,
las filas devueltas se visualizarn tantas veces como estn en la tabla. Si slo se
desea seleccionar los valores de las filas una sola vez, no importando el nmero de
veces que stos se repitan, deberemos utilizar la sentencia:
SELECT DISTINCT col1, col2, ... , coln
FROM nom_tabla;
Seleccionar todas las filas que en las columnas col1, col2, coln, tengan valores
distintos. Si existen filas con valores iguales en todas las columnas seleccionadas,
solamente aparecern una vez.
La siguiente sentencia no tendr ningn sentido ya que si se seleccionan todas las
columnas de la tabla, no habr filas que tengan los mismos valores en todas sus
columnas, siempre que se haya diseado correctamente la base de datos relacional.
SELECT DISTINCT * FROM department;

CLAUSULA WHERE
Hasta el momento hemos extrado informacin de todas las filas que componan la
tabla, pero si se desea restringir las filas devueltas por una sentencia SELECT
especificaremos la clusula WHERE y a continuacin las condiciones que deben
cumplir las filas para que sean visualizadas. El comando SELECT con la clusula
WHERE queda de la siguiente manera:
SELECT col1, col2, ... , coln
FROM nom_tabla
WHERE condicin;
Una condicin est compuesta por un operador relacional (<, >, =, etc...) uniendo:
- Dos columnas de la tabla.
- Una columna y una constante.
La constante puede ser:
. Numrica.

MANUAL SQL
. Carcter (ir encerrada entre comillas simples).
. Fecha (tambin ir encerrada entre comillas simples).
Los operadores relacionales son:
- Igual =.
- Distinto !=.
- Mayor >.
- Mayor o igual >=.
- Menor <.
- Menor o igual <=.
Las columnas que formen parte de las condiciones no tienen porque ser seleccionadas.
Pueden seleccionarse unas columnas y restringir las filas extradas por otras.

Condiciones mltiples.
Dentro de la clusula WHERE se pueden introducir condiciones mltiples de consulta,
las cuales se evalan antes de devolver las filas correspondientes. Los operadores que
se utilizan para unir varias condiciones de consulta son:
AND. Las filas seleccionadas tienen que cumplir todas las condiciones unidas
con este operador. Puede haber ms de un operador AND.
OR.

Las filas seleccionadas tienen que cumplir alguna de las condiciones


unidas con este operador. Puede haber ms de un operador OR.

IN.

El valor de la columna se debe corresponder con alguno de los valores


especificados en la lista que sigue al operador IN.

NOT IN. Es la complementaria de la anterior.


El operador AND es ms prioritario que el operador OR, por lo que se evala antes en
las condiciones de consulta.

Operador BETWEEN AND.

MANUAL SQL
Cuando se desea seleccionar datos de una columna que estn comprendidos entre dos
valores se utiliza la clusula BETWEEN ... AND, en la que se expresan los lmites,
min_val y max_val. El formato es el siguiente:
WHERE columna BETWEEN min_val AND max_val.
Matemticamente es un intervalo cerrado, luego se incluyen los extremos. Por lo
tanto su negacin ser un intervalo abierto, que no comprender los extremos.

Valores nulos.
Hay veces que el valor de una columna es desconocido o inaplicable para una cierta
fila. En este caso se le asigna un valor nulo (NULL). Nulo es distinto de cero o blanco.
Por ejemplo, la comisin nula significa que ese empleado no tiene comisin - puede que
no sea vendedor -, mientras que si un empleado no vende nada su comisin ser cero.
Para seleccionar las filas de una tabla que tiene valor nulo en una determinada
columna utilizamos la siguiente condicin:
WHERE columna IS NULL.

Si por el contrario se desea seleccionar aquellas filas de la tabla en las que una
columna tiene un valor distinto de nulo usaremos:
WHERE columna IS NOT NULL.

Caracteres de sustitucin.
Para seleccionar una fila que cumpla una cierta condicin no es necesario conocer el
conjunto exacto de caracteres que forman la restriccin. Utilizaremos el operador
LIKE combinado con unos caracteres especiales que sustituyen cadenas de
caracteres. Estos caracteres especiales son:
_ Este carcter sustituye a cualquier otro.
% Este carcter sustituye a cualquier cadena de caracteres.

CLAUSULA ORDER BY

MANUAL SQL
Las filas de la tabla se almacenan en el mismo orden en el que han sido insertadas, por
lo que cuando las seleccionamos siempre aparecern en ese orden. Para variar este
orden se utiliza la clusula ORDER BY. Con ella se especifican las columnas por las
cuales queremos que se ordenen las filas seleccionadas por una consulta.
Consideraciones sobre la clusula ORDER BY:
- Pueden formar parte de ella cualquier nmero de columnas hasta un mximo
de 16 no importando el tipo de datos de stas.
- El orden puede ser ascendente (ASC) o descendente (DESC). Por omisin
ser ascendente.
- Pueden mezclarse ordenaciones ascendentes y descendentes.
- Se puede clasificar por columnas que no han sido seleccionadas.
- Siempre es la ltima clusula de la sentencia SELECT.
El formato es:
ORDER BY columna ASC o DESC, columna ASC o DESC

MANUAL SQL

Captulo 2.
Introduccin a los comandos SQL*PLUS
SINTAXIS DE LOS COMANDOS SQL*PLUS
Los comandos SQL*PLUS son aquellos propios de esta herramienta, es decir no
pertenecen al SQL estndar sino al propio "software" ORACLE. Deben cumplir las
siguientes normas:
- Deben ser introducidos en una sola lnea. Si ocupan ms, se deber marcar
el final de lnea con un '-', pulsar 'RETURN' y continuar escribiendo en la
lnea siguiente.
- No es obligatorio finalizar estos comandos con ';', aunque hacerlo no es un
error.
- Es indiferente utilizar letras maysculas o minsculas.
Pertenecen a este tipo de comandos los siguientes:
Comandos de manipulacin del buffer.
Comandos de manipulacin de archivos.
Comandos de formateo de columnas.
Comandos que ejecutan rdenes del sistema operativo.
Comandos para generar informes.

MANUAL SQL

COMANDOS DE EDICION DEL BUFFER


Cuando ejecutamos una sentencia SQL, sta queda almacenada en un buffer hasta
que se ejecute una nueva sentencia. Las sentencias SQL*PLUS no se almacenan en el
buffer. Para modificar el contenido del mismo se dispone de una serie de comandos.
Son los llamados comandos de edicin del buffer.
El ";" (final de la sentencia SQL) no se introduce en el buffer puesto que su funcin
es la de determinar el fin de sentencia y su posterior ejecucin.
Estos comandos de edicin afectan a una nica lnea, por lo que siempre se deber
conocer cul es la lnea activa del buffer. sta est marcada con un asterisco.
LIST (l). Lista todo el contenido del buffer. Queda como lnea activa la ltima.
LIST n (l n). Lista la lnea n contenida en el buffer. Esta queda como lnea activa.
LIST n m (l n m). Lista desde la lnea n hasta la m del buffer. La lnea activa pasa a
ser la m.
APPEND texto (a texto). Aade 'texto' al final de la lnea activa del buffer.
Si se desea insertar blancos al final de la sentencia, lo haremos
introduciendo el texto entre comillas simples y si es al principio del texto a
introducir, basta con dejarlos entre el comando y el texto.
INSERT. Inserta nuevas lneas a continuacin de la lnea activa. Se terminar de
insertar lneas dejando una en blanco. Todas las lneas del comando actual que
se encuentren por debajo permanecen intactas pero con el nmero de
secuencia modificado.
INSERT texto. Inserta el 'texto' en la lnea siguiente a la lnea activa.

DELETE. Borra la lnea activa. Todas las lnea del comando actual que se encuentren
por debajo permanecern intactas pero con el nmero de secuencia
modificado.
CHANGE /antiguo/nuevo. Cambia en la lnea activa la cadena de caracteres 'antiguo'
por 'nuevo'. Si existe ms de una cadena de caracteres 'antiguo' slo se
cambia la primera por la izquierda. El carcter separador de cadenas ser el

MANUAL SQL
primer carcter especificado despus de la palabra clave CHANGE. En el
ejemplo es '/'.
Si como prefijo de la cadena 'antiguo' se especifican los caracteres '...' se
cambian todos los caracteres por delante de 'antiguo'.
Si como sufijo de la cadena 'antiguo' se especifican los caracteres '...' se
cambian todos los caracteres por detrs de 'antiguo'.
Si se desea cambiar un texto, para no escribirlo entero, bastar con indicar
los delimitadores del mismo y entre ellos los caracteres '...' como texto
'antiguo'.
RUN. Ejecuta el contenido del buffer, visualizndose la sentencia almacenada antes
de la ejecucin.
/. Ejecuta el contenido del buffer, sin visualizarse la sentencia almacenada antes de
la ejecucin.

MANIPULACION DE ARCHIVOS
Como en el buffer slo se puede almacenar un nico comando SQL, que se pierde
adems cuando introducimos uno nuevo, es conveniente la utilizacin de ficheros para
guardar aquellos que se deben ejecutar ms de una vez. Para comunicar estos
ficheros con el buffer SQL tenemos los llamados comandos para la manipulacin de
archivos. Estos son:

SAVE fichero. Guarda el contenido del buffer en el fichero especificado. Si


ste contiene alguna informacin, se pierde. Estos ficheros tienen la
extensin SQL por defecto. Si se desea otra deber especificarse.
SAVE fichero APPEND. Guarda el contenido del buffer en el fichero
deseado. Este es almacenado a continuacin de lo que existe previamente en el
fichero.
GET fichero. Busca en el directorio actual el fichero especificado. Si no lo
encuentra nos muestra un mensaje de error. Si lo encuentra introduce en el
buffer su contenido. Busca siempre un fichero con extensin SQL si no se le
especifica otra.

MANUAL SQL
Si se intenta ejecutar el contenido del buffer y en ste hay ms de un
comando SQL se producir un error, ya que el buffer slo puede contener uno.
START fichero. Busca en el directorio actual el fichero especificado. Si no lo
encuentra nos muestra un mensaje de error. Si lo encuentra ejecuta los
comandos contenidos. Quedando almacenado en el buffer el ltimo de stos.
Busca un fichero con extensin SQL si no se le especifica otra.

EJECUCION DE RDENES DEL SISTEMA OPERATIVO


Durante una sesin de SQL*PLUS nos puede hacer falta en un determinado momento,
ejecutar un comando del sistema operativo y despus devolver el control a
SQL*PLUS. Para poder realizar esto tenemos dos comandos SQL*PLUS:

!orden_del_sistema_operativo. Introduciendo este comando desde el prompt


de SQL*PLUS se ejecutar la orden deseada, y una vez finalizada sta, se
estar en disposicin de seguir trabajando con SQL*PLUS.
HOST. Da el control al sistema operativo para realizar todas las rdenes
deseadas en l. Cuando se introduce la orden de salida (exit), se devuelve el
control a SQL*PLUS.

COMANDO COLUMN

Este comando sirve para cambiar el formato de salida de las columnas cuando son
seleccionadas en una consulta determinada. Estos comandos afectan a todas las
columnas que se llamen igual que la especificada, aunque pertenezcan a distintas
tablas. Si queremos especificar un formato para una columna concreta de todas las
que se llaman igual que ella, deberemos utilizar un seudnimo. Es un nico comando,
COLUMN, con diferentes clusulas que nos permitir formatear la salida para las
columnas deseadas. Esta nueva definicin de salida de los datos no afecta de ningn
modo a la definicin interna de la tabla.
Se pueden definir cualquier nmero de comandos COLUMN para una misma columna.
Tambin se puede formatear la salida de expresiones aritmticas, de carcter o tipo
fecha.

10

MANUAL SQL

El comando COLUMN y sus clusulas tienen los siguientes formatos:

COLUMN columna o expresin ALIAS seudnimo. Asigna a la columna o


expresin el seudnimo especificado. Este sirve para identificar a la columna
en posteriores comandos COLUMN o comandos BREAK. No sirve para
identificar a la columna en una consulta.

COLUMN columna o expresin FORMAT formato. Independientemente del


formato que tuviera en la tabla se le asigna un formato de salida, siempre y
cuando sea del mismo tipo. Los nuevos formatos que se le puede asignar son:

An

Asigna n caracteres de salida para el ancho de la columna especificada.

9,999.99

Asigna el formato de salida para los datos numricos con el


carcter separador de decimales y millares.

$999 Antepone el signo $ al correspondiente valor numrico de la columna.


B999 En caso de que el valor numrico sea cero aparecern blancos.
999MI Pondr el signo '-' de los nmeros negativos a la derecha en lugar de
a la izquierda.
999PR Incluir los nmeros negativos entre los caracteres mayor y menor (<
>).

COLUMN columna o expresin HEADING cabecera. Cambia la cabecera de


la expresin o columna que se especifique. Por defecto ser la definida en la
tabla.
Si el ancho de la columna es menor que el de la cabecera, sta quedar
truncada al anterior. Si se desea que en el nombre de cabecera existan
blancos y signos de puntuacin, se deber encerrar la cabecera entre comillas
simples. Con el carcter "|" se especifica salto de lnea.

11

MANUAL SQL
COLUMN columna o expresin

JUSTIFY L[EFT] | C[ENTER] | R[IGHT]


Coloca la cabecera de la columna o expresin en la posicin indicada. Por
defecto la cabecera se sita a la derecha en columnas de tipo numrico y a la
izquierda en el resto.

COLUMN columna o expresin PRI[NT] | NOPRI[NT]. Sirve para que la


columna o expresin indicada se visualice o no

despus de haber sido

seleccionada. Por defecto se visualizar.


COLUMN columna o expresin NUL[L] valor. Asigna 'valor' a 'columna'
cuando sta toma un valor nulo. Por defecto se coge el valor expresado en el
parmetro NULL definido en el SET (lo veremos ms adelante).

COLUMN columna o expresin

WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]

Cuando la longitud de la cadena de caracteres es mayor que el ancho


establecido, SQL*PLUS realiza lo siguiente segn sea la opcin elegida:

WRAPPED. Los caracteres que no caben en la lnea se colocan en la


siguiente.

WORD WRAPPED. Los caracteres que no caben en la lnea se colocan


en la siguiente, teniendo en cuenta que las palabras no queden
cortadas.

12

MANUAL SQL
TRUNC. Se corta el texto que excede del ancho permitido para esa
columna.

COLUMN columna o expresin. Muestra las definiciones existentes para la


columna o expresin.

COLUMN columna o expresin CLEAR. Borra todas las definiciones COLUMN


para la columna indicada.

COLUMN columna o expresin ON | OFF. Con la opcin OFF se desactivan


(no se borran) las definiciones de COLUMN para la columna. Vuelven a
activarse con la opcin ON.

COMANDO DESCRIBE
Si se desea saber cul es la definicin de una tabla se deber utilizar el comando
DESCRIBE, el cual muestra informacin referente a todas las columnas que componen
la tabla.
La informacin mostrada referente a cada columna que compone la tabla de la
base de datos es:
NAME. En este campo se muestra el nombre de cada una de las columnas que
forman la tabla especificada.
NULL. Indica si la columna de la tabla puede contener valores nulos. Si no se
permiten aparecern las palabras NOT NULL. Esta opcin se especifica
durante la definicin de la tabla.
TYPE. Es el tipo de datos al que pertenecen los valores que contiene esa
columna.

COMANDO HELP
En SQL*PLUS se dispone de un comando para obtener ayuda acerca de la utilizacin
de los diferentes comandos, y clusulas que los forman. Este es el comando HELP.

13

MANUAL SQL
Para utilizarlo debe instalarse especficamente y sirve tanto para comandos SQL
como para comandos SQL*PLUS. La sintaxis de este comando es:

HELP <comando> <clusula>

Captulo 3. Funciones numricas y alfanumricas


EXPRESIONES ARITMETICAS
Las operaciones aritmticas se realizan incluyendo en las sentencias SQL expresiones
de este tipo compuestas por operadores aritmticos, constantes numricas y
columnas de la base de datos del mismo tipo. Los operadores que se pueden emplear
son:

- Suma +
- Resta - Multiplicacin *
- Divisin /

Cuando se utilicen varios operadores aritmticos en una misma expresin se debe


tener en cuenta lo siguiente:
. La multiplicacin y divisin tienen la misma prioridad.
. La suma y la resta tienen la misma prioridad.

14

MANUAL SQL
. Cuando los operadores tienen la misma prioridad en una expresin, sta se
evala de izquierda a derecha.
. La multiplicacin y divisin tienen mayor prioridad que la suma y la resta, por
lo que si una expresin est compuesta por varios operadores se ejecutarn
antes las multiplicaciones y divisiones.
. Se puede cambiar el nivel de prioridad de los operadores con el uso de
parntesis.
. Se pueden seleccionar constantes de cualquier tipo en todas las consultas.
Las expresiones aritmticas pueden aparecer seleccionadas o bien en la clusula
WHERE o en la clusula ORDER BY.

FUNCION NVL
Para solucionar este problema SQL*PLUS dispone de la funcin NVL la cual permite
sustituir temporalmente el valor nulo por otro cualquiera deseado. Su formato es:
NVL(columna, valor)
Cuando 'columna' tome el valor nulo, ste se sustituir por 'valor'.
Los clculos numricos son fcilmente realizados utilizando las columnas de la base de
datos con las expresiones y funciones aritmticas. Las funciones, al igual que las
expresiones, pueden formar parte de la sentencia SELECT, bien como columna a
seleccionar o como parte de las clusulas WHERE y ORDER BY.
Los argumentos de estas funciones pueden ser tanto constantes como columnas de la
tabla siempre que sean numricas. Aunque a continuacin especificamos 'columna' y
'nmero' como argumentos de las funciones, estos pueden sustituirse en cualquier
momento por expresin, constante o columna.
Las funciones aritmticas, aplicables a columnas o expresiones, son:
ABS(). Esta funcin devuelve el valor absoluto del argumento.
CEIL(). Esta funcin devuelve el valor del entero ms pequeo igual o mayor
que el valor del argumento (redondeo por exceso)
FLOOR (). Esta funcin devuelve el valor del entero ms grande igual o menor
que el valor del argumento (redondeo por defecto).

15

MANUAL SQL
MOD (,). Esta funcin devuelve el resto de dividir el primer argumento por el
segundo.
SIGN (). Esta funcin devuelve 1 si el valor del argumento es mayor que cero,
0 si es cero, y -1 si es menor que cero.
ROUND (). Redondea el valor del argumento a cero dgitos decimales.
ROUND (,). Redondea el valor del primer argumento a tantos dgitos
decimales como exprese el segundo argumento. Si ste es negativo se
redondea hacia la izquierda.
POWER (). Esta funcin eleva el valor del primer argumento al exponente
expresado por el segundo.
SQRT (). Esta funcin devuelve el valor positivo de la raz cuadrada del valor
del argumento.
TRUNC (). Trunca el valor del argumento a cero dgitos decimales.
TRUNC (,). Trunca el primer argumento a tantos dgitos decimales como
exprese el segundo. Si ste es negativo se trunca hacia la izquierda.
Tambin se dispone de una serie de funciones tipo carcter para facilitar el uso de
las columnas con este tipo de datos. Al igual que las numricas pueden constar de
columnas o constantes tipo carcter.
A estas funciones se les pueden pasar argumentos tanto numricos como carcter.
Cualquier argumento carcter puede ser o bien una columna de tipo carcter de la
tabla, o bien una cadena de caracteres.

Las funciones de tipo carcter que podemos utilizar son:


ASCII (). Esta funcin devuelve el nmero ASCII que representa el primer
carcter del valor del argumento (como cadena de caracteres).
CHR (). Esta funcin devuelve el carcter ASCII que representa el argumento
numrico.
INITCAP (). Esta funcin transforma el argumento, una cadena de
caracteres, en la misma cadena empezando con maysculas todas las palabras.
LENGTH (). Esta funcin devuelve el nmero de caracteres que contiene el
argumento (cadena de caracteres).

16

MANUAL SQL
INSTR (,,). Esta funcin devuelve la posicin que ocupa la primera ocurrencia
del segundo argumento en el primero. Si no se encuentra, la funcin retorna
un cero. Si se especifica un tercer argumento ste determina la posicin a
partir de la cual se busca en el primer argumento.
LOWER (). Esta funcin convierte el argumento en el mismo pero con letras
minsculas.
UPPER (). Esta funcin convierte el argumento en el mismo pero con letras
maysculas.
LTRIM (,). Esta funcin borra por la izquierda en el primer argumento todos
los caracteres hasta encontrar uno que no est en el conjunto de caracteres
formado por el segundo argumento.
RTRIM (,). Esta funcin borra por la derecha en el primer argumento todos
los caracteres hasta encontrar uno que no est en el conjunto de caracteres
formado por el segundo argumento.
LPAD (,,). Esta funcin aade en el primer argumento por la izquierda todos
los caracteres blancos necesarios para que la longitud resultante del mismo
sea la especificada como segundo argumento. Si se especifica un tercer
argumento entonces en lugar de rellenar con blancos se rellenar con los
caracteres de ese argumento.
RPAD (,,). Esta funcin aade en el primer argumento por la derecha todos
los caracteres blancos necesarios para que la longitud resultante del mismo
sea la especificada como segundo argumento. Si se especifica un tercer
argumento entonces en lugar de rellenar con blancos se rellenar con los
caracteres de ese argumento.
SUBSTR (,,). Esta funcin devuelve la subcadena del primer argumento
comprendida desde la posicin especificada como segundo y tantos caracteres
como indique el tercer argumento. Si no se especifica un tercer argumento se
entender que se desea la subcadena hasta el final.
TRANSLATE (,,). Esta funcin sustituye en el primer argumento cada
ocurrencia del segundo argumento por el tercero.
||. Operador de concatenacin. Aade el segundo argumento a la derecha del
primero.

17

MANUAL SQL
TO_NUMBER (). Esta funcin convierte el argumento de tipo alfanumrico en
el correspondiente numrico, siempre que los caracteres del argumento sean
caracteres numricos.
TO_CHAR (). Esta funcin convierte el argumento de tipo numrico en la
correspondiente cadena alfanumrica.
GREATEST (,,...,). Esta funcin devuelve el mayor de sus argumentos segn
criterios alfabticos.
LEAST (,,...,). Esta funcin devuelve el menor de sus argumentos.

DECODE (columna, valor1, valor11,


valor2, valor22,
... ,
valorn, valorn1,
otro).
Si el primer argumento tiene el valor 'valor1' esta funcin
devuelve 'valor11', si tiene 'valor2'

devuelve 'valor2',...,

'valorn' devuelve 'valorn1', y si no toma


especificados devuelve 'otro'.

18

ninguno

de

los

si tiene
valores

MANUAL SQL

Captulo 4. Tratamiento de fechas


DATOS TIPO FECHA

El formato por defecto en el que se visualizan los datos de tipo fecha es DD-MONYY, (15-DEC-89) es decir el nmero del da del mes, los tres primeros caracteres del
nombre del mes y las dos ltimas cifras del ao.
Cuando se quiera hacer referencia a la fecha del sistema se deber utilizar la palabra
reservada SYSDATE.
Las fechas en ORACLE se almacenan internamente como si fueran nmeros por lo que
se obtiene una gran facilidad para trabajar con ellas y convertirlas a otros formatos
que no sean el habitual.
Los campos que se almacenan para cada dato de este tipo son:
- Siglo.
- Ao.
- Mes.

19

MANUAL SQL
- Da.
- Hora.
- Minutos.
- Segundos.

ARITMETICA DE LA FECHA
Como los datos de este tipo se almacenan de forma numrica se puede realizar con
ellos operaciones aritmticas como:
Fecha + X

Aade los das "X" a la fecha "fecha", siendo el


resultado de tipo fecha.

Fecha + X/24

Aade "X" horas a la fecha "fecha", siendo el resultado


de tipo fecha.

Fecha - X

Resta los das "X" a la fecha "fecha", siendo el resultado


de tipo fecha.

Fecha - X/24

Resta "X" horas a la fecha "fecha", siendo el resultado


de tipo fecha.

Fecha - Fecha

Esta funcin devuelve el nmero de das transcurridos


entre las dos fechas.

CONVERSION DE FECHAS
Para convertir fechas a otros formatos tenemos la funcin TO_CHAR. Por medio de
ella somos capaces de visualizar cualquier campo almacenado de los datos tipo fecha.
Las dos funciones de conversin son:
TO_CHAR (fecha, 'formato')

Convierte datos de tipo fecha en datos de


tipo carcter con el formato indicado.

TO_DATE (fecha, 'formato')

Convierte datos de tipo carcter (con el


formato indicado) en datos de tipo fecha.

Dentro del formato de los datos de tipo fecha podemos seleccionar los siguientes:

20

MANUAL SQL
SCC o CC

Indica el siglo. La S pone el signo negativo delante de los


siglos A.C.

SYYYY o YYYY

Indica el ao. La S pone el signo negativo delante de los


aos A.C.

YYY o YY o Y

Indica los tres ltimos, dos ltimos o ltimo dgito del


ao.

Y,YYY

Indica el ao con la coma en la posicin indicada.

SYEAR o YEAR

Indica el ao deletreado. La S pone el signo negativo


delante de los aos A.C.

BD o AD

Indica antes o despus de CRISTO.

Indica el trimestre del ao.

MM

Indica el mes con dos dgitos.

MONTH o Month

Indica el nombre del mes con maysculas o minsculas


segn se indique.

WW o W

Indica la semana del ao o del mes.

DDD o DD o D

Indica el da del ao, mes o semana.

DAY o Day

Indica el nombre del da con maysculas o minsculas


segn se indique.

DY o dy

Indica el nombre del da con tres caracteres con


maysculas o minsculas segn se indique.

Indica la fecha en formato juliano (das transcurridos


desde el ao 4713 A.C.)

AM o PM

Indicador del meridiano.

HH o HH12

Indica la hora del da (1-12).

HH24

Indica la hora del da (0-23).

MI

Indica los minutos.

SS

Indica los segundos.

21

MANUAL SQL
SSSS

Indica los segundos transcurridos desde la medianoche.

/.,

Caracteres separadores.

"cte"

Indica las constantes alfanumricas que se introducen


dentro del

FM

formato indicado.

Elimina los blancos sobrantes en los nombres de das y


meses.

FUNCIONES DE DATOS TIPO FECHA


Adems de las funciones aritmticas y de los formatos de conversin de fechas
tenemos una serie de funciones que actan sobre datos de este tipo.
ADD_MONTHS (fecha, nmero)

Aade

el

nmero

de

meses

deseados a la fecha indicada.


MONTHS_BETWEEN(fecha1, fecha2)

Esta funcin determina el nmero


de meses que hay entre las dos
fechas.

LAST_DAY (fecha)

Determina la ltima fecha del mes


de una fecha dada.

NEXT_DAY (fecha, 'nom_dia')

Fecha del primer da 'nom_dia' de


la semana

siguiente a la fecha

indicada.
TRUNC (fecha [,'precisin'])

Trunca la fecha con la precisin indicada.


Si no se indica, se trunca la hora.

ROUND (fecha [,'precisin'])

Redondea la fecha con la precisin


indicada. Si no se indica, se
redondea la hora.

22

MANUAL SQL

Captulo 5. Funciones de grupo


INTRODUCCION

Hasta el momento hemos visto que todas las consultas que se realizaban a la base de
datos devolvan un conjunto de filas que cumplan una serie de condiciones. El nmero
de filas devueltas siempre era indeterminado. Cada fila seleccionada no dependa de
otra, simplemente cumpla las condiciones de la consulta.
A las funciones que en vez de actuar sobre una sola fila actan sobre un grupo de
ellas se les llama FUNCIONES DE GRUPO y devuelven un solo valor por cada grupo.
Por defecto, el grupo de filas sobre el cual se realiza la funcin, lo compone toda la
tabla. El salario mximo ser slo uno, ste ser mayor o menor dependiendo de las
condiciones de la consulta pero el resultado devuelto es un solo valor.
El formato para estas funciones es:
SELECT funcin_grupo (columna), funcin_grupo (columna), ...
FROM tabla
WHERE condiciones.
Cuando se seleccionan funciones de grupo no se pueden seleccionar columnas de la
tabla porque el valor de la funcin de grupo es nico y el de la columna no tiene por

23

MANUAL SQL
qu serlo. Al ser un valor nico Qu valor de la columna pondramos en la fila
seleccionada? Por qu uno y no otro?. La solucin es bien sencilla, si seleccionamos
funciones de grupo y columnas de la base de datos obtendremos un error de acceso al
ejecutar la consulta.

FUNCIONES
Las funciones de grupo de que se dispone en ORACLE son:
AVG (columna)

Devuelve la media de los valores de la


columna para cada grupo.

SUM (columna)

Devuelve la suma de los valores de la


columna para cada grupo.

MIN (columna)

Devuelve el mnimo de los valores de la


columna para cada grupo.

MAX (columna)

Devuelve el mximo de los valores de la


columna para cada grupo.

VARCIANCE (columna)

Devuelve la varianza de los valores de la


columna para cada grupo.

STDDEV (columna)

Devuelve la desviacin tpica de los


valores de la columna para cada grupo.

COUNT (*)

Cuenta el nmero de filas existentes en


un grupo incluyendo las nulas.

COUNT (columna)

Cuenta el nmero de filas que tienen valor


distinto de nulo en la columna de cada
grupo.

COUNT (DISTINCT columna)

Cuenta el nmero de valores distintos, no


nulos, de la columna de cada grupo.

CLAUSULA GROUP BY
El grupo por defecto es la tabla entera. Si se desea dividir la tabla en distintos
grupos se utiliza la clusula GROUP BY. En ella se especifica la(s) columna(s) por la(s)
cual(es) pretendemos agrupar. La tabla quedar dividida en tantos grupos como

24

MANUAL SQL
valores distintos tenga la concatenacin de todas las columnas que tiene la clusula
GROUP BY como argumento.
Antes se dijo que con funciones de grupo no se podan seleccionar columnas de la
tabla porque stas tenan un valor distinto para cada fila. Pero si tenemos dividida la
tabla por medio de la clusula GROUP BY estas columnas tomarn el mismo valor para
cada grupo por lo que no existir el problema anterior.
Slo se pueden seleccionar con funciones de grupo, columnas que formen parte del
GROUP BY.

CLAUSULA HAVING
Para el caso en el que se desea restringir los grupos de salida usamos la clusula
HAVING, seguida de las condiciones que deben cumplir . El proceso que se sigue es el
siguiente: la clusula WHERE restringe las filas de la tabla; una vez restringidas
stas se agrupan y despus de agrupadas slo se seleccionan aquellos grupos que
cumplan las condiciones indicadas en la clusula HAVING.

25

MANUAL SQL

26

MANUAL SQL

Captulo 6. Consultas anidadas


INTRODUCCIN

Una consulta anidada, como su nombre indica, es aquella que est contenida dentro de
otra. Los resultados de una la consulta anidada se utilizan como valores de
comparacin de la clusula WHERE de la consulta que la anida. Se evaluar antes la
sentencia SELECT anidada y una vez obtenido el valor o conjunto de valores se
evaluar la otra.
El formato es el siguiente:
SELECT col1, col1, ... , coln
FROM tabla1
WHERE col <operador lgico>
(SELECT col
FROM tabla2
WHERE condiciones).
Se deben tener en cuenta los siguientes aspectos para ejecutar este tipo de
sentencias:
- La tabla de la sentencia SELECT anidada no tiene porque ser la misma que la de la
sentencia SELECT que la anida.
- El tipo de datos de la 'col' de la sentencia SELECT superior y de la 'col' de la
anidada debe ser el mismo.
- Siempre se seleccionarn el mismo nmero de columnas de la sentencia SELECT
anidada que el de columnas que forman parte de la clusula WHERE en la superior.

27

MANUAL SQL
- Las filas devueltas por la consulta anidada deben corresponderse con el tipo de
operador lgico indicado. Si el operador lgico es '=' la sentencia SELECT anidada
solo podr devolver una nica fila.
CONSULTAS ANIDADAS QUE RETORNAN UNA UNICA FILA

Las consultas anidadas que retornan una nica fila se unen por medio del operador
lgico '='.
SELECT col1, col1, ... , coln
FROM tabla1
WHERE col =
(SELECT col
FROM tabla1
WHERE condiciones).
Si la consulta anidada retorna ms de un valor se produce un error en la ejecucin de
la superior por no poder comparar una sola columna con ms de un valor.
Tambin ocurre lo mismo con los operadores '<', '>', '<=', '>='.

CONSULTAS ANIDADAS QUE RETORNAN MULTIPLES FILAS


El operador lgico que deberemos utilizar para crear stas consultas es 'IN', ya que
permite comparar un valor con una lista de valores.
SELECT col1, col1, ... , coln
FROM tabla1
WHERE col IN
(SELECT col
FROM tabla1
WHERE condiciones).

28

MANUAL SQL
OPERADORES 'AND' Y 'OR' EN CONSULTAS ANIDADAS

MLTIPLES COLUMNAS EN CONSULTAS ANIDADAS


Dentro de la condicin que debe cumplir la consulta anidada, puede haber ms de una
columna.
SELECT col1, col1, ... , coln
FROM tabla1
WHERE (col1, col2, ... ,coln) IN
(SELECT col1, col2, ... , coln)
FROM tabla1
WHERE condiciones).
Se tiene que cumplir:
- El nmero de columnas que forman parte de la condicin y l de columnas
seleccionadas por la consulta anidada debe ser el mismo.
- Para que se cumpla esta condicin tienen que ser igual todos los valores de
las columnas devueltas por la consulta

anidada a los de las columnas que

forman parte de la condicin en la superior. No basta con que sea igual el valor
de una de las columnas.

OPERADORES ANY Y ALL


Se pueden realizar otro tipo de comparaciones de las empleadas hasta el momento
cuando la sentencia SELECT anidada devuelve ms de un valor, con dos nuevos
operadores: ANY y ALL. Estos actan sobre todo el conjunto de filas devueltas.
> ANY. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea mayor que algn valor devuelto por la sentencia SELECT
anidada.

29

MANUAL SQL
>= ANY. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea mayor o igual que algn valor devuelto por la sentencia
SELECT anidada.

< ANY. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea menor que algn valor devuelto por la sentencia SELECT
anidada.
<= ANY. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea menor o igual que algn valor devuelto por la sentencia
SELECT anidada.
= ANY. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea igual que algn valor devuelto por la sentencia SELECT
anidada. Es equivalente al operador IN.
> ALL. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea mayor que todos los valores devueltos por la sentencia
SELECT anidada.
>= ALL. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea mayor o igual que todos los valores devueltos por la
sentencia SELECT anidada.
< ALL. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea menor que todos los valores devueltos por la sentencia
SELECT anidada.
<= ALL. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea menor o igual que todos los valores devueltos por la
sentencia SELECT anidada.
!= ALL. La consulta seleccionar aquellas filas en las que el valor de la columna
de la condicin sea distinto que todo valor devuelto por la sentencia SELECT
anidada. Es equivalente al operador NOT IN.

CONSULTAS CORRELACIONADAS O SINCRONIZADAS


(Se expondrn en clase)

30

MANUAL SQL

Captulo 7. Combinaciones
INTRODUCCIN
Hasta el momento slo hemos podido seleccionar datos de una nica tabla. Con las
consultas anidadas podamos seleccionar filas de una tabla que cumpliesen una
condicin almacenada en otra tabla, pero nunca se poda seleccionar y visualizar a la
vez, datos que pertenecieran a ms de una tabla. Pues bien, por medio de la
combinacin de tablas se puede seleccionar datos de tablas diferentes.
La combinacin de dos tablas consiste en realizar el producto cartesiano de las dos.
El resultado de unir dos tablas ser otra que tiene por columnas la unin de las
columnas de las dos tablas y por filas el producto cartesiano de las dos, es decir, que
cada fila de la primera tabla se concatena con todas las filas de la otra.
Siempre que realicemos la combinacin de dos tablas tendr que haber una condicin
de combinacin por medio de la cual se puedan relacionar los datos de las dos tablas y
se restrinja as, aquellas filas del producto cartesiano que realmente nos interesan.
Un simple producto hace aparecer filas que contienen informacin falsa.

TIPOS DE COMBINACIONES
Los distintos tipos de combinacin que existen son:
1.- Producto cartesiano. No tiene restricciones.
2.- Combinacin comn. La condicin de combinacin contiene un operador de
igualdad.
3.- Combinacin no comn. La condicin de combinacin contiene un operador
que no es el de igualdad.
4.- Autocombinacin. Se realiza la combinacin de una tabla consigo misma.
5.- Combinacin exterior. Selecciona las filas de una tabla que no tienen
correspondencia con alguna de la otra.

31

MANUAL SQL

COMBINACION COMUN
La sintaxis de la combinacin de tablas es:

SELECT tabla1.col1, tabla2.col1, .....


FROM tabla1, tabla2
WHERE condicin de combinacin.
Se debe tener en cuenta:
- No importa el orden en el que las columnas sean seleccionadas, slo las
columnas que se seleccionan.
- Slo es obligatorio poner el nombre de la tabla antes que el de la columna
cuando el nombre de sta es ambiguo, es decir, cuando este nombre de
columna aparece en ms de una tabla de las seleccionadas.
- El orden en el que se especifican las tablas no influye en el resultado, pero s
en el tiempo de respuesta de la consulta. La segunda tabla es la conductora.
Cada fila de sta se concatena con todas las filas de la primera.
- Para que una combinacin est bien hecha siempre deber tener una
condicin de combinacin.
- Puede usarse la expresin tabla.* para obtener todas las columnas de una
tabla.
Puede ocurrir que exista otra condicin aparte de la de combinacin.

COMBINACION NO COMUN
Adems de las combinaciones anteriormente vistas basadas en el operador de
igualdad, hay otras basadas en operadores como >, <, <=, >=, !=, BETWEEN...AND. Son
las combinaciones no comunes.

COMBINACION DE MAS DE DOS TABLAS

32

MANUAL SQL
Tambin se pueden realizar combinaciones de ms de dos tablas, resultando como
combinacin de estas otra que tendr por columnas la unin de las columnas de todas
las tablas y por filas el producto cartesiano de las filas de todas las tablas.
Se pueden unir tantas tablas como se quiera pero siempre deber haber (n-1)
condiciones de combinacin para que la informacin sea coherente(n=n de tablas).

AUTOCOMBINACION
La combinacin de una tabla con ella misma se realiza por medio de columnas que
contienen la misma informacin. La combinacin ser otra tabla que tendr por
columnas dos veces las columnas de la tabla original y por filas el producto cartesiano
de la tabla por s misma.
La operacin equivale a que hubiera dos tablas iguales, (no las hay ya que solamente
tenemos una copia fsica de los datos). Todas las columnas son ambiguas, ya que
tienen el mismo nombre, por lo que se tendr que especificar la tabla a la que nos
estamos refiriendo. Como la tabla tambin es igual hay que renombrar una (o las dos),
y ms tarde hacer mencin a las columnas anteponiendo el nuevo nombre de cada
tabla.

COMBINACION EXTERIOR
Si en el resultado de la combinacin hay alguna fila que no tiene correspondencia con
ninguna de la otra y queremos seleccionarla utilizaremos combinaciones exteriores.
Para las columnas de la tabla que no tienen correspondencia toman valor nulo.
Para realizar una combinacin exterior se debe poner "(+)" en la condicin de
combinacin. Este signo se pone en la columna de la tabla que quedar vaca en la
combinacin.
SELECT tabla1.col1, tabla2.col1, .....
FROM tabla1, tabla2
WHERE tabla1.col1(+)= tabla2.col1.

OPERADORES DE CONJUNTO

33

MANUAL SQL
Son los mismos de la Teora de Conjuntos, si consideramos a las filas recuperadas de
una consulta como elementos que pertenecen a un conjunto. Combinan dos o ms
consultas en un mismo resultado. Los comandos SELECT deben tener el mismo nmero
de columnas y stas deben corresponderse en tipo, aunque sus longitudes pueden
variar.

Para estos operadores est implcita la clusula DISTINCT y son incompatibles con la
clusula ORDER BY.
Estos operadores de conjunto son:
- UNION.
- INTERSECT.
- MINUS.

Operador UNION.
El operador UNION devuelve todas las filas que han sido seleccionadas por los
comandos SELECT. Si hay dos iguales slo devuelve una de ellas.
La sintaxis es:
SELECT co1, col2, ... , coln
FROM tabla
WHERE condiciones
UNION
SELECT co1, col2, ... , coln
FROM tabla
WHERE condiciones.

Si los comandos SELECT se ejecutan sobre la misma tabla este resultado es


equivalente a realizar una sola consulta que contenga en la condicin un operador
lgico OR.

34

MANUAL SQL
Operador INTERSECT.
El operador INTERSECT devuelve las filas comunes que han sido seleccionadas por
los comandos SELECT. Slo devuelve una de ellas.
La sintaxis es:
SELECT co1, col2, ... , coln
FROM tabla
WHERE condiciones
INTERSECT
SELECT co1, col2, ... , coln
FROM tabla
WHERE condiciones.

Si los comandos SELECT se ejecutan sobre la misma tabla el resultado es equivalente


a realizar una sola consulta que contenga en la condicin un operador lgico AND.

Operador MINUS.
El operador MINUS devuelve las filas que han sido seleccionadas por el primer
comando SELECT y no lo han sido por el segundo.
La sintaxis es:
SELECT co1, col2, ... , coln
FROM tabla
WHERE condiciones
MINUS
SELECT co1, col2, ... , coln
FROM tabla
WHERE condiciones.

35

MANUAL SQL

Captulo 8. Lenguaje de manipulacin de datos


ACTUALIZACIN DE DATOS
Hay tres formas de actualizar los datos de una tabla:
1. Si se tiene que aadir una nueva fila a una tabla se utilizar el comando
INSERT.
2. Si se tiene que borrar una fila en una tabla se utilizar el comando DELETE.
3. Si se tiene que modificar alguna columna de una fila se utilizar el comando
UPDATE.
Los comandos anteriores se conocen a menudo como comandos de manipulacin de
datos o sentencias del lenguaje de manipulacin de datos (DML).

INSERCIN DE FILAS
Para aadir nuevas filas a tablas ya existentes se utiliza el comando INSERT:
INSERT INTO <nombre_de_tabla>
[ ( <nombre_de_columna1>, <nombre_de_columna2>, ... ) ]
VALUES ( <valor1>, <valor2>, ... );
Insercin de todas las columnas de una fila

36

MANUAL SQL
Cuando se vayan a insertar valores para todas las columnas de una fila se puede
utilizar el formato simplificado:
INSERT INTO <nombre_de_tabla>
VALUES ( <valor1>, <valor2>, ... );
El orden de los valores dentro del parntesis debe coincidir exactamente con el
orden de las columnas tal y como fueron definidas al crear la tabla.
A cada columna se le deber dar un valor, se puede utilizar la palabra clave NULL
para indicar que esa columna tiene un valor nulo.

Insercin parcial de columnas


Si se quiere insertar valores slo en parte de las columnas, habr que indicar en la
sentencia INSERT cules son las columnas en las que vamos a insertar valores.

INSERT INTO <nombre_de_tabla>


[ ( <nombre_de_columna1>, <nombre_de_columna2>, ... ) ]
VALUES ( <valor1>, <valor2>, ... );
El orden de los valores debe coincidir con el orden de las columnas que se ha
especificado en la lista de columnas en las que se van a introducir datos.
Pero el orden no est determinado por el orden de las columnas dentro de la tabla.
Si una columna est definida como no nula hay que insertar obligatoriamente un valor
en ella porque sino, al ejecutar el comando, se producir un error.

Insercin de datos desde otra tabla


Otra posibilidad de crear filas es insertar los datos desde otra u otras tablas:

INSERT INTO <nombre_de_tabla>


[ ( <nombre_de_columna1>, <nombre_de_columna2>, ... ) ]

37

MANUAL SQL
SELECT <lista_de_columnas_y_expresiones>
FROM <lista_de_tablas>
WHERE <criterios_de_seleccin>;
Se insertarn los datos de las tablas que figuren en la lista de tablas y que cumplan
los criterios de seleccin.
El orden de las columnas en la clusula SELECT debe coincidir con el orden de las
columnas de la clusula INSERT.
Se pueden incluir en la lista de seleccin expresiones aritmticas, valores reservados
del sistema (SYSDATE) o funciones.

Insercin de fechas
Si estamos insertando datos en una columna de tipo fecha tendremos que introducir
los datos con el formato por defecto de las fechas DD-MES-AA. Si la fecha tiene
otro formato se deber utilizar la funcin TO_DATE para indicarlo.
Para insertar datos de tipo fecha tambin podemos utilizar la palabra reservada
SYSDATE para insertar la fecha actual.

Consideraciones al insertar filas


Para insertar filas en una tabla sta deber existir.
Se utilizar el segundo formato cuando no haya que insertar en todas las columnas o
cuando se quiera cambiar el orden de las columnas.
Las columnas de la tabla que no aparezcan en el comando INSERT tomarn un valor
nulo.
Los valores insertados deben corresponderse con el tipo de datos de la columna.
Los valores de tipo CHAR y DATE se deben especificar entre comillas simples.
Si se utiliza el tercer formato la sentencia SELECT tiene que tener la sintaxis de
consulta SQL, pero no se puede incluir la clusula ORDER BY.

38

MANUAL SQL
MODIFICACION DE FILAS
El comando de manipulacin de datos UPDATE cambia los datos de una tabla dndoles
nuevos valores. Pueden cambiarse todos los valores de una columna de todas las filas
de la tabla o especificar las filas que deben ser cambiadas.
UPDATE <nombre_de_la_tabla>
SET columna = <nuevo_valor> [, columna = <nuevo_valor>]
[ WHERE <criterio_de_seleccin_de_registro> ];

El nuevo valor de la columna se puede obtener mediante una consulta anidada.


UPDATE <nombre_de_la_tabla>
SET columna = ( SELECT columna y/o expresin FROM ...)
[ WHERE <criterio_de_seleccin_de_registro> ];

En los criterios de seleccin pueden aparecer tambin consultas anidadas.

Consideraciones al modificar filas


Si se omite la clusula WHERE se modificarn todas las filas de la tabla, pero si se
especifica, se modificarn slo las filas que cumplan la condicin.
El nuevo valor del dato se puede obtener mediante expresiones, constantes o
subconsultas.
Si el nuevo valor de la columna se obtiene a travs de una subconsulta, esta
subconsulta deber recuperar tantas columnas como se estn modificando.

BORRADO DE FILAS
Los usuarios pueden borrar filas de las tablas utilizando el comando DELETE.
DELETE [ FROM ] <nombre_de_la_tabla>
[ WHERE <criterio_de_seleccin> ];

39

MANUAL SQL

Si un comando DELETE no contiene la clusula WHERE se borrarn todas las filas de


una tabla.
La definicin de la tabla seguir almacenada en la base de datos y se podrn insertar
nuevas filas con el comando INSERT.
Las filas no se pueden borrar parcialmente, siempre lo son en su totalidad.

PROCESO DE TRANSACCIONES
ORACLE permite que los cambios en la base de datos se puedan agrupar en
transacciones para mantener la consistencia e integridad de los datos.
Slo se producirn los cambios contenidos en una transaccin si se producen todos. Si
no se producen todos no se producir ninguno.
Para controlar explcitamente el proceso de transacciones se dispone de los
siguientes comandos SQL:
COMMIT [ WORK ];
Seala el final de una transaccin y el principio de otra para indicarle al sistema que
se deben validar los cambios que se produjeron desde el principio de la transaccin
que se da por concluida.
ROLLBACK [ WORK ];
Seala el final de una transaccin y el principio de otra para indicarle al sistema que
se restaure el estado de la base de datos tal y como estaba al comenzar la
transaccin.
SQL*PLUS dispone de un comando para controlar las validaciones de forma
automtica:
SHOW AUTOCOMMIT

Nos muestra si los cambios van a validarse


automticamente despus de cada operacin de
manipulacin de datos (IMM) o si es el usuario el
que llevar el control de las transacciones con los
comandos anteriores (OFF).

SET AUTOCOMMIT [ON/OFF]

Sirve para especificar la opcin deseada.

40

MANUAL SQL
Todos los cambios que se han producido en la base de datos desde la ltima validacin
o restauracin se validan con un COMMIT y se restaura la situacin anterior con un
ROLLBACK.
Antes de que se valide cualquier cambio ste slo ser visible para el usuario que lo
ha hecho (consistencia en la lectura).
Todos los cambios que formen una unidad lgica deben ir incluidos dentro de una
transaccin y validarse o restaurarse todos a la vez.
Si

la

opcin

AUTOCOMMIT

est

activa

todos

los

cambios

se

validan

automticamente cuando son ejecutados.


Los comandos del lenguaje de definicin de datos llevan implcita una validacin.
La desconexin de ORACLE lleva implcita una validacin.
Si se produce una cada del sistema o una terminacin anormal de una aplicacin se
llevar a cabo una restauracin automtica.

41

MANUAL SQL

Captulo 9. Lenguaje de definicin de datos


CREACIN DE TABLAS
Para crear una tabla en la base de datos se utiliza el comando CREATE TABLE. Este
comando insertar la definicin de la tabla en el diccionario de datos y reservar
espacio en los ficheros de la base de datos para la introduccin de la informacin.
En el comando se deber indicar:

42

MANUAL SQL
-

el nombre de la tabla

por cada columna de la tabla


*

el nombre de la columna

el tipo de datos
(CHAR,VARCHAR2, NUMBER, DATE, LONG)

el tamao mximo de las columnas de tipo numrico y


alfanumrico (slo es obligatorio para las de tipo
alfanumrico)

si se permite que la columna contenga valores nulos

Las anteriores caractersticas se almacenan en las tablas del diccionario de datos


para comprobaciones posteriores.
Para crear tablas los usuarios disponen del comando CREATE TABLE.
El comando CREATE TABLE se puede utilizar con dos formatos distintos.

En el primer formato tenemos que definir una por una todas las columnas de la tabla.
CREATE TABLE <nombre_de_la_tabla>
(<nombre_de_la_columna1> <tipo_de_datos> [(tamao)] [NOT NULL],
<nombre_de_la_columna2> <tipo_de_datos> [(tamao)] [NOT NULL],
...
<nombre_de_la_columna254> <tipo_de_datos> [(tamao)] [NOT NULL]);

Con el segundo formato se copia la definicin de tablas ya existentes en el diccionario


de datos, y adems se copian tambin las filas de esas tablas.
CREATE TABLE <nombre_de_la_tabla> [ < lista_nuevas_columnas > ]
AS SELECT < lista_de_columnas_existentes >
FROM < lista_de_tablas_existentes >
WHERE < lista_de_condiciones >;

43

MANUAL SQL

< lista_nuevas_columnas >


Nombre de las nuevas columnas de la tabla separados por comas.
< lista_de_columnas_existentes >
Nombre de columnas de tablas que aparecen en el FROM.
< lista_de_tablas_existentes >
Nombre de las tablas de las que se va a copiar la definicin de la columnas.
< lista_de_condiciones >
Condiciones que deben cumplir las filas que se van a copiar.
Cuando se utiliza el segundo formato no se pueden especificar tipos de datos, pero se
pueden utilizar las funciones TO_CHAR, TO_DATE y TO_NUMBER para cambiar el
tipo de datos de las antiguas columnas.

Nombres de tablas y columnas


NOMBRES UNICOS
-

los nombres de las tablas de un usuario no se pueden repetir

los nombres no pueden coincidir con palabras clave de ORACLE

los nombres de las columnas deben ser nicos dentro de una tabla

CARACTERES
-

el primer carcter de un nombre debe ser una letra mayscula o


minscula

el resto de los caracteres es libre con la excepcin de las comas

los nombres pueden tener como mximo 30 caracteres

si se incluye el nombre entre dobles comillas no se tienen por qu tener


en cuenta las restricciones anteriores

TIPOS DE DATOS ORACLE

44

MANUAL SQL
Los datos de la base de datos ORACLE se almacenan en las filas de las tablas. Una
tabla puede contener hasta 254 columnas y cada columna puede ser de uno de los
siguientes tipos de datos:
- VARCHAR2
- NUMBER
- DATE
- LONG
Tipo de datos alfanumrico (VARCHAR2)
VARCHAR2 (n)
Los datos de tipo alfanumrico pueden contener letras, nmeros, signos de
puntuacin y caracteres especiales como el +, -, $ o el %.
La longitud mxima de una columna de tipo carcter se especifica en la definicin de
la columna y podr ser como mximo de 4kb caracteres.
No importa especificar tamaos muy grandes puesto que los datos se almacenan como
cadenas de longitud variable, no se reserva espacio para el tamao mximo.

Tipo de datos numrico (NUMBER)


NUMBER (n,p)
Se permiten nmeros, el signo y un punto decimal. El primer nmero dentro del
parntesis indica el nmero total de dgitos que se pueden almacenar y p los dgitos
que habr a la derecha del punto decimal. Si se omite la especificacin de tamao se
podrn introducir hasta 105 dgitos, pero se almacenarn nicamente 38.
Tipo de datos fecha (DATE)
DATE
Los datos de tipo fecha se almacenan como una cadena de caracteres de longitud fija
de siete bytes. Para cada dato de tipo fecha se almacena la siguiente informacin:
- Siglo (1 byte)
- Ao (1 byte)

45

MANUAL SQL
- Mes (1 byte)
- Da (1 byte)
- Hora (1 byte)
- Minuto (1 byte)
- Segundo (1 byte)
Si al insertar un dato de tipo fecha no se especifica la hora con la funcin TO_DATE,
ORACLE tomar por defecto las doce de la maana.
El rango de valores est entre el uno de enero del ao 4712AC y el 31 de diciembre
del ao 4712DC.

Tipo de datos LONG


Las columnas de tipo LONG son cadenas de caracteres de longitud variable de 2GB
de tamao. Se utilizan para almacenar cadenas de caracteres o incluso pequeos
documentos.
Las columnas de este tipo estn sujetas a una serie de restricciones:
- slo se admite una columna de este tipo por tabla
- tablas con columnas de este tipo no se pueden agrupar
- columnas de este tipo no se pueden indexar
- no se pueden utilizar este tipo de columnas en clausulas WHERE, GROUP BY,
CONNECT BY, ORDER BY, DISTINCT
- no se pueden utilizar funciones con columnas de este tipo
- columnas de este tipo no pueden aparecer en columnas seleccionadas en
consultas anidadas
- no pueden aparecer en ningn tipo de expresiones
- no pueden aparecer en consultas que estn unidas con otras consultas
mediante UNION, MINUS, INTERSECT

RESTRICCIONES DE INTEGRIDAD

46

MANUAL SQL
ORACLE admite en la sintaxis de las sentencias SQL CREATE TABLE y ALTER
TABLE la especificacin de restricciones de integridad de tabla y de columna. Estas
restricciones se introducen en las tablas del diccionario de datos para que se
verifiquen en posteriores versiones de ORACLE, puesto que en la versin actual no se
comprueban (a excepcin de NOT NULL).
Las restricciones se deben comprobar al ejecutar cualquier consulta de manipulacin
de datos y se deben cumplir para que las sentencias DML tengan xito.
Las restricciones de tabla forman parte de la definicin global de la tabla, se
especifican despus de la definicin de las columnas y se pueden referir a una o ms
columnas de la tabla:
[ { UNIQUE PRIMARY KEY } ( <lista_de_columnas> )
[CONSTRAINT <nombre_restriccin>] ]
[ FOREIGN KEY ( <lista_de_columnas> )
REFERENCES [<usuario>.]<tabla> [ (lista_de_columnas) ]
[CONSTRAINT <nombre_restriccin>] ]
[ CHECK (<condicin>) [CONSTRAINT <nombre_restriccin>] ]

Las restricciones de integridad de columna se refieren a la columna en cuya


descripcin se encuentra la restriccin:
[ { NULL NOT NULL } [CONSTRAINT <nombre_restriccin>] ]
[ { UNIQUE PRIMARY KEY }
[CONSTRAINT <nombre_restriccin>] ]
[ FOREIGN KEY REFERENCES [<usuario>.]<tabla> [(columna)]
[CONSTRAINT <nombre_restriccin>] ]
[ CHECK (<condicin>) [CONSTRAINT <nombre_restriccin>] ]

Si a una restriccin no se le da nombre el sistema se encarga de drselo con el


siguiente formato: SYS_Cn, donde la n es un nmero para garantizar la unicidad de
los nombres de restricciones.

47

MANUAL SQL
Tipos de restricciones:
- NULL:

Indica si una columna puede ser o no nula en una tabla


(es la nica restriccin que se comprueba en la
actualidad).

- UNIQUE:

Indica que todas las filas de una tabla deben tener un


valor distinto para esa columna o columnas que deben
ser NOT NULL y no pueden ser PRIMARY KEY.

- PRIMARY KEY:

Indica que esa columna o columnas constituyen la clave


primaria de la relacin y como tales deben ser NOT
NULL. Se puede especificar slo una vez en cada tabla.
Si la clave primaria es una nica columna se puede
especificar como restriccin de tabla o de columna, si la
clave primaria la forman ms de una columna se puede
especificar slo como restriccin de tabla.

- FOREIGN KEY/
REFERENCES:

Indica que esa columna o columnas son una clave ajena


de la columna o columnas que son clave primaria de la
tabla que se indica detrs de la clusula REFERENCES.
No va a permitir inserciones ni actualizaciones si el valor
correspondiente no existe ya en la otra tabla. No va a
permitir

borrados

que

violen

la

restriccin

de

integridad.
- CHECK:

Indica que los valores de una columna o un grupo de


columnas de una fila deben cumplir la condicin antes de
que se pueda insertar o actualizar esa fila.

MODIFICACIN DE LA ESTRUCTURA DE UNA TABLA


Una de las principales caractersticas de ORACLE es la posibilidad que ofrece de
modificar la definicin de las tablas despus de haber sido creadas.
Para ello se dispone del comando ALTER TABLE.
Aadir nuevas columnas
Para aadir nuevas columnas a la definicin de una tabla el comando ALTER TABLE
tiene el siguiente formato:

48

MANUAL SQL
ALTER TABLE <nombre_de_la_tabla>
ADD ( <nombre_de_la_nueva_columna1> <tipo_de_datos>,
<nombre_de_la_nueva_columna2> <tipo_de_datos>,
... );
No se pueden especificar las columnas como no nulas ya que necesariamente
contendrn valores nulos en un principio.

Modificar la definicin de una columna


Para modificar la definicin de una columna utilizaremos el siguiente formato del
comando ALTER TABLE:
ALTER TABLE <nombre_de_la_tabla>
MODIFY ( <nombre_de_la_columna1> <tipo_de_datos> [NULL/NOT NULL],
<nombre_de_la_columna2> <tipo_de_datos> [NULL/NOT NULL],
... );

Restricciones al modificar la estructura de una tabla


Se podr siempre:
- cambiar la definicin de una columna para permitir valores nulos
- aumentar el tamao de definicin de una columna
- aadir una columna que permita valores nulos
Si en una tabla no hay filas que tengan valores en la columna que van a ser modificada,
se podr:
- disminuir el tamao de la columna
- cambiar el tipo de dato de la columna
Si en una tabla todas las filas tienen valores no nulos en la columna que va a ser
modificada, se podr:
- cambiar la definicin de la columna para que no pueda contener valores nulos

49

MANUAL SQL
Si una tabla est vaca, se podr:
- aadir una columna que no admita nulos (se aade primero la columna y
despus se modifica para que no admita valores nulos)

BORRADO DE TABLAS
Para borrar la definicin de las tablas del diccionario de datos se utiliza el comando
DROP TABLE.
DROP TABLE <nombre_de_la_tabla>;
Cuando se ejecuta este comando se producen los siguientes efectos:
-

la definicin de la tabla ser borrada del diccionario de datos

el espacio que ocupaba la tabla se recupera para nuevos datos de la base de

datos
-

se borrarn todas las filas de la tabla sin previa advertencia

no se podrn recuperar ni la definicin ni los datos de la tabla

una tabla slo la puede borrar su propietario

Diferencia entre la sentencia DROP TABLE y DELETE


La diferencia entre la sentencia DROP TABLE y la sentencia DELETE consiste en que
la sentencia DROP TABLE adems de borrar las filas de la tabla, tambin borra su
definicin en el diccionario de datos.
La sentencia DROP TABLE, por ser un comando del lenguaje de definicin de datos se
valida de forma automtica por lo que no se podr volver al estado anterior mediante
un "rollback".
La sentencia DELETE borra todas las filas de una tabla si no imponemos ninguna
condicin, pero al ser un comando de manipulacin de datos se puede volver la
situacin anterior si no se han validado los cambios.

CAMBIO DEL NOMBRE A UNA TABLA

50

MANUAL SQL
Para cambiar de nombre a una tabla sin que se vea afectado el almacenamiento de sus
datos se utiliza el comando RENAME.
RENAME <antiguo_nombre> TO <nuevo_nombre>;
En el diccionario de datos la tabla quedar reflejada con el nuevo nombre, pero no
tendr ninguna repercusin sobre el almacenamiento de los datos.
La tabla no se podr volver a referenciar por el antiguo nombre.
El propietario es el nico que puede cambiar de nombre a una tabla.

COMANDO COMMENT
Para incluir comentarios sobre tablas y columnas en el diccionario de datos se utiliza
el comando COMMENT.
COMMENT ON TABLE <nombre_de_la_tabla> IS 'texto';
COMMENT ON COLUMN

<nombre_de_la_tabla>.<nombre_de_la columna>
IS 'texto';

El propietario es el nico autorizado en hacer comentarios sobre sus tablas y/o


columnas.
El texto del comentario puede tener 240 caracteres como mximo.

SINNIMOS
Dado que es difcil trabajar con nombres demasiado largos o complicados, el usuario
puede crear nombres alternativos para esas tablas.
CREATE [ PUBLIC ] SYNONYM <nombre_del_sinnimo>
FOR [propietario.]<nombre_de_la_tabla o vista>;
Las tablas o vistas se podrn referenciar por su nombre o por el de sus sinnimos.
El administrador de la base de datos puede crear sinnimos de uso general para
tablas y vistas que sean utilizadas por la totalidad de los usuarios, usando para ello la
palabra clave PUBLIC.

51

MANUAL SQL
Los usuarios no pueden crear tablas que tengan el mismo nombre que sinnimos
pblicos.
Para borrar un sinnimo se utiliza el siguiente comando SQL:
DROP [PUBLIC] SYNONYM <nombre_del_sinnimo>;
La tabla a la que se refiere el sinnimo no se ver afectada.

SECUENCIAS
El generador de secuencias se utiliza para generar nmeros secuenciales que son
utilizados con el fin de manipular las tablas (p.e. generacin automtica de claves
primarias o coordinacin de claves para el acceso a varias tablas.
En primer lugar hay que ejecutar una sentencia SQL que defina la secuencia
especificando el nombre de la secuencia, si es descendente o ascendente, los valores
mximos y mnimos o si la secuencia ser cclica. Una vez se ha creado una secuencia,
sta la pueden utilizar mltiples usuarios para mltiples tablas.
Creacin de una secuencia:
CREATE SEQUENCE < nombre_secuencia >
[ INCREMENT BY entero ]
[ START WITH entero ]
[ MAXVALUE entero NOMAXVALUE ]
[ MINVALUE entero NOMINVALUE ]
[ CYCLE NOCYCLE ]
[ CACHE entero NOCACHE ]
[ ORDER NORDER] ;
Las pseudocolumnas CURRVAL y NEXTVAL se utilizan para obtener el valor actual y
siguiente de la secuencia y se pueden especificar en sentencias de consulta, de
insercin y de actualizacin, refirindose a ellos como nombre_secuencia.currval o
nombre_secuencia.nextval.
Utilizacin de NEXTVAL y CURRVAL:

52

MANUAL SQL
-

No se puede utilizar ninguna de las dos pseudocolumnas en clusulas de


condicin ni en un nivel de anidamiento por debajo del primero, ni en
consultas que contengan GROUP BY, ORDER BY, DISTINCT o
CONNECT BY. Tampoco se pueden utilizar en vistas.

NEXTVAL y CURRVAL se pueden utilizar en la clusula VALUES de las


sentencias de insercin, en la parte derecha de la clusula SET de las
sentencias de actualizacin y en el nivel exterior de una consulta con
las restricciones comentadas con anterioridad. Tambin se puede
utilizar en el SELECT exterior de las sentencias CREATE TABLE AS,
INSERT ... SELECT y a la derecha de la clusula SET.

Para cambiar las opciones especificadas en la creacin de la secuencia se puede


utilizar la sentencia ALTER SEQUENCE, que tiene la misma sintaxis que la de
creacin (hay que tener en cuenta que no se puede poner MAXVALUES por debajo
del actual).

DICCIONARIO DE DATOS
En el diccionario de datos se almacena la informacin sobre todos los objetos de la
base de datos (tablas, vistas, sinnimos, ndices, agrupamientos, secuencias, columnas,
etc ...).
El diccionario de datos es consultado tanto por ORACLE para hacer comprobaciones,
como por los usuarios para obtener informacin sobre la base de datos.
El diccionario de datos es actualizado automticamente por ORACLE sin interrumpir
el trabajo de otros usuarios cuando se ejecutan comandos del lenguaje de definicin
de datos (DDL) o del lenguaje de control de datos (DCL).
Los usuarios pueden acceder a las informacin del diccionario de datos a travs de
las vistas que se crean al inicializar la base de datos con este fin.
Para visualizar las vistas que puede consultar el usuario se puede ejecutar la siguiente
sentencia SQL.
Las vistas del diccionario de datos se dividen en tres grandes grupos segn el prefijo
que lleven, que nos dar una indicacin de la informacin contenida en la vista:
USER_*

Este tipo de vistas se refieren a los objetos creados por un


usuario en concreto o los privilegios concedidos por l.

53

MANUAL SQL
ALL_* Este tipo de vistas se refieren a los objetos creados por el usuario y a
los que puede acceder porque se le han concedido privilegios de
acceso.
DBA_*Este tipo de vistas slo las puede consultar los usuarios con privilegios
de administrador puesto que contienen informacin general de
la base de datos.
Las vistas del diccionario de datos se consultan como cualquier otra tabla del usuario.

54

MANUAL SQL

Captulo 10. Vistas


INTRODUCCIN
Una vista es una ventana a travs de la cual vemos subconjuntos de datos de tablas
ya existentes.
Los "datos" de las vistas no se almacenan fsicamente, se obtienen de las tablas que
se estn especificando.
Las vistas se definen por medio de sentencias SQL, que se almacenan en la vista del
diccionario de datos VIEWS.
La informacin se recupera a travs de las vistas con la misma sintaxis que hemos
utilizado para las tablas poniendo en vez del nombre de la tabla el nombre de la vista.
Una ventana puede especificar un subconjunto de datos vertical (subconjunto de
filas) y/o horizontal (subconjunto de columnas) de una tabla.
Los datos se pueden obtener a partir de mltiples tablas: unin de tablas y
combinacin de tablas.
Razones para la utilizacin de vistas
1.-

Simplificar consultas

Algunas aplicaciones requieren consultas muy complejas, almacenando consultas


intermedias se permite a los usuarios simplificar sus operaciones.
2.-

Seguridad

Utilizando los mecanismos de seguridad sobre tablas y vistas (lenguaje de control de


datos DCL) y las vistas se tiene un sistema potente y flexible de control de acceso a
los datos.
3.-

Almacenamiento

Las vistas son proposiciones SQL que se almacenan en el diccionario de datos de


forma compilada, por lo que el costo de anlisis y compilacin slo se produce al
crearlas.

55

MANUAL SQL
Las vistas contienen slo datos virtuales, los datos reales se almacenan en los bloques
de datos de las tablas, por lo tanto slo se almacena la definicin compilada, por lo
que el gasto de almacenamiento es mnimo.
4.-

Independencia lgica

Conforme va creciendo la base de datos las tablas se pueden alterar, unir y combinar
con otras, etc ...
Creando vistas de esas tablas originales se garantiza la independencia lgica de los
datos, los usuarios y las aplicaciones podrn seguir refirindose a los datos como si
estos tuviesen la misma estructura que antes.

CREACIN DE VISTAS
Para crear vistas se utiliza el comando del lenguaje de definicin de datos CREATE
VIEW, que sirve para darle un nombre a un comando SQL vlido.
CREATE VIEW <nombre_de_la_vista> [<lista_de_columnas>]
AS <sentencia_SQL_vlida>;
Se utiliza la lista_de_columnas para cambiarle el nombre a las columnas que se
obtienen con la sentencia SQL.
Como comentamos anteriormente las vistas se tratan como las tablas para recuperar
datos.
Cada vez que se crea una vista se actualizan las tablas del diccionario de datos para
incluir el nombre y la definicin de este nuevo objeto.
Para comprobarlo los usuarios pueden consultar la vista del diccionario de datos
VIEWS.

VISTAS CON COLUMNAS VIRTUALES


Las columnas que se crean con una vista no tienen por qu ser columnas de la tabla de
la que se obtiene la vista, pueden ser tambin columnas virtuales en las que se agrupa
la informacin de las columnas de la tabla.

COMBINACIONES PARA DEFINIR VISTAS

56

MANUAL SQL
Se pueden definir vistas que obtengan los datos de la combinacin de varias tablas.

MANIPULACION DE DATOS A TRAVES DE LAS VISTAS


Actualizacin de las tablas
Como las vistas son ventanas a travs de las que se ven los datos de las tablas,
cualquier actualizacin (insercin, borrado, modificacin) de una fila quedar
automticamente reflejada en la vista.
Actualizacin de las vistas
Tambin se puede utilizar el lenguaje de manipulacin de datos con las vistas, y los
cambios quedarn automticamente reflejados en los bloques de datos de las tablas.
Al igual que con las tablas se pueden conceder privilegios (comando GRANT) sobre las
vistas a otros usuarios.
Al insertar filas a travs de una vista hay que tener en cuenta que las columnas no
especificadas en la definicin de la vista tomarn valores nulos, por lo que si una est
definida como no nula, no se podrn insertar filas a travs de la vista.
La manipulacin de datos a travs de las vistas se podr realizar slo si:
-

la vista est basada en una nica tabla

su definicin no contiene ni funciones ni expresiones

su definicin no contiene clusulas GROUP BY

Clusula "with check option"


Esta opcin fuerza a que las inserciones y modificaciones hechas a travs de la vista
afecten slo a filas que cumplan las condiciones de creacin de la vista.
CREATE VIEW <nombre_de_la_vista> [<lista_de_columnas>]
AS <sentencia_SQL_vlida>
WITH CHECK OPTION;
BORRADO DE VISTAS
El comando DROP VIEW borra la definicin de las vistas del diccionario de datos, por
lo que no se podrn volver a utilizar.

57

MANUAL SQL
Las tablas referenciadas en la vista borrada no se vern afectadas.
DROP VIEW <nombre_de_la_vista>;
No existe un comando para modificar la definicin de una vista, si se desea hacerlo
habr que borrarla y volver a crear la vista.
Si se borra una tabla o vista que estuviese contenida en la definicin de una vista, se
borrar esta ltima vista tambin.

RESUMEN
Los nombres por omisin de las columnas de las vistas coinciden con los nombres en
las tablas de las que se han obtenido.
Cuando se seleccionen columnas virtuales para crear vistas se les deber dar un nuevo
nombre.
Cuando se seleccionen columnas de varias tablas habr que cambiar el nombre a las
columnas que resulten ambiguas.
Para definir vistas se pueden utilizar otras vistas o tablas.
Se pueden utilizar funciones, expresiones, la clusula "group by" para definir nuevas
vistas.
No se puede utilizar la clusula "order by" para definir nuevas vistas, se podr
utilizar cuando se recuperen los datos de las vistas.

58

MANUAL SQL

Captulo 11. Mejora de prestaciones


INTRODUCCIN
Existen dos formas fundamentales de mejorar las prestaciones de un sistema
ORACLE:
-

indexacin

agrupamientos

Los dos mtodos anteriores no afectan la sintaxis de los comandos SQL, por lo que
cualquier consulta y/o actualizacin de datos se realizar de la misma forma.
Sin embargo, los tiempos de respuesta mejorarn considerablemente.
Los ndices se utilizan principalmente por dos razones:
- aumentar la velocidad de acceso a columnas indexadas
- garantizar la unicidad de datos
Los ndices localizan las filas que han sido seleccionadas en una consulta y reducen de
esta manera el nmero de accesos a disco.
La utilizacin de ndices es muy recomendable para mejorar el rendimiento en la unin
de mltiples tablas.
Los ndices pueden garantizar que los datos de una columna o de un conjunto de
columnas tengan un valor nico para cada fila de la tabla.
Esta ltima propiedad nos permite simular las restriccin de entidad (clave principal)
del modelo de datos relacional.
El propietario de una tabla o los usuarios que tengan privilegio de indexacin sobre la
misma pueden indexar sus columnas.
CREATE [ UNIQUE ] INDEX < nombre_del_ndice >
ON < nombre_de_la_tabla >
(< nombre_de_la_columna1 > [, < nombre_de_la_columna2 >,...]);

BORRADO DE NDICES

59

MANUAL SQL
Los ndices, como cualquier otro objeto de la base de datos, se borran con el comando
de definicin de datos DROP:
DROP INDEX < nombre_del_ndice >;

UTILIZACIN DE NDICES
El optimizador ORACLE analizar la sentencia SQL para determinar el camino de
acceso ms rpido a los datos. Si las columnas que aparecen en la clausula de
condicin "where" estn indexadas, ORACLE utilizar los ndices para acceder a los
datos.
La sintaxis de los comandos SQL no vara aunque una columna est indexada.
Para que se utilice un ndice definido sobre una columna, sta no debe ser modificada
por ninguna operacin.

ALMACENAMIENTO DE NDICES
Los ndices se almacenan separadamente de los datos, por ello se pueden crear y
borrar en cualquier momento sin afectar a los datos, slo se ver afectado el
rendimiento.
Los ndices son actualizados automticamente por ORACLE cada vez que se valida una
sentencia de actualizacin de datos.
No existe un lmite para la creacin de ndices.
Para conocer los ndices que ha creado un usuario se puede consultar la vista del
diccionario de datos INDEXES.

RECOMENDACIONES PARA INDEXAR


Se deben indexar las columnas que forman parte del predicado de unin de una
combinacin.
No se deben utilizar ndices cuando la columna indexada pertenece a una tabla
pequea.
Para cada ndice habr que evaluar si la mejora de prestaciones no se ve superada por
los costes de mantenimiento y almacenamiento.

60

MANUAL SQL
Si los datos son estticos se reducirn los costes de mantenimiento y es ms
recomendable crear ndices.
Para reducir los costes de mantenimiento se deben cargar primero los datos y
despus crear el ndice.

INDICES CONCATENADOS
Con el comando CREATE INDEX se pueden crear ndices concatenados, nombrando
las columnas de la tabla que deben ser claves, en el orden que deben aparecer.
Para borrarlos se utilizar el mismo comando DROP INDEX.

AGRUPAMIENTOS
Los agrupamientos son un mtodo alternativo para almacenar los datos en la base
datos ORACLE que no tienen ninguna influencia en la sintaxis de los comandos SQL.
Las agrupamientos son totalmente transparentes a los usuarios: no hay que modificar
ni las consultas ni las aplicaciones, las consultas son iguales tanto si las tablas estn
agrupadas como si no.
Los datos de una o ms tablas (hasta 32) se almacenan en un mismo bloque fsico para
mejorar el rendimiento en el acceso a los datos de esas tablas.
Se suelen agrupar tablas que tienen columnas comunes y que son utilizadas en
combinaciones de tablas (joins).
Los agrupamientos no pueden ser consultados como tales, se consultarn las tablas
que estn incluidas en l.
Cuando se crea un agrupamiento, se tiene que crear un ndice sobre la clave del
agrupamiento antes de poder empezar a trabajar con l.
Creacin de agrupamientos
La sintaxis del comando SQL para crear agrupamientos es la siguiente:
CREATE CLUSTER < nombre_del_agrupamiento >
( < columna_clave1 > < tipo_de_datos1 >,
< columna_clave2 > < tipo_de_datos2 >,

61

MANUAL SQL
...
< columna_clave16 > < tipo_de_datos16 > );

Especificacin de las tablas que se deben agrupar


Se utiliza el comando CREATE TABLE en cualquiera de sus dos formatos para
especificar las tablas que se deben agrupar (al menos una columna de la clave debe
ser no nula):
Con el primer formato:
CREATE TABLE < nombre_de_la_nueva_tabla >
( < columna1 > < tipo_de_datos1 >,
< columna2 > < tipo_de_datos2 >,
...
< columnaN > < tipo_de_datosN > )
CLUSTER < nombre_del_agrupamiento >
( < nombre_de_las_columnas > );
Con el segundo copiamos los datos de una tabla ya existente en los bloques del
agrupamiento:
CREATE TABLE < nombre_de_la_nueva_tabla >
CLUSTER < nombre_del_agrupamiento >
( < nombre_de_las_columnas > )
AS SELECT * FROM < tabla_existente >;
Despus habr que borrar la tabla de la que se han obtenido los datos, puesto que si
no, tendremos dos copias de los datos.
Tambin habr que cambiar de nombre a la nueva tablas para que los usuarios y las
aplicaciones puedan seguir refirindose a ella con el mismo nombre.
DROP TABLE < tabla_existente >;
RENAME < nombre_de_la_nueva_tabla > TO < tabla_existente >;

62

MANUAL SQL
Borrar agrupamientos
Antes de borrar un agrupamiento habr que borrar las tablas que estn incluidas en
l a menos que se indique la clusula INCLUDING CONTENTS.
DROP CLUSTER <nombre_del_agrupamiento> [ INCLUDING CONTENTS ];

Ejemplo con proceso de creacin:

create cluster c1 (campo1 number(2));


create table t1 (campo1 number(2) , campo2 number(2) ) cluster c1 (campo1);
create table t2 (campo1 number(2) , campo2 number(2) ) cluster c1 (campo1);
create index ic1 on cluster c1 ;

63

MANUAL SQL

Captulo 12. Seguridad a nivel de datos


Los usuarios ORACLE, adems de tener acceso (identificador y contrasea) al
sistema operativo,

debern tener un identificador y una contrasea para poder

conectarse con ORACLE. El administrador dispone para conceder este privilegio del
siguiente comando SQL:
GRANT { CONNECT RESOURCE DBA } TO < nombre_de_usuario >
[ IDENTIFIED BY < contrasea > ];

* CONNECT
- posibilidad de acceso a la base de datos
- acceder y manipular tablas de otros usuarios si tiene permiso para ello
- crear vistas y sinnimos
- no puede crear ni tablas ni agrupamientos ni ndices

* RESOURCE posibilidad de crear tablas


- crear tablas, agrupamientos e ndices
- conceder y quitar privilegios sobre los objetos anteriores
- utilizar el comando AUDIT para controlar el acceso a los objetos
propios

* DBA privilegios de administrador como:

64

MANUAL SQL
- crear tablas y vistas (RESOURCE implcito)
- crear y dar de baja usuarios
- crear sinnimos pblicos
La clusula IDENTIFIED BY es obligatoria si se le est concediendo a un usuario
privilegio de acceso (CONNECT), sin embargo no ser necesario utilizarla si estamos
concediendo nuevos privilegios a un usuario.
Un usuario podr cambiarse la contrasea en cualquier momento ejecutando el
siguiente comando:
GRANT CONNECT TO < nombre_de_usuario > IDENTIFIED BY
< nueva_contrasea >;
El identificador ORACLE es independiente del identificador del sistema operativo.
ORACLE comprueba automticamente la validez del identificador y la contrasea
cuando un usuario se conecta con ORACLE.
Slo un usuario con privilegio DBA puede conceder privilegios a otros usuarios.
Para quitar privilegios a los usuarios el administrador dispone del siguiente comando
SQL:
REVOKE { CONNECT RESOURCE DBA }
FROM < nombre_de_usuario >;
Si a un usuario se le retira el privilegio de conectarse a la base de datos, dicho
usuario no podr acceder a los datos hasta que se le vuelva a conceder el privilegio de
conexin. Sus tablas no sern borradas y los usuarios que tengan privilegios sobre
ellas podrn seguir utilizndolas. Cuando se le vuelvan a conceder a este usuario
privilegios de conexin "recuperar" sus tablas.
Las tablas pertenecen al usuario que las crea, y l ser quin conceda y quite los
privilegios sobre sus tablas a otros usuarios.
Los privilegios que podr conceder y

quitar el propietario de las tablas son los

siguientes:
* ALTER

permite modificar la definicin de la tabla

* DELETE

permite borrar filas de la tabla

65

MANUAL SQL
* INDEX

permite crear ndices sobre la tabla

* INSERT

permite aadir filas a la tabla

* SELECT

permite consultar filas de la tabla

* UPDATE

permite actualizar cualquier columna dentro de cualquier fila

* UPDATE

permite actualizar las columnas listadas (col1,...,coln)

* ALL

todos los privilegios anteriores

El propietario de una tabla puede conceder privilegios sobre la misma utilizando el


siguiente comando:

GRANT < lista_de_privilegios > ON < tabla >


TO < nombre_de_usuario > [ WITH GRANT OPTION ];

SEGURIDAD A NIVEL DE TABLA


Si se quiere conceder los privilegios a todos los usuarios de la base de datos se
deber utilizar el nombre de usuario PUBLIC.
Si el propietario de una tabla quiere que los privilegios que concede a un usuario, ste
a su vez los pueda conceder a otros usuarios, deber utilizar la clusula "WITH
GRANT OPTION".
Para quitar los privilegios que un usuario concedi sobre una tabla se utilizar el
siguiente comando:
REVOKE <lista_de_privilegios> ON <nombre_tabla>
FROM <nombre_usuario>;
Cuando se quita un privilegio a un usuario que a su vez ha concedido este privilegio a
otros, automticamente ORACLE tambin se lo quitar a los otros.
El nombre de usuario al que se le quitan los privilegios tambin podr ser el usuario
PUBLIC.

66

MANUAL SQL

67

Potrebbero piacerti anche