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 ;