Oracle Prctica 1
Oracle Prctica 1
Oracle Prctica 1
Práctica 1: SQL
OBJETIVOS
SQL Plus
1
Para arrancar, la herramienta nos solicitará nuestros datos de conexión a la base
de datos. Para poder conectar necesitaremos conocer lo siguiente:
La base de datos que vamos a utilizar consta de las siguientes tablas: EMPLEADO,
DEPARTAMENTO, LOCALIZACIONES_DEPT, PROYECTO, TRABAJA_EN y
DEPENDIENTE.
Comenzaremos con un ejemplo de creación de tabla. Escribid en la consola de SQL
Plus la siguiente definición de tabla:
Tabla creada.
SQL>
2
CARGA DE SCRIPTS
3
• Verifica que se han creado todas las tablas. Para consultar las tablas que hay
actualmente definidas en el esquema escribe:
Ejercicio:
1. El comando anterior realiza una consulta que lista todos los campos
table_name de la tabla user_tables. Modifica la consulta para que
devuelva un único valor con el número de tablas creado actualmente
utilizando la función count().
INSERCIÓN DE DATOS.
TRANSACCIONES
Antes de definir las claves de las tablas vamos a insertar la información para
no tener problemas con las restricciones que imponen las claves sobre las
tablas.
SQL> COMMIT;
Commit complete.
4
Una transacción es un conjunto de sentencias en SQL que se ejecutan de
forma atómica; esto quiere decir, que se considera que la actualización que
producen todas las sentencias de una transacción se realiza a la vez y sin
ningún proceso externo que interrumpa dicha actualización. En Oracle por
defecto se considera una misma transacción todas las sentencias
ejecutadas entre dos COMMIT.
▪ Ejecuta:
SQL> ROLLBACK;
Por todo esto, cada vez que quieras dejar guardados los datos de
forma definitiva, debes ejecutar la sentencia COMMIT para finalizar
la transacción actual.
FORMATOS DE FECHA
Ejemplos:
TO_DATE(
'01-ene-2001',
'DD-MON-YYYY',
'nls_date_language = spanish' );
5
En caso de no indicar el idioma de la fecha se supone el que esté configurado por
defecto en el sistema. Para cambiar el idioma por defecto se puede utilizar ALTER
SESSION:
De esta manera tanto las fechas introducidas como las fechas mostradas por Oracle
serán en formato español. Esto permite acortar la línea de inserción anterior:
DEFINICIÓN DE RESTRICCIONES DE
CLAVE PRIMARIA Y AJENA
Antes de insertar los datos del resto de tablas, vamos a definir las claves primarias
y ajenas para las tablas creadas anteriormente. Un recordatorio informal de lo visto
en teoría para comprender las sentencias que aparecen a continuación:
Puede haber tantas claves alternativas definidas como se quiera, pero sólo
puede haber una clave primaria en una tabla. Se puede definir con el
identificador UNIQUE.
Por ello, para definir una clave ajena dentro de una tabla tenemos que
indicar la tabla a la que pertenece la tupla referida y el campo o conjunto de
campos de la tabla a que se refiere. Este campo o conjunto de campos
debería ser una clave primaria de la tabla referenciada.
6
Sigue los siguientes pasos:
1. Ejecuta las siguientes sentencias para definir las claves en las tablas:
2. Carga los siguientes datos. Ten en cuenta que algunas líneas poseen
información inconsistente con las restricciones impuestas por las claves
anteriormente definidas. ¿Cuál es el problema que se produce? ¿A qué crees
que es debido? Por el momento inserta todos los datos menos la tupla que te
haya dado problemas.
7
INSERT INTO TRABAJA_EN VALUES('123456789',1,32.5);
INSERT INTO TRABAJA_EN VALUES('123456789',2,7.5);
INSERT INTO TRABAJA_EN VALUES('666884444',3,40.0);
INSERT INTO TRABAJA_EN VALUES('453453453',1,20.0);
INSERT INTO TRABAJA_EN VALUES('453453453',2,20.0);
INSERT INTO TRABAJA_EN VALUES('333445555',2,10.0);
INSERT INTO TRABAJA_EN VALUES('333445555',3,10.0);
INSERT INTO TRABAJA_EN VALUES('333445555',10,10.0);
INSERT INTO TRABAJA_EN VALUES('333445555',20,10.0);
INSERT INTO TRABAJA_EN VALUES('999887777',30,30.0);
INSERT INTO TRABAJA_EN VALUES('999887777',10,10.0);
INSERT INTO TRABAJA_EN VALUES('987987987',10,35.0);
INSERT INTO TRABAJA_EN VALUES('987987987',30,5.0);
INSERT INTO TRABAJA_EN VALUES('987654321',30,20.0);
INSERT INTO TRABAJA_EN VALUES('987654321',20,15.0);
INSERT INTO TRABAJA_EN VALUES('888775555',20,null);
COMMIT
CONSTRAINT_NAME C
----------------------------
-- -
SYS_C003685682 C
SYS_C003685683 C
SYS_C003685684 C
SYS_C003685699 P
8
Como podemos ver, ya hay unas restricciones definidas en la tabla Empleado.
Estas restricciones vigilan las imposiciones de NOT NULL en algunos atributos
de la tabla (tipo C) y la definición de clave primaria (tipo P). Veremos que si
definimos las claves ajenas de la tabla, las restricciones definidas aumentan con
las dos nuevas para claves ajenas (tipo R).
Table altered.
Table altered.
CONSTRAINT_NAME C
----------------------------
-- -
SYS_C003685682 C
SYS_C003685683 C
SYS_C003685684 C
SYS_C003685703 R
SYS_C003685699 P
SYS_C003685718 R
Ejercicios
9
Usando la relación USER_CONS_COLUMNS podemos conocer el nombre de
una restricción (CONSTRAINT_NAME), el nombre de la tabla en la que
se ha definido (TABLE_NAME) y el nombre del atributo de la tabla en que
se aplica (COLUMN_NAME).
Crea una consulta que, utilizando ambas tablas, genere un listado con
nombre de restricción, tipo de restricción, nombre de tabla y nombre
de columna.
EJERCICIOS DE CONSULTAS
Resultado de la consulta:
NOMBRE
---------------
Franklin
NOMBRE APELLIDO
--------------- ---------------
James Borg
Resultado de la consulta:
NUMERO NUM
P D APELLIDO DIRECCION FECHA_NC
29
10 4 Wallace 1 Berry, Bellaire, TX 20/06/41
29
30 4 Wallace 1 Berry, Bellaire, TX 20/06/41
Resultado de la consulta:
Resultado de la consulta:
COUNT(*)
--------
4
Resultado de la consulta:
NUMERO
P NOMBREP COUNT(*)
------ ---------------
- ---------
1 ProductoX 2
2 ProductoY 3
3 ProductoZ 2
10 Automatización 1
20 Reorganización 1
Resultado de la consulta:
NOMBRED COUNT(*)
--------------- ---------
Administración 3
Investigación 4
Dirección 3
8. De cada departamento que tenga más de DOS empleados (ya que no hay
ninguno de más de 5 empleados), recupere el número de departamento y
el número de empleados que ganan más de 40.000 dólares
Resultado de la consulta:
NUMERO COUNT(*
D )
------- --------
- -
4 1
11
12