Files
mysql-db-vorlesung/04-package-film.sql
Sebastian Seedorf ff6962de52 initial commit
2020-12-06 12:40:52 +01:00

68 lines
2.0 KiB
SQL

DELIMITER $$
-- Schauspieler-Film-Package
DROP FUNCTION IF EXISTS film_pub_chk_geburtstag$$
CREATE FUNCTION film_pub_chk_geburtstag(p_geburtstag DATETIME)
RETURNS BIT
BEGIN
IF EXISTS(SELECT 1 FROM (SELECT 1) t WHERE p_geburtstag BETWEEN '1900-01-01' AND '2099-12-31')
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END $$
DROP FUNCTION IF EXISTS film_priv_search_schauspieler$$
CREATE FUNCTION film_priv_search_schauspieler (p_vorname VARCHAR(255), p_nachname VARCHAR(255))
RETURNS INTEGER UNSIGNED
BEGIN
DECLARE res INTEGER UNSIGNED;
DECLARE EXIT HANDLER FOR 1172 BEGIN
SIGNAL SQLSTATE '50000' SET MESSAGE_TEXT = 'Mehr als ein Schauspieler mit dem Namen gefunden!';
END;
SELECT Schauspieler.ID INTO res FROM Schauspieler WHERE Vorname=p_vorname AND Nachname=p_nachname;
IF res IS NULL THEN
SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'Kein Schauspieler mit dem Namen gefunden!';
END IF;
RETURN res;
END $$
DROP FUNCTION IF EXISTS `film_pub_search_film`$$
CREATE FUNCTION `film_pub_search_film` (p_filmname VARCHAR(255))
RETURNS INTEGER UNSIGNED
BEGIN
DECLARE res INTEGER UNSIGNED;
DECLARE EXIT HANDLER FOR 1172 BEGIN
SIGNAL SQLSTATE '50010' SET MESSAGE_TEXT = 'Mehr als einen Film mit dem Titel gefunden!';
END;
SELECT Film.ID INTO res FROM Film WHERE Name=p_filmname;
IF res IS NULL THEN
SIGNAL SQLSTATE '50011' SET MESSAGE_TEXT = 'Keinen Film mit dem Titel gefunden!';
END IF;
RETURN res;
END $$
DROP PROCEDURE IF EXISTS `film_pub_add_schauspieler_film`$$
CREATE PROCEDURE `film_pub_add_schauspieler_film` (p_vorname VARCHAR(255), p_nachname VARCHAR(255), p_filmname VARCHAR(255))
BEGIN
DECLARE EXIT HANDLER FOR 1062 BEGIN
SIGNAL SQLSTATE '50022' SET MESSAGE_TEXT = 'Schauspieler-Film-Beziehung schon vorhanden!';
END;
INSERT INTO nm_Film_Schauspieler (fk_Film_ID, fk_Schauspieler_ID) VALUES (film_pub_search_film(p_filmname), film_priv_search_schauspieler(p_vorname, p_nachname));
END $$
DELIMITER ;