Está en la página 1de 7

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

',6(f2'(%$6(6'('$726<6(*85,'$'(1/$,1)250$&,1
&8562
$3817(63$5$/$635&7,&$6HU&8$75,0(675(
Para cualquier consulta a la sintaxis de las rdenes SQL o SQL*PLUS puede
consultarse cualquier libro de ORACLE, o los manuales gratuitos en pdf o en lnea
accesibles a partir de la pgina de la asignatura (en http://kybele.escet.urjc.es/).
Para las prcticas voluntarias del primer parcial se utilizar el servidor relacional de
ORACLE. El programa cliente que se utilizar ser SQL*PLUS. SQL*PLUS admite las
sentencias SQL propias de ORACLE ms otras propias para el formateo de la salida,
etc. Fundamentalmente se utilizarn los siguientes comandos de SQL*PLUS:
3$66:25': Para cambiar el password del usuario (tambin puede cambiarse
mediante ALTER USER).
/: ejecuta el comando SQL o PL/SQL almacenado en el buffer.
RUN: lista y ejecuta el comando SQL o PL/SQL almacenado en el buffer.
HOST comando: ejecuta un comando del SO.
LIST: lista el contenido del buffer.
@ o 67$57 fichero: ejecuta un fichero
EDIT [fichero]: edita el fichero, o bien la sentencia almacenada en el buffer. Para
poder utilizar esta opcin en el laboratorio el fichero auxiliar utilizado por
SQL*PLUS debe estar en un directorio en el que el usuario tenga permiso de
escritura. Puede cambiar el directorio por defecto en Opciones/Editfile.
DEFINE [variable[=valor]]: define o muestra el valor de variables
SPOOL [fichero|OFF]: manda la salida a fichero o deja de hacerlo.
'(6&5,%( objeto: describe una tabla, vista o sinnimo.
Existen otras instrucciones tiles de edicin y carga de ficheros como APPEND,
CHANGE, GET, SAVE.
La forma de trabajar ser utilizar un editor de texto para guardar las instrucciones en un
VFULSW(creacin de las tablas, insercin de datos, consultas, etc.).
Es conveniente incluir en el VFULSW antes de cada creacin de tabla un borrado de la
misma mediante la instruccin DROP TABLE tabla [CASCADE CONSTRAINTS]. De
esta forma nos aseguramos que la tabla no existe, evitando errores. Mediante la opcin
CASCADE CONSTRAINTS nos aseguramos que la tabla se borra aunque existan
dependencias entre tablas que impediran su borrado.
Aunque el lenguaje SQL admitido por ORACLE es muy similar al estndar visto en
clase (SQL:1999), existen algunas diferencias que se irn descubriendo en el desarrollo
de las prcticas. Las ms importantes son los tipos de datos, las opciones de borrado y
modificacin de claves ajenas, y la creacin de dominios (ORACLE no admite
dominios, los cuales debern simularse mediante CHECKs o tablas auxiliares).
ORACLE admite una gran variedad de tipos de datos. Los ms importantes, que sern
los que fundamentalmente se utilicen en las prcticas son:
CHAR (tamao): cadenas de caracteres de longitud fija.
VARCHAR2 (tamao): cadenas de caracteres de longitud variable, hasta un
mximo tamao.
NUMBER (l,d): nmero de un mximo de l dgitos, d de los cuales son
decimales.

Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 1

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

DATE: fecha.
Probablemente sea necesario utilizar funciones de formateo de tipos, tales como to_date
o to_char (vase ms adelante en este mismo documento).

Aunque en los manuales podr consultarse la sintaxis completa del SQL, la sintaxis
bsica de la instruccin de creacin de tablas es la siguiente:
CREATE TABLE nombre (
columna1 tipodatos [DEFAULT valorpordefecto] [restricciones de columna1],
...
columnaN tipodatos [DEFAULT valorpordefecto] [restricciones de columnaN],
[restriccin de tabla],
...
[restriccin de tabla]);
Las restricciones de columna son:
[CONSTRAINT nombrerestriccin] ->
[NOT] NULL
UNIQUE/PRIMARY KEY
REFERENCES tabla [(columna)] [ON DELETE CASCADE/SET NULL]
CHECK (condicin)
[CONSTRAINT nombrerestriccin] ->
UNIQUE/PRIMARY KEY (columnas)
FOREIGN KEY (columnas) REFERENCES tabla [(columnas)] [ON DELETE
CASCADE/SET NULL]
CHECK (condicin)
Como vemos en la sintaxis, no es obligatorio darle un nombre a las restricciones,
aunque puede resultar conveniente para poder identificar posibles errores en el caso de
las inserciones rechazadas por ORACLE.
ORACLE slo admite opciones en el caso de borrado de claves ajenas (a diferencia del
estndar). Las nicas opciones admitidas son borrado en cascada, con puesta a nulos y
restringido (que es la opcin por defecto en el caso de no poner nada). Evidentemente,
cuando una clave ajena tiene como opcin de borrado la puesta a nulos, las columnas
asociadas debern admitir este valor.
ORACLE, como todo SGBD, mantiene un catlogo que almacena datos acerca de los
usuarios, tablas, privilegios, etc. Podemos acceder al catlogo por medio de vistas que
pueden consultarse. Realizando una consulta a la vista ALL_CATALOG vemos todos
los objetos (tablas, vistas, sinnimos) visibles por el usuario. Algunas vistas tiles son
USER_TABLES, USER_VIEWS, etc.
Instrucciones ALTER TABLE, INSERT, DELETE y UPDATE.
La sintaxis bsica es la siguiente:
ALTER TABLE tabla ->
ADD (columnas, restricciones de columnas y/o restricciones de tabla)
MODIFY (columnas y restricciones de columnas)

Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 2

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

DROP PRIMARY KEY|UNIQUE(columnas)


DROP CONSTRAINT restriccin
DROP COLUMN columna
(columnas)
[DISABLE UNIQUE (columnas)/PRIMARY
restriccin [CASCADE];]
[ENABLE UNIQUE (columnas)/PRIMARY
restriccin;]

KEY/CONSTRAINT
KEY/CONSTRAINT

Para la insercin de datos usaremos la instruccin INSERT. Si no indicamos las


columnas, el sistema supondr que estamos insertando valores en todas ellas.
INSERT INTO tabla/vista [(columnas)] subconsulta/VALUES (expresiones);
Para el borrado usaremos la siguiente sintaxis. Si no incluimos la clusula WHERE, se
borrarn todas las filas.
DELETE [FROM] tabla/vista [WHERE condicin];
Para la modificacin de valores se utilizar la siguiente sintaxis. Anlogamente al caso
anterior, si no usamos la clusula WHERE se modificarn todas las filas.
UPDATE tabla/vista SET
columna=expresin|subconsulta
(columnas)=subconsulta
WHERE [condicin];
Hay que tener en cuenta que en el caso de las vistas debern cumplirse determinadas
condiciones para permitir las inserciones, borrado y actualizaciones de las tablas base.
La sintaxis bsica de la orden SELECT es la siguiente:
SELECT [ALL | DISTINCT] <lista-de selecciones>
FROM <nombre de tabla> [alias de tabla] [,...]
[WHERE <condicin>]
[GROUP BY <lista-de columnas> [HAVING <condicin>] ]
[ORDER BY <nombre de columna> [ASC | DESC] [,...] ]
DISTINCT: Elimina las filas duplicadas en el resultado de la consulta.
<alias de tabla>:Es un sinnimo activo slo en el mbito de la sentencia SELECT.
Las condiciones pueden incluir operadores lgicos (AND, OR, NOT). En las condiciones
podemos utilizar, entre otras, las siguientes expresiones:

< expresin1> [NOT] BETWEEN <expresin2> AND <expresin2>

<expresin> [NOT] IN (<lista-de valores>)

<nombre de columna> [NOT] LIKE <string> [ESCAPE <carcter de escape>]

Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 3

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

<nombre de columna> IS [NOT] NULL

Expresiones con subconsulta, que permiten comparar el valor de una expresin con los
resultados de una sentencia SELECT (subconsulta). De esta forma se pueden producir
encadenamientos de sentencias SELECT.

ORDER BY <nombre de columna> [ASC | DESC] [,...]


Permite ordenar el resultado de la consulta.
COMPOSICIN DE TABLAS. La composicin (join) de tablas se produce cuando se
combinan datos de dos o ms tablas. Para poder realizar la composicin deben existir
columnas comunes a las tablas, de forma que al componer dos tablas A y B con las
columnas comunes X e Y se satisface una condicin del tipo A.X=B.Y o similar
(utilizando otros operadores, como >, <, etc). Estas condiciones se incluyen en la
condicin de la clasula WHERE. Esto puede generalizarse a ms de dos tablas, por
ejemplo (A.X = B.Y1) AND (B.Y2 = C.Z). En el caso de realizar una composicin de una
tabla consigo misma, obligatoriamente hay que emplear alias dentro de la orden SELECT
que eviten los problemas de ambigedad.
Algunas de las funciones aplicables a datos de tipo carcter son:
LQLWFDS FKDU pone en mayscula el primer carcter de cada cadena de caracteres.
ORZHU FKDU pone en minsucla la cadena de caracteres completa
UHSODFH FKDU VWU VWU En la cadena de caracteres char, cada ocurrencia de str1 se
reemplaza por str2
VXEVWU FKDUPQ Extrae n caracteres de la cadena de caracteres char, a partir de la
posicin m.
OHQJWK FKDU Longitud de char
Entre las funciones especficas para fechas tenemos:
V\VGDWH Fecha y hora actual
ODVWBGD\ ltimo da del mes actual
DGGBPRQWKV GQ suma o resta n meses a partir de la fecha d
PRQWKVBEHWZHHQ IV diferencia en meses entre la fecha f y la fecha s
QH[WBGD\ GGD\ Fecha del da especificado (lunes, martes, ...en ingls)de la semana
siguiente a d
Otras funciones tiles para el tratamiento de fechas son WRBFKDU y WRBGDWH, que devuelven,
respectivamente, un dato en formato carcter o fecha. El uso bsico es el siguiente:
WRBFKDU (expresin, plantilla)
WRBGDWH (cadena, plantilla)
Entre los posibles cdigos a usar en la plantilla tenemos los siguientes:
< devuelve el ltimo dgito del ao
<< devuelve los dos ltimos dgitos del ao
<<< devuelve los tres ltimos dgitos del ao
<<<< devuelve los cuatro ltimos dgitos del ao
6<($5<($5 ao, utilizando signo para las fechas a.C.
Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 4

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

4 trimestre del ao
00 mes
50 mes en nmeros romanos
0RQWK Nombre del mes (9 caracteres)
:: semana del ao
: semana del mes
''' da del ao
'' da del mes
' da de la semana
'< Abreviatura del nombre del da
++R++ Hora del da
++ hora del da utilizando las 24
0, minutos
66 segundos
Para una consulta ms detallada tanto de las funciones anteriores como de otras muchas,
pueden consultarse los manuales de ORACLE accesibles desde la pgina de la asignatura.
Por ltimo hay que resaltar el hecho de que es posible sumar a las fechas valores de la
forma: fecha+n. En este caso Oracle suma n das a la fecha, teniendo en cuenta posibles
desbordamientos de meses o aos.
La clusula GROUP BY se utiliza cuando se quieren realizar consultas agrupadas. As, se
puede pensar en estos conjuntos de filas como grupos, utilizndose las siguientes funciones
(que tambin pueden ser utilizadas sin GROUP BY):

avg(nombre_columna) Valor medio de todos los valores de nombre_columna


count(*) Nmero de filas de la tabla
max(nombre_columna) Valor mximo almacenado en nombre_columna
min(nombre_columna) Valor mnimo almacenado en nombre_columna

Ejemplo: select ciudad, avg(ventas) from clientes group by ciudad;


Hay que tener en cuenta que hay que agrupar todas las columnas que no aparezcan
mencionadas en la clusula group_by.
La clusula HAVING se utiliza para especificar una condicin de bsqueda de un grupo de
filas. Por ejemplo: select ciudad, avg(ventas) from clientes group by ciudad having
ciudad> t ;
SUBCONSULTAS. Una subconsulta forma parte de una condicin de bsqueda en la
clusual WHERE o HAVING.
Adems de las vistas en la prctica anterior, tambin se pueden aplicar las siguientes
condiciones de bsqueda en subconsultas:
Test de comparacin subconsulta. Compara el valor de una expresin con el valor
producido por una subconsulta y devuelve un valor true si la comparacin es cierta.
Operadores: >, <>, <, <=, >, >=
Ejemplo:
Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 5

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

SELECT nombre FROM tabla


WHERE columna ! (SELECT col FROM tabla2 WHERE ...);

Test de pertenencia a conjunto subconsulta. Compara un nico valor de datos con una
columna de valores producida por una subconsulta y devuelve un resultado true si el
valor coincide con uno de los valores de la columna.
Operador: IN
Ejemplo:
SELECT nombre FROM tabla
WHERE col ,1 (SELECT col FROM tabla2 WHERE...);

Test de existencia. Comprueba si una subconsulta produce alguna fila de resultados.


Slo se utiliza en subconsultas.
Operador: EXISTS
Ejemplo. Listar las oficinas donde haya ventas por encima de 100
SELECT nombre FROM oficina
WHERE
(;,676
(SELECT
*
FROM
ventas
ventas.oficina=oficina.id AND cant_ventas>100)

WHERE

Test de comparacin cuantificada. Se utilizan cuando una subconsulta devuelve ms de


un valor. Compara un valor de dato con la columna de valores producidos por una
subconsulta.
SOME y ANY son equivalentes y se utilizan para aplicar a la consulta cada resultado
de una subconsulta. ALL se utiliza para comparar el valor del test con todos los
resultados de una subconsulta, si todos devuelven TRUE, entonces se ejecutar la
consulta.
Operadores: SOME, ANY, ALL
Ejemplo.
SELECT nombre FROM tabla
WHERE ciudad = ANY (SELECT nombre FROM tabla2 WHERE codigo<3);
Aunque las subconsultas suelen encontrarse tras la clusula WHERE, tambin pueden
ir tras la clusula HAVING.
Ejemplo.
SELECT nombre, avg(importe) FROM ventas, pedidos
WHERE ventas.idemp=pedidos.idemp AND fabrica= lafabrica
GROUP BY nombre
HAVING avg(impventas)> (SELECT avg(imppedidos) FROM pedidos));

VISTAS
Una vista es una representacin lgica de subconjuntos de datos de una o ms tablas.
Pueden presentarse conjuntos lgicos de combinaciones de datos creando vistas de tablas.

Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 6

Diseo de Bases de Datos y Seguridad en la Informacin

Apuntes Oracle y SQL*Plus

Las vistas es una tabla lgica (no fsica) que se basa en una tabla o en otra vista. Una vista
no contiene datos en si misma, es como una ventana a travs de la cual pueden verse y
cambiarse datos de tablas. Las tablas sobre las que se define una vista se llaman tablas
base. La vista se almacena como una sentencia SELECT en el diccionario de datos.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW nombre_vista [(alias...)]
AS subconsulta
[WITH READ ONLY]
Donde:

OR REPLACE. Se utiliza por si la vista ya estuviera creada anteriormente. De esta


forma una vista podr ser modificada.
FORCE. Crea la vista independientemente de si la tabla base existe.
NOFORCE. Crea la vista slo si la tabla base existe. Est opcin es la que est por
defecto.
Subconsulta. Es una sentencia SELECT
WITH READ ONLY. Asegura que no podrn ejecutarse operaciones DML sobre la
vista.

Algunas reglas para utilizar instrucciones DML en una vista

No puede borrarse una fila si la vista contiene:


Funciones de agrupamiento
Una clusula GROUP BY
La clusula DISTINCT
No pueden modificarse datos de una vista si:
Se cumple alguna de las condiciones del borrado
Las columnas estn definidas mediante expresiones
No se pueden aadir datos a una vista si:
Se cumple cualquiera de las condiciones del borrado
Hay columnas NOT NULL en la tabla base que no estn seleccionadas en la vista

Para borrar una vista:


DROP VIEW nombre_vista;

Grupo Kybele, http://kybele.escet.urjc.es/

Pg. 7

También podría gustarte