Está en la página 1de 8

2023

Bases de datos

Fecha última revisión:


24/04/2023

JCCA

[Unidad 8
Actividades]

Programación de bases de datos


Unidad 8: Actividades Bases de datos

Sumario
Actividad 1. Procedimientos...............................................................................................................4
Actividad 2. Funciones........................................................................................................................5
Actividad 3. Estructuras de control.....................................................................................................5
Actividad 4. Manejo de errores en MySQL.........................................................................................7
Actividad 5. Transacciones con procedimientos almacenados...........................................................8
Actividad 6. Triggers........................................................................................................................... 8

2
Unidad 8: Actividades Bases de datos

Nombre de las bases de datos: pZ_ud8_aX (donde Z es el número de puesto y X el número de actividad solucionada).
Ejemplo: Rosa está en el puesto 61 y crea la base de datos de la actividad 2, entonces el nombre de la base de datos
será: p61_ud8_a2

Renombrar el archivo suministrado por el profesor, realizar los cambios necesarios en el código y ejecutar el spript (en
la actividad que corresponda)

Nombre de los archivos:


• Archivo de creación de la BD: será el mismo que el nombre dado a las bases de datos.
• Archivo de solución de actividad: mismo que el de la BD pero terminado en "s".

Base de datos: p10_ud8_a1 (recuerda cambiar nombre antes de ejecutar)

3
Unidad 8: Actividades Bases de datos

Actividad 1. Procedimientos

1. Crea un procedimiento de nombre listado_artistas que muestre el nombre y apellidos de


los artistas separados por coma con el formato: apellidos,nombre ordenados de forma
descendente.

2. Crea un procedimiento de nombre ultima_atraccion que muestre los datos de la última


atracción celebrada (tabla ATRACCION_DIA), utilizando una única instrucción de consulta
SQL (utilizando subconsultas o JOIN)

3. Crea un procedimiento de nombre ultima_atraccion2 que muestre los datos de la última


atracción celebrada (tabla ATRACCION_DIA), empleando variables locales. Para ello guarda
en una variable el nombre de la última atracción celebrada y busca los datos de dicha
atracción (no se pueden utilizar ni subconsultas ni JOIN).

4. Crea un procedimiento de nombre ultima_atraccion_artista que obtenga los datos de la


atracción y del artista que trabaja en dicha atracción, cuya fecha de inicio ha empezado
más tarde. Emplea dos variables. Una para guardar el nif del artista y otra para guardar el
nombre de la atracción.

5. Crea un procedimiento de nombre atracciones_desdeFecha que devuelva los datos de las


atracciones que han comenzado a partir de la fecha indicada.

6. Crea un procedimiento de nombre add_pista que permita añadir una nueva pista con los
datos pasados como parámetro. Muestra «1» si se ha añadido con éxito, «0» en caso
contrario (utiliza la función ROW_COUNT() )

7. Crea un procedimiento de nombre modificar_atracciones que permita modificar los datos


de una determina atracción (no se permite actualizar su clave primaria). Muestra «1» si se
ha modificado con éxito, «0» en caso contrario.

8. Crea un procedimiento de nombre borrar_pista que borre una pista por su nombre. Borra
la pista que hayas añadido en el ejercicio 6. Muestra «1» si se ha borrado con éxito, «0» en
caso contrario.

9. Crea un procedimiento de nombre aforo_pista al que se le pase el nombre de una pista y


devuelve en forma de parámetro de salida su aforo. Plantea dos posibles soluciones dentro
del mismo procedimiento: en una puedes utilizar la palabra reservada SET y en otra no.

4
Unidad 8: Actividades Bases de datos

10. Crea un procedimiento de nombre animales_y_aforo al que se le pase el nombre de un


animal y devuelva, empleando un parámetro de salida y haciendo uso del procedimiento
creado en el ejercicio 9, una cadena con el formato: NombreAnimal:peso:pista:aforo.

11. Crea un procedimiento de nombre incremento_aforo_pista al que se le envíe como


parámetros el nombre de la pista y una cantidad que representa el incremento del aforo. El
procedimiento debe devolver en el mismo parámetro el nuevo aforo de la pista.

Actividad 2. Funciones

1. Crea una función de nombre numAtracciones_pista que devuelva el número atracciones


que se celebraron en una determinada pista.

2. Crea una función de nombre atracciones_entreFechas que devuelva el número de


atracciones que se celebraron entre dos fechas dadas.

3. Crea una función de nombre artistas_numAnimales al que se le pase el nif de un artista y


devuelva a cuantos animales cuida.
a) Llama a la función y haz que muestre a cuantos animales cuida uno de los artistas.
b) Guarda en una variable de sesión a cuantos animales cuida el artista con nif 22222222B
y muestra su valor.

4. Crea una función de nombre pesoMedio_animales que devuelva el peso medio de los
animales.

5. Crea una función de nombre animalMasAlto_atraccion que dada una determinada


atracción devuelve la estatura del animal más alto de esa atracción.

Actividad 3. Estructuras de control


1. Crea un procedimiento de nombre pistas_animales que devuelva los animales (nombre,
peso y anhos) que trabajen en la pista indicada. En caso de que no haya animales deberá
mostrar SIN ANIMALES y en el caso de que no exista la pista, ESA PISTA NO EXISTE.

2. Crea un procedimiento de nombre artistas_porAtraccion al que se le pase un nif de un


artista y dos fechas y devuelva en forma de parámetro de salida, en cuantas atracciones
trabajó ese artista entre las dos fechas indicadas.
◦ En caso de que el artista no exista, el parámetro de salida debe devolver -1 y mostrar la
cadena NO EXISTE ESE ARTISTA.

5
Unidad 8: Actividades Bases de datos

3. Crea un procedimiento de nombre peso_animales que dado un determinado animal


muestre, atendiendo a su peso, uno de los siguiente mensajes. No se puede hacer uso de la
instrucción IF.

Si peso<=30: 'LIGERO'
Si peso>=30 y <50: 'SEMI-LIGERO'
Si peso >=50 y <=100: 'MEDIO'
Si peso >100: 'PESADO'

Llama a la función para mostrar el peso de cada uno de los animales del CIRCO

4. Crea una función de nombre animales_estadoPorAnhos que devuelva la cadena:

Si tipo = León
anhos < 2: 'JOVEN'
anhos >=2 y <=5: 'MADURO'
anhos > 5: 'VIEJO'

Cualquier otro tipo:


anhos < 1: 'JOVEN'
anhos >=1 y <=3: 'MADURO'
anhos > 3: 'VIEJO'

Resuelve este ejercicio haciendo una combinación del uso de IF y CASE.


Llama a la función para mostrar el estado por años de cada uno de los animales del CIRCO.

5. Crea un procedimiento de nombre artistas_yJefes que muestre a cada artista (nif) con su
jefe (apellidos,nombre). En caso de que no tenga jefe deberá mostrar la cadena SIN JEFE.
Este procedimiento se podría realizar sin hacer uso de cursores, pero para practicar, vas a
crear un cursor que recorra todos los artistas y por cada artista que muestre los datos de su
jefe.

6. Crea un procedimiento de nombre comprobar_atraccionesGanancias en el que queremos


comprobar si las ganancias totales de cada atracción coinciden con la suma de las ganancias
de los días en los que se celebró. El procedimiento debe mostar una cadena con el formato:
atraccion1:gananciatotal:gananciasumada,
atraccion2:gananciatotal:gananciasumada
con las atracciones que no cumplen que la suma sea igual…

7. Crea un procedimiento de nombre suplemento_porCuidados, que compruebe a cuantos


animales cuida cada uno de los artistas. Aquellos artistas que cuidan más de un número de
animales indicados por un parámetro se les dará un plus a su nómina igual al número de
animales que cuida multiplicado por 100 euros. Muestra el nombre y complemento de
cada artista así como la suma de todos los complementos.

6
Unidad 8: Actividades Bases de datos

El resultado debe aparecer como una única consulta (no valen varios SELECT).
Para ello haz uso de una tabla temporal que vaya guardando los datos (el nombre completo
y el suplemento de la ganancia) y posteriormente haz un SELECT de dicha tabla. Para crear
una tabla temporal haz uso de la sentencia: CREATE TEMPORARY TABLE T_TEMPORAL
(nombre_completo varchar(150), suplemento decimal(6,2)) ; . Dicha orden debe ir
después de la orden DECLARE CONTINUE HANDLER del cursor.
Recuerda borrar la tabla temporal al salir del procedimiento: DROP TEMPORARY TABLE
T_TEMPORAL;

Actividad 4. Manejo de errores en MySQL

1. Crea un procedimiento de nombre nuevo_animal que añade un nuevo animal. En caso de


intentar dar de alta un animal con el mismo nombre, captura la excepción y haz que el
procedimiento muestre -1. En caso de que el alta sea correcta, que mostrará 0.

En el caso de que el nombre de la pista o de la atracción no exista, captura la excepción y


devuelve el valor -2.
Para saber el número de excepción que tienes que capturar, provoca el fallo y anota el
número.
Si provocamos los errores podemos comprobar que:
Error 1062: Clave primaria duplicada
Error 1452: Error de clave foránea.

Como el procedimiento sólo va a tener una orden INSERT, no hace falta hacer que salga del
mismo al producirse la excepción.

7
Unidad 8: Actividades Bases de datos

Actividad 5. Transacciones con procedimientos almacenados


1. Crea un procedimiento de nombre borrar_artista que borre el artista y todas sus tablas
relacionadas.

Debe comprobar si el artista existe. En caso de que no existiera, debe mostrar el valor -1.
En caso de que exista y todo el proceso de borrado hubiese sido correcto, debe mostrar el
valor 0.
Añadir una transacción y controlar los posibles errores.

2. Crea una función de nombre artistas_modificarJefe, al que se le pase un nif y asigne como
jefe dicho nif a todos los artistas que no tengan jefe y que hayan trabajado en al menos dos
atracciones.

Emplea un cursor para buscar los artistas que cumplan las condiciones.
Si todo va bien debe devolver 0.
En caso de que el nif enviado no exista debe devolver el valor -1.
En cualquier otro caso de error debe devolver -2.
Añadir una transacción y controlar los posibles errores

Actividad 6. Triggers

1. Crea una tabla de nombre CONTADOR con las columnas:

id: autonumérica Clave primaria


tipo: varchar(100) no nulo
valor: int no nulo

• Añade dos filas con los valores para tipo/valor: pistas/0 animales/0.
• Ejecuta la orden SQL que actualice la tabla contador con los datos actuales de las
tablas.
• Haz que cada vez que haya alguna operación que modifique (alta/baja) el número
de pistas o de animales, se actualice el número total de los mismos.

Solución: EL proceso para crear un trigger es:


• Identificar la/s tabla/s sobre la/s que vamos a crear el trigger.
• Identificar la operación sobre la que se va a crear el trigger.
• Identificar si queremos que el trigger se ejecuta antes o después.
• Identificar si debemos hacer uso de OLD y/o NEW.

También podría gustarte