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