Professional Documents
Culture Documents
',6(f2'(%$6(6'('$726<6(*85,'$'(1/$,1)250$&,Ï1
&8562
$3817(63$5$/$635È&7,&$6HU&8$75,0(675(
Para las prácticas 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 más otras propias para el formateo de la salida,
etc. Fundamentalmente se utilizarán los siguientes comandos de SQL*PLUS:
• 3$66:25': Para cambiar el password del usuario (también 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 opción 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 sinónimo.
Existen otras instrucciones útiles de edición 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(creación de las tablas, inserción de datos, consultas, etc.).
Es conveniente incluir en el VFULSW antes de cada creación de tabla un borrado de la
misma mediante la instrucción DROP TABLE tabla [CASCADE CONSTRAINTS]. De
esta forma nos aseguramos que la tabla no existe, evitando errores. Mediante la opción
CASCADE CONSTRAINTS nos aseguramos que la tabla se borra aunque existan
dependencias entre tablas que impedirían su borrado.
Aunque el lenguaje SQL admitido por ORACLE es muy similar al estándar visto en
clase (SQL:1999), existen algunas diferencias que se irán descubriendo en el desarrollo
de las prácticas. Las más importantes son los tipos de datos, las opciones de borrado y
modificación de claves ajenas, y la creación de dominios (ORACLE no admite
dominios, los cuales deberán simularse mediante CHECKs o tablas auxiliares).
ORACLE admite una gran variedad de tipos de datos. Los más importantes, que serán
los que fundamentalmente se utilicen en las prácticas son:
• CHAR (tamaño): cadenas de caracteres de longitud fija.
• VARCHAR2 (tamaño): cadenas de caracteres de longitud variable, hasta un
máximo “tamaño”.
• NUMBER (l,d): número de un máximo de “l” dígitos, “d” de los cuales son
decimales.
• DATE: fecha.
Probablemente sea necesario utilizar funciones de formateo de tipos, tales como to_date
o to_char (véase más adelante en este mismo documento).
Aunque en los manuales podrá consultarse la sintaxis completa del SQL, la sintaxis
básica de la instrucción de creación de tablas es la siguiente:
ORACLE, como todo SGBD, mantiene un catálogo que almacena datos acerca de los
usuarios, tablas, privilegios, etc. Podemos acceder al catálogo por medio de vistas que
pueden consultarse. Realizando una consulta a la vista ALL_CATALOG vemos todos
los objetos (tablas, vistas, sinónimos) visibles por el usuario. Algunas vistas útiles son
USER_TABLES, USER_VIEWS, etc.
Hay que tener en cuenta que en el caso de las vistas deberán cumplirse determinadas
condiciones para permitir las inserciones, borrado y actualizaciones de las tablas base.
Las condiciones pueden incluir operadores lógicos (AND, OR, NOT). En las condiciones
podemos utilizar, entre otras, las siguientes expresiones:
• Expresiones con subconsulta, que permiten comparar el valor de una expresión con los
resultados de una sentencia SELECT (subconsulta). De esta forma se pueden producir
encadenamientos de sentencias SELECT.
Otras funciones útiles para el tratamiento de fechas son WRBFKDU y WRBGDWH, que devuelven,
respectivamente, un dato en formato carácter o fecha. El uso básico es el siguiente:
WRBFKDU (expresión, plantilla)
WRBGDWH (cadena, plantilla)
Entre los posibles códigos a usar en la plantilla tenemos los siguientes:
Para una consulta más detallada tanto de las funciones anteriores como de otras muchas,
pueden consultarse los manuales de ORACLE accesibles desde la página 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 días a la fecha, teniendo en cuenta posibles
desbordamientos de meses o años.
Hay que tener en cuenta que hay que agrupar todas las columnas que no aparezcan
mencionadas en la cláusula group_by.
Ejemplo:
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...);
Operador: EXISTS
Ejemplo. Listar las oficinas donde haya ventas por encima de 100
SELECT nombre FROM oficina
WHERE (;,676 (SELECT * FROM ventas WHERE
ventas.oficina=oficina.id AND cant_ventas>100)
Ejemplo.
SELECT nombre FROM tabla
WHERE ciudad = ANY (SELECT nombre FROM tabla2 WHERE codigo<3);
Aunque las subconsultas suelen encontrarse tras la cláusula WHERE, también pueden
ir tras la cláusula 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 representación lógica de subconjuntos de datos de una o más tablas.
Pueden presentarse conjuntos lógicos de combinaciones de datos creando vistas de tablas.
Las vistas es una tabla lógica (no física) que se basa en una tabla o en otra vista. Una vista
no contiene datos en si misma, es como una ventana a través 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.
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 sólo si la tabla base existe. Está opción es la que está por
defecto.
Subconsulta. Es una sentencia SELECT
WITH READ ONLY. Asegura que no podrán ejecutarse operaciones DML sobre la
vista.