Вы находитесь на странице: 1из 4

2 Administracin de Sistemas Informticos en Red

< ADMINISTRACIN DE SISTEMAS GESTORES DE BASES DE DATOS >

Tema 4
AUTOMATIZACIN DE TAREAS: CONSTRUCCIN DE GUIONES DE ADMINISTRACIN

Tareas Programacin de Procedimientos y Funciones

1 Crea un procedimiento que visualice todas las pelculas cuyo costo de reemplazo sea superior a
un valor que se pasar como parmetro de entrada. Cuntas pelculas tienen un costo de
reemplazo superior a 20?

# Ejercicio 1
DELIMITER $$
DROP PROCEDURE IF EXISTS costes$$
CREATE PROCEDURE sakila.costes(IN coste INT)
BEGIN
SELECT * FROM film WHERE replacement_cost > coste;
END$$

CALL sakila.costes(20);

2 Crea un procedimiento que visualice todas las pelculas cuyo costo de reemplazo est
comprendido entre dos cantidades que se pasarn como parmetros de entrada. Cuntas
pelculas tienen un costo de reemplazo superior a 20 y 21,99 ?

# Ejemplo 2
DELIMITER $$
DROP PROCEDURE IF EXISTS costes$$
CREATE PROCEDURE sakila.costes(IN coste1 INT, IN coste2
DECIMAL(5,2))
BEGIN
SELECT * FROM film WHERE replacement_cost
BETWEEN coste1 AND coste2;
END$$

CALL sakila.costes(20, 21.99);

3 Crea un procedimiento que reciba como parmetros de entrada el continente y la lengua y


obtenga todos los pases de ese continente que hablen esa lengua. qu pases de Asia tienen
como lengua entre otras el ingls? Nota, a pesar de que el campo continente es de tipo enum,
podemos pasar el continente como tipo varchar porque es compatible.

# Ejemplo 3
DELIMITER $$
DROP PROCEDURE IF EXISTS continente_lengua$$
CREATE PROCEDURE continente_lengua (IN continente
VARCHAR(30),IN lengua VARCHAR(30))
BEGIN
SELECT name FROM country WHERE
continent=continente and code in (select countrycode from
countrylanguage where language=lengua);
END$$

CALL continente_lengua('Asia','English');
4 Escribe un procedimiento que reciba una palabra y la devuelva escrita del revs. Utiliza para ello
un nico parmetro de entrada y salida.

# Ejercicio 4
DELIMITER $$
DROP PROCEDURE IF EXISTS reves$$
CREATE PROCEDURE reves (INOUT palabra VARCHAR(25))
BEGIN
SELECT REVERSE(@entrada) 'Palabra del revs';
END$$

SET @entrada='educa';$$

CALL reves(@entrada);$$

5 Crear un procedimiento almacenado que cambie el mail de un cliente, tabla costumer, por otro
que se pasar como parmetro, el procedimiento almacenado recibir dos parmetros, el
identificador del cliente y el nuevo mail. Ejecutar el procedimiento almacenado.

# Ejemplo 5
DELIMITER $$
DROP PROCEDURE IF EXISTS cambio_mail$$
CREATE PROCEDURE sakila.cambio_mail(id SMALLINT, correo
VARCHAR(80))
BEGIN
UPDATE customer SET email=correo WHERE
customer_id=id;
END$$

CALL sakila.cambio_mail(22, 'gabriel@outlook.es');

SELECT customer_id,email FROM customer WHERE


customer_id=22;

6 Crear un procedimiento almacenado que tenga como parmetros el nombre, apellidos y el


nuevo mail de un cliente de la tabla costumer (NOTA: debes utilizar el procedimiento anterior
para cambiar el mail.)

# Ejemplo 6
DELIMITER $$
DROP PROCEDURE IF EXISTS cambio_correo$$
CREATE PROCEDURE sakila.cambio_correo(nombre
VARCHAR(45), apellido VARCHAR(45), correo VARCHAR(50))
BEGIN
DECLARE identi SMALLINT;
SELECT customer_id INTO identi FROM customer
WHERE first_name=nombre AND last_name=apellido;
CALL sakila.cambio_mail(identi,correo);
END$$

CALL sakila.cambio_correo('MARY','SMITH','MS@outlook.es');

SELECT first_name,last_name,email FROM sakila.customer WHERE


first_name='MARY';
7 Crea un procedimiento que pase dos parmetros de entrada, identificador de categora e
identificador de actor y obtenga los datos de las pelculas sobre esa categora en las que ha
trabajado ese actor. Prueba el ejemplo con el actor 182 y la categora 2.

# Ejemplo 7
DELIMITER $$
DROP PROCEDURE IF EXISTS categoria_actor$$
CREATE PROCEDURE sakila.categoria_actor(IN actor
SMALLINT(5), IN categoria TINYINT(3))
BEGIN
SELECT title,description,length,rating,special_features
FROM film WHERE film_id IN (SELECT film_id FROM film_actor
WHERE actor_id=actor)
AND film_id IN (SELECT film_id FROM film_category
WHERE category_id=categoria);
END$$

CALL sakila.categoria_actor('182','2');

8 Crea un procedimiento que tenga un parmetro de entrada que ser el nombre de la categora y
un parmetro de salida que contendr el nmero de pelculas para esa categora.

# Ejemplo 8
DELIMITER $$
DROP PROCEDURE IF EXISTS categoria_numpeliculas$$
CREATE PROCEDURE categoria_numpeliculas(IN categoria
varchar(45), OUT contar INT)
BEGIN
SELECT COUNT(*) INTO contar FROM film WHERE
film_id
IN (SELECT film_id FROM film_category WHERE category_id
IN (SELECT category_id FROM category WHERE name=
categoria));
SELECT @contar 'Pelculas de animacin';
END$$

CALL categoria_numpeliculas('Animation', @contar);

9 Desarrollar una funcin que devuelva el nmero de aos completos que hay entre dos fechas
que se pasan como parmetros. Utiliza la funcin DATEDIFF. Para visualizar el formato de la
fecha con la que trabaja mysql en la sesin que ests utilizando visualiza la fecha actual
utilizando la funcin current_date()

# Ejemplo 9

10 Escribir una funcin que, haciendo uso de la funcin anterior, devuelva los trienios que hay
entre dos fechas

# Ejemplo 10
11 Codificar un procedimiento que reciba una lista de hasta tres nmeros y visualice su suma (ten
en cuenta que pueden ser NULL)

# Ejemplo 11
DELIMITER $$
DROP PROCEDURE IF EXISTS suma_numeros$$
CREATE PROCEDURE suma_numeros(num1 INT, num2 INT, num3
INT)
BEGIN
SELECT
SUM(IFNULL(num1,0)+IFNULL(num2,0)+IFNULL(num3,0)) 'Suma';
END$$

CALL suma_numeros(1,2,3);

12 Escribir un procedimiento que permita borrar un actor cuyo identificador se pasar como
parmetro. Si el actor cuyo nmero se ha pasado como parmetro no existe, aparecer un
mensaje diciendo Ese actor no existe. Comprueba el funcionamiento del procedimiento. Qu
ocurre cuando tratas de borrar un actor que ya existe? Por qu?

*En el caso de intentar eliminar un actor existente no podramos, ya que la tabla se encuentra
unida a otras a travs de claves forneas.

# Ejemplo 12
DELIMITER $$
DROP PROCEDURE IF EXISTS borrar_actor$$
CREATE PROCEDURE borrar_actor(num INT)
BEGIN
DECLARE numero INT;
SELECT actor_id INTO numero FROM actor WHERE
actor_id=num;
IF numero IS NULL THEN
SELECT CONCAT('El actor ', num,' no existe')
'Error de borrado';
ELSE
DELETE FROM actor WHERE actor_id=num;
END IF;
END$$

CALL borrar_actor(222);

Вам также может понравиться