You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Procédure stockée pour lister les films d’un réalisateur donné en paramètre
CREATE OR REPLACEFUNCTIONget_movies_by_director(p_lastname TEXT)
RETURNS TABLE (
movie_title VARCHAR(138),
movie_release_date DATE
)
AS $$
BEGIN
RETURN QUERY
SELECTm.movie_title, m.movie_release_dateFROM Movie m
JOIN Director d ONm.director_id=d.director_idWHEREd.director_lastname ILIKE p_lastname;
END;
$$ LANGUAGE plpgsql;
Procédures stockées pour gérer les opérations CRUD d’un acteur associé à un film
Procédure pour lister les films d’un acteur donné
CREATE OR REPLACEFUNCTIONget_actor_by_movie(p_lastname TEXT)
RETURNS TABLE (
actor_firstname VARCHAR(50),
actor_lastname VARCHAR(50),
actor_gender VARCHAR(5),
role_name VARCHAR(255),
movie_title VARCHAR(138)
)
AS $$
BEGIN
RETURN QUERY
SELECTa.actor_firstname,
a.actor_lastname,
a.actor_gender,
ar.role_name,
m.movie_titleFROM Actor a
JOIN PLAY_AS pa ONpa.actor_id=a.actor_idJOIN Actor_Role ar ONar.role_id=pa.role_idJOIN PLAY_IN pi ONpi.role_id=ar.role_idJOIN Movie m ONm.movie_id=pi.movie_idWHEREUPPER(a.actor_lastname) =UPPER(p_lastname);
END;
$$ LANGUAGE plpgsql;
Procédure pour ajouter un acteur à un film
CREATE OR REPLACE PROCEDURE add_actor_to_movie(
p_actor_id UUID,
p_role_id UUID,
p_movie_id UUID
)
LANGUAGE plpgsql
AS $$
BEGIN-- Lier acteur au roleINSERT INTO PLAY_AS (actor_id, role_id)
VALUES (p_actor_id, p_role_id);
-- Lier role au filmINSERT INTO PLAY_IN (movie_id, role_id)
VALUES (p_movie_id, p_role_id);
END;
$$;
Procédure pour modifier le rôle d’un acteur dans un film
CREATE OR REPLACE PROCEDURE update_actor_to_movie(
p_actor UUID,
p_movie UUID,
p_new_role UUID
)
LANGUAGE plpgsql
AS $$
DECLARE
old_role UUID;
BEGIN-- Récupérer l'ancien role de l’acteur dans ce filmSELECTpi.role_id INTO old_role
FROM PLAY_IN pi
JOIN PLAY_AS pa ONpa.role_id=pi.role_idWHEREpa.actor_id= p_actor ANDpi.movie_id= p_movie
LIMIT1;
IF old_role IS NOT NULL THEN
DELETEFROM PLAY_AS WHERE actor_id = p_actor AND role_id = old_role;
DELETEFROM PLAY_IN WHERE movie_id = p_movie AND role_id = old_role;
END IF;
-- Ajouter la nouvelle relationINSERT INTO PLAY_AS (actor_id, role_id) VALUES (p_actor, p_new_role);
INSERT INTO PLAY_IN (movie_id, role_id) VALUES (p_movie, p_new_role);
END;
$$;
Procédure pour supprimer un acteur d’un film
CREATE OR REPLACE PROCEDURE delete_actor_from_movie(
p_actor_id UUID,
p_movie_id UUID
)
LANGUAGE plpgsql
AS $$
DECLARE
role_id UUID;
BEGIN-- Trouver le role dans SELECTpi.role_id INTO role_id
FROM PLAY_AS pa
JOIN PLAY_IN pi ONpa.role_id=pi.role_idWHEREpa.actor_id= p_actor_id ANDpi.movie_id= p_movie_id
LIMIT1;
-- Supprimer les liens entre les tablesDELETEFROM PLAY_AS WHERE actor_id = p_actor_id AND role_id = role_id;
DELETEFROM PLAY_IN WHERE movie_id = p_movie_id AND role_id = role_id;
-- Supression du role s'il n'y a plus d'acteur & film lié a celui ciDELETEFROM Actor_Role
WHERE role_id = role_id
AND role_id NOT IN (SELECT role_id FROM PLAY_AS)
AND role_id NOT IN (SELECT role_id FROM PLAY_IN);
END;
$$;