3º Ingeniero Técnico en Informática de Sistemas Asignatura: Fundamentos de Bases de Datos Facultad de Informática Curso: 2007/08 PRÁCTICA B3. Programación en PL/SQL Objetivos • Comprender los conceptos y estructuras de programación de PL/SQL (extensión procedural del SQL de Oracle): bloques, cursores, excepciones, estructuras de selección e iteración, etc. • Construir, ejecutar y depurar código PL/SQL: bloques anónimos, procedimientos, funciones, paquetes (packages), disparadores (triggers), etc. Contenidos Esta práctica consiste en la resolución de una serie de ejercicios de programación en PL/SQL de Oracle, sobre el esquema de bases de datos que cada grupo de prácticas haya creado durante la práctica B2. Definición y modificación de datos en SQL (CONCESIONARIOS DE COCHES). Normas importantes y obligatorias para resolver los ejercicios Es importante cuidar el estilo de programación PL/SQL. Por ejemplo, es una mala costumbre (aunque funcione) hacer un FETCH de un cursor que ya está vacío, no es necesario usar un CURSOR para hacer una consulta que devuelve una única fila, no es necesario hacer un SELECT COUNT para obtener el número total de filas de un CURSOR cuando dicho total se puede obtener incrementando una variable en cada iteración, etc.. También es importante elegir el algoritmo más adecuado en cada ejercicio. No es suficiente con que el ejercicio funcione (aunque sea al estilo “fuerza bruta”). No se puede usar tablas temporales para almacenar resultados intermedios. Insertar en las tablas los datos necesarios para que se obtengan resultados que permitan comprobar que los ejercicios funcionan. No dedicar demasiado esfuerzo en formatear o tabular la salida por pantalla; es suficiente con que sea legible. Todos los objetos (funciones, procedimientos, paquetes y disparadores de BD) han de estar creados en la BD, en la cuenta Oracle10g del grupo de prácticas (fbdsXXX, sustituyendo XXX pro el número de grupo asignado). Fecha de entrega 21 de enero de 2008. 3º I. T. Informática de Sistemas. Fundamentos de Bases de Datos. Práctica B3. Programación en PL/SQL- 1 Ejercicios 1. Mostrar por pantalla, a doble columna, los nombres de todos los vendedores y los nombres de todos los clientes. Ambas columnas han de estar ordenadas alfabéticamente y mostrarse de la forma que se indica a continuación. Tenga en cuenta que puede haber distinto número de vendedores que de clientes. Note que el listado también debe incluir los totales que se indican (número de vendedores y número de clientes que hay). <número de> VENDEDORES <número de> CLIENTES -------------------------------------------------------------------------<nombre vendedor 1> <nombre cliente 1> ... <nombre vendedor n> ... <nombre cliente m> 2. Mostrar por pantalla, para cada marca sus modelos y para cada concesionario sus vendedores, indicando para cada concesionario si es el principal o no de la marca y para cada vendedor el número de coches que ha vendido, con el formato que se muestra a continuación. Note que el listado también debe incluir los contadores que se indican (número de concesionarios y de vendedores de cada marca, y número de marcas, concesionarios y vendedores que hay en total). Este ejercicio hay que usar cursores parametrizados. MARCA <nombre de la marca> --CONCESIONARIOS: ----<nombre del concesionario> <PRINCIPAL/NO PRINCIPAL> ---- ... ----VENDEDORES: ------<nombre del vendedor>, COCHES VENDIDOS <número de> ------ ... ----<nombre del concesionario> <PRINCIPAL/NO PRINCIPAL> ... --<número de> CONCESIONARIOS Y <número de> VENDEDORES MARCA <nombre de la marca> ... TOTAL: <número de> MARCAS <número de> CONCESIONARIOS <número de> VENDEDORES 3. Escribir una función llamada cuantos_coches, que dado el identificador de un cliente, devuelva ‘CLIENTE SIN COCHE’ si está en la tabla CLIENTE pero todavía no ha comprado ningún coche, la matrícula del coche que ha comprado si es un cliente que ha comprado un solo coche, ‘CLIENTE CON <número de> COCHES’ si es un cliente que ha comprado más de un coche, y ‘CLIENTE INEXISTENTE’ si no está en la tabla CLIENTE. 3º I. T. Informática de Sistemas. Fundamentos de Bases de Datos. Práctica B3. Programación en PL/SQL- 2 Este ejercicio hay que hacerlo manejando excepciones. No se puede usar sentencias SELECT COUNT. 4. Escribir un procedimiento llamado vendedores que muestre para cada vendedor, con el formato que se indica a continuación, los vendedores de los que dicho vendedor es jefe. Tenga en cuenta que quizá sea necesario utilizar otro procedimiento auxiliar recursivo. <nombre vendedor a>, SIN JEFE --<nombre vendedor b>, CUYO JEFE ES <nombre vendedor a> -----<nombre vendedor c>, CUYO JEFE ES <nombre vendedor b> --------<nombre vendedor d>, CUYO JEFE ES <nombre vendedor c> --------<nombre vendedor e>, CUYO JEFE ES <nombre vendedor es c> -----<nombre vendedor f>, CUYO JEFE ES <nombre vendedor b> --<nombre vendedor g>, CUYO JEFE ES <nombre vendedor a> -----<nombre vendedor h>, CUYO JEFE ES <nombre vendedor g> --------<nombre vendedor i>, CUYO JEFE ES <nombre vendedor h> <nombre vendedor j>, SIN JEFE ... 5. Escribir los triggers de BD necesarios para impedir que un concesionario pueda tener en la tabla CATALOGO modelos que no sean de su marca. Tenga en cuenta que un concesionario puede cambiar de marca. 6. Añadir un campo llamado num_coches_vendidos a la tabla VENDEDOR. Actualizarlo con el número actual de coches que cada vendedor ha vendido hasta el momento, y escribir los triggers de BD necesarios para mantener automáticamente actualizado dicho campo a partir de ese momento. 3º I. T. Informática de Sistemas. Fundamentos de Bases de Datos. Práctica B3. Programación en PL/SQL- 3 Documentación que se debe entregar La entrega se realizará mediante SUMA, antes de la fecha límite indicada. En el área privada (“Mis Contenidos”) de la asignatura, todos los miembros de cada grupo crearán una carpeta denominada “practicas”. Dentro de esta carpeta, crearán una subcarpeta que se denominará “b3PLSQL”. En esta carpeta (insistimos: cada miembro de cada grupo) depositará el informe de realización de la práctica junto con el conjunto de guiones (scripts) SQL. El formato de estos ficheros será el siguiente: - Informe de la práctica. Documento llamado “b3-fbdsXXX” (.doc o .rtf), cuyas páginas han de estar numeradas y que deberá incluir… Portada, que incluya: - asignatura, curso académico (2007/08) y convocatoria (junio, septiembre, febrero), - identificador (B3) y nombre de la práctica (PRÁCTICA B3. Programación en PL/SQL), - nombre del grupo de prácticas (fbdsXXX, sustituyendo XXX por el número de grupo asignado), - nombre y apellidos de cada componente del grupo, - dirección de correo electrónico de cada integrante del grupo de prácticas. Para cada uno de los 6 ejercicios deberá aparecer lo siguiente: - Número de ejercicio y enunciado del ejercicio. - Comentarios y aclaraciones que se consideren necesarios. - Código PL/SQL, perfectamente sangrado y fácilmente legible. - Pruebas para comprobar el correcto funcionamiento del ejercicio. Concretamente... - Para los ejercicios 1, 2 y 4, mostrar lo que sale por pantalla al ejecutarlos. - Para el ejercicio 3, probar todos los posibles resultados de la función. - Para los ejercicios 5 y 6, probar todos los eventos de cada uno de los triggers creados. Se pueden presentar varias soluciones alternativas de un mismo ejercicio. Puede indicarse la que se considera más adecuada. Es posible ayudarse del comando spool de SQL*Plus para la elaboración del informe. - Guiones PL/SQL (scripts). Ha de crearse un guión (fichero de texto plano) por cada ejercicio, llamado ‘b3-nn.sql’ (nn es el nº de ejercicio), que contendrá… - Número de ejercicio. - Enunciado del ejercicio. - Comentarios y aclaraciones que se consideren oportunos. - Código PL/SQL, perfectamente sangrado y fácilmente legible. - Ejemplos que se consideren oportunos para comprobar el correcto funcionamiento del ejercicio. - NO DEBE APARECER el resultado de la ejecución de las sentencias. Criterios de evaluación Es obligatorio entregar, vía SUMA, tanto el informe de la práctica como todos los guiones (scripts PL/SQL): no se corregirá la práctica si no se ha presentado la documentación completa. Es obligatorio presentar la solución de todos los ejercicios. La lectura del informe ha de ser suficiente para la comprensión total del trabajo realizado en la práctica (sin necesidad de recurrir a los guiones). Se valorará la inclusión de varias soluciones alternativas cuando haya lugar a ello, la justificación de las mismas y la presentación (estilo) de la práctica. Es obligatorio respetar estrictamente las normas y el formato de presentación de la práctica detallados en este documento 3º I. T. Informática de Sistemas. Fundamentos de Bases de Datos. Práctica B3. Programación en PL/SQL- 4