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 ;