Universidad Rey Juan Carlos
Departamento de Lenguajes y Sistemas Informáticos II
Grupo Kybele 2009
Diseño de Bases de Datos y Seguridad de la Información
EJERCICIOS DE PL/SQL
Se recomienda ir guardando los scripts. Para ello utilice un editor de texto.
Especificación
Para la implementación de una base de datos que soporte análisis multidimensional se desea
crear una tabla que almacene las diferentes características referidas a una fecha; esto es: día, día
de la semana, mes, año, cuarto… El esquema relacional de dicha tabla sería el siguiente:
TIEMPO (fecha, dia, dia_Semana, mes, cuarto, anyo)
1.
Crear la tabla TIEMPO en la base de datos atendiendo al esquema relacional anterior;
considerando el atributo fecha como clave primaria. El resto de los atributos no admiten
valores nulos.
2.
Crear una función PL/SQL que dado un entero obtenga en formato de texto el
correspondiente mes. Por ejemplo:
exec convertir_mes(1);
> Enero
3.
Crear un procedimiento almacenado PL/SQL que recibiendo un rango de fechas
introduzca en la tabla de TIEMPO una tupla por cada día comprendido entre ambas
fechas. Por ejemplo:
exec insertarTiempos(‘01/01/2009’,’10/01/2009’);
Ayuda: Para realizar el procedimiento solicitado en el punto 3, puedes ayudarte de la siguiente
función que dada una fecha devuelve el día siguiente a dicha fecha.
CREATE OR REPLACE FUNCTION siguiente_dia(actual IN DATE) return DATE
IS
BEGIN
RETURN TO_DATE(TO_CHAR(actual+1));
END;
/
Página |1
Universidad Rey Juan Carlos
Departamento de Lenguajes y Sistemas Informáticos II
Grupo Kybele 2009
Diseño de Bases de Datos y Seguridad de la Información
EJERCICIOS DE PL/SQL
Después de la llamada al procedimiento “insertarTiempos” del ejemplo anterior, la tabla
TIEMPOS debería contener la siguiente información:
fecha
01/01/2009
02/01/2009
03/01/2009
04/01/2009
05/01/2009
06/01/2009
07/01/2009
08/01/2009
09/01/2009
10/01/2009
dia
1
2
3
4
5
6
7
8
9
10
Dia_Semana
Jueves
Viernes
Sábado
Domingo
Lunes
Martes
Miércoles
Jueves
Viernes
Sábado
mes
Enero
Enero
Enero
Enero
Enero
Enero
Enero
Enero
Enero
Enero
cuarto
Q1
Q1
Q1
Q1
Q1
Q1
Q1
Q1
Q1
Q1
anyo
2009
2009
2009
2009
2009
2009
2009
2009
2009
2009
Ayuda: Puedes ayudarte de la función TO_CHAR, que pasándole como parámetro una fecha y
una atributo de tiempo como día, mes, año… devuelve el correspondiente día, mes, año de la
fecha recibida como primer parámetro. Tienes más información sobre el uso de las funciones en
la documentación on-line de Oracle.
4.
Ejecutar el procedimiento creado para que genere las tuplas correspondientes a los
años 2008 y 2009.
La tabla TIEMPO creada anteriormente la utilizaremos para fechar las ventas realizadas por una
empresa dedicada a la venta de materiales informáticos. Por tanto el esquema relacional de la
base de datos quedaría de la siguiente forma.
TIEMPO (fecha, dia, dia_Semana, mes, cuarto, anyo)
VENTA (id_Venta, fecha, producto, unidades_vendidas, precio_unitario)
5.
Crear la tabla VENTA atendiendo al esquema relacional anterior; considerando el
atributo id_venta como clave primaria. El resto de los atributos de la relación no pueden
tomar valor nulo.
Página |2
Universidad Rey Juan Carlos
Departamento de Lenguajes y Sistemas Informáticos II
Grupo Kybele 2009
Diseño de Bases de Datos y Seguridad de la Información
EJERCICIOS DE PL/SQL
6.
Crear un procedimiento/función almacenado llamado “registrar_venta” que recibiendo
una fecha, un producto, el precio unitario del mismo y las unidades vendidas inserte los
valores correspondientes en la tabla de ventas.
7.
Utilizar el procedimiento almacenado creado anteriormente para realizar las siguientes
ventas.
fecha
10/01/2008
17/01/2008
05/05/2008
15/05/2008
25/07/2008
02/08/2008
10/09/2008
04/12/2008
05/12/2008
10/02/2009
11/05/2009
12/06/2009
14/08/2009
21/08/2009
05/10/2009
24/10/2009
26/11/2009
05/12/2009
19/12/2009
8.
producto
Disco Duro 160 GB UDMA
Disco Duro 250 GB UDMA
Disco Duro 500 GB UDMA
Disco Duro 750 GB UDMA
Fuente Alimentación 1000W
Memoria 1GB DDR 400
Memoria 1GB DDR2 1066
Memoria 2GB DDR3 800
Memoria 1 GB Compact Flash
Memoria 2 GB Compact Flash
Memoria 8 GB Compact Flash
Memoria 1 GB Secure Digital
Memoria 2 GB Secure Digital
Antena Wifi Cisco Omnidireccional
Cable para antena 10 metros SMA
Adaptador de Bluetooth 200 metros USB 2.0
Adaptador de HomePlug Ethernet AV
Adaptador de Infrarojos USB
Hub 4 puertos USB 2.0
precio_unitario
100.00 €
125.00 €
150.00 €
175.00 €
55.20 €
10.98 €
22.65 €
32.15 €
11.54 €
19.87 €
48.32 €
14.52 €
28.69 €
67.12 €
2.65 €
14.32 €
23.16 €
47.88 €
23.10 €
unidades_vendidas
4
2
10
1
4
40
2
3
10
1
1
15
25
2
1
1
10
8
6
Crear un procedimiento “Mostrar_ Estadísticas” que genere la siguiente información,
considerando que la mayor venta se refiere a las ventas con mayor valor económico, no
con mayor número de unidades vendidas:






Valor total de las ventas:
Valor total de las ventas en 2008:
Valor total de las ventas en 2009:
Listado ordenado de las ventas por día de la semana
Listado ordenado de las ventas por mes del año
Listado ordenado de la ventas por cuarto del año:
Ayuda: A continuación se muestra un ejemplo de la salida producida por el procedimiento
creado.
Página |3
Universidad Rey Juan Carlos
Departamento de Lenguajes y Sistemas Informáticos II
Grupo Kybele 2009
Diseño de Bases de Datos y Seguridad de la Información
EJERCICIOS DE PL/SQL
SQL> exec mostrar_estadisticas;
============ Estadísticas ==================
------------- Totales ---------------------Ventas Totales: 5149,84 €
En 2008: 3242,15 €
En 2009: 1907,69 €
============== Listados =====================
------------- Valor de las ventas por días -1. Lunes
1550,97 €
2. Viernes
1405,49 €
3. Jueves
1153,05 €
4. Sábado
975,16 €
5. Miércoles 45,3 €
6. Martes
19,87 €
------------- Valor de las ventas por meses -1. Mayo
1723,32 €
2. Agosto
1290,69 €
3. Diciembre 733,49 €
4. Enero
650 €
5. Noviembre 231,6 €
6. Julio
220,8 €
7. Junio
217,8 €
8. Septiembre 45,3 €
9. Febrero
19,87 €
10. Octubre
16,97 €
------------- Valor de las ventas por cuartos del año -1. Q2 1941,12 €
2. Q3 1556,79 €
3. Q4 982,06 €
4. Q1 669,87 €
Página |4