You are on page 1of 69

MANUAL SQL ZNDICE 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.

Select regional_group from location; Select location_id, regional_group from location; Select * from location;

MANUAL SQL 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.

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;

Select distinct job_id, first_name from employee;

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

MANUAL SQL 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. . 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.

Select first_name From employee Where sysdate - hire_date >= 25*365;

MANUAL SQL ______________________________________________________________ _ 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. 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.

MANUAL SQL 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 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.

MANUAL SQL El formato es: ORDER BY columna ASC o DESC, columna ASC o DESC

Captulo 2.
7

MANUAL SQL

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.

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.

MANUAL SQL 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 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.

MANUAL SQL

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. 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:

10

MANUAL SQL !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.

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:

11

MANUAL SQL An Asigna n caracteres de salida para el ancho de la columna especificada. 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 (< >).

9,999.99

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.

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 seleccionada. Por defecto se visualizar. despus de haber sido

12

MANUAL SQL 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.

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.

13

MANUAL SQL 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. 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>

14

MANUAL SQL

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. . 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.

15

MANUAL SQL 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). 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.

16

MANUAL SQL 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). 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.

17

MANUAL SQL 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. select lpad(FIRST_NAME,12,'-') from employee; 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. select FIRST_NAME , SUBSTR(FIRST_NAME, LENGTH(FIRST_NAME)) from employee; TRANSLATE (,,). Esta funcin sustituye en el primer argumento cada ocurrencia del segundo argumento por el tercero. select FIRST_NAME , TRANSLATE(FIRST_NAME,'A','O') from employee; ||. Operador de concatenacin. Aade el segundo argumento a la derecha del primero. 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.

18

MANUAL SQL 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' especificados devuelve 'otro'. devuelve 'valor2',..., ninguno de los si tiene valores 'valorn' devuelve 'valorn1', y si no toma

19

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. - Da. - Hora. - Minutos. - Segundos.

20

MANUAL SQL

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: 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.

21

MANUAL SQL YYY o YY o Y Indica los tres ltimos, dos ltimos o ltimo dgito del ao. Y,YYY SYEAR o YEAR Indica el ao con la coma en la posicin indicada. Indica el ao deletreado. La S pone el signo negativo delante de los aos A.C. BD o AD Q MM MONTH o Month Indica antes o despus de CRISTO. Indica el trimestre del ao. Indica el mes con dos dgitos. Indica el nombre del mes con maysculas o minsculas segn se indique.

WW o W DDD o DD o D DAY o Day

Indica la semana del ao o del mes. Indica el da del ao, mes o semana. 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 HH o HH12 HH24 MI SS SSSS /., "cte"

Indicador del meridiano. Indica la hora del da (1-12). Indica la hora del da (0-23). Indica los minutos. Indica los segundos. Indica los segundos transcurridos desde la medianoche. Caracteres separadores. Indica las constantes alfanumricas que se introducen dentro del formato indicado.

22

MANUAL SQL FM 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 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. siguiente a la fecha

23

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 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.

24

MANUAL SQL

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. Select avg (sakary) From employee Where department; SUM (columna) Devuelve la suma de los valores de la columna para cada grupo. SELECT sum(COMMISSION) from employee;

MIN (columna)

Devuelve el mnimo de los valores de la columna para cada grupo.

select min (SALARY) from employee; MAX (columna) Devuelve el mximo de los valores de la columna para cada grupo. select MAX(salary) from employee;

SELECT MAX (salary)- min (SALARY) from employee group by DEPARTMENT_ID;

25

MANUAL SQL 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. SELECT count (commission) from employee; 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 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.

select sum (salary) from employee group by DEPARTMENT_ID;

26

MANUAL SQL

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.

27

MANUAL SQL

Captulo 6. Consultas anidadas


28

MANUAL SQL 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. - 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

29

MANUAL SQL 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).

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.

30

MANUAL SQL 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 de una de las columnas. anidada a los de las columnas que forman parte de la condicin en la superior. No basta con que sea igual el valor

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. >= 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.

31

MANUAL SQL <= 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)

Captulo 7. Combinaciones
INTRODUCCIN

32

MANUAL SQL 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.

COMBINACION COMUN La sintaxis de la combinacin de tablas es:

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

33

MANUAL SQL 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 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

34

MANUAL SQL 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 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.

35

MANUAL SQL 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. 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

36

MANUAL SQL 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.

37

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 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.

38

MANUAL SQL

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>, ... ) ] 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.

39

MANUAL SQL 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.

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> ];

40

MANUAL SQL

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> ];

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.

41

MANUAL SQL 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.

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.

42

MANUAL SQL 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.

43

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: 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)

44

MANUAL SQL * 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 >;

< 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.

45

MANUAL SQL < 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 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

46

MANUAL SQL - 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 240 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 40. 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) - Mes (1 byte) - Da (1 byte) - Hora (1 byte) - Minuto (1 byte) - Segundo (1 byte)

47

MANUAL SQL 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 64K 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 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.

48

MANUAL SQL 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. 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).

49

MANUAL SQL - 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: ALTER TABLE <nombre_de_la_tabla> ADD ( <nombre_de_la_nueva_columna1> <tipo_de_datos>, <nombre_de_la_nueva_columna2> <tipo_de_datos>, ... );

50

MANUAL SQL 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 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)

51

MANUAL SQL 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: 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 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

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 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.

52

MANUAL SQL 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. 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.

53

MANUAL SQL

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: 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

54

MANUAL SQL 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. 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.

55

MANUAL SQL

Captulo 10. Vistas


INTRODUCCIN Una vista es una ventana a travs de la cual vemos subconjuntos de datos de tablas ya existentes.

56

MANUAL SQL 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.

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 ...

57

MANUAL SQL 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 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

58

MANUAL SQL 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. 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.

59

MANUAL SQL 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.

Captulo 11. Mejora de prestaciones


INTRODUCCIN

60

MANUAL SQL 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 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 >;

61

MANUAL SQL

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. Si los datos son estticos se reducirn los costes de mantenimiento y es ms recomendable crear ndices.

62

MANUAL SQL 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 >, ...

63

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 >; Borrar agrupamientos

64

MANUAL SQL 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 ;

65

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: - crear tablas y vistas (RESOURCE implcito)

66

MANUAL SQL - 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 siguientes: * ALTER * DELETE * INDEX permite modificar la definicin de la tabla permite borrar filas de la tabla permite crear ndices sobre la tabla quitar el propietario de las tablas son los

67

MANUAL SQL * INSERT * SELECT * UPDATE * UPDATE * ALL permite aadir filas a la tabla permite consultar filas de la tabla permite actualizar cualquier columna dentro de cualquier fila permite actualizar las columnas listadas (col1,...,coln) 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.

68

MANUAL SQL

69