PL/SQL : Gestion Musique Africaine

Exercice PL/SQL : Gestion Musique Africaine

La musique africaine est très diverse, avec des rythmes variés et des instruments traditionnels tels que les djembés, les kora et les balafons. Elle est souvent associée à la danse et à la célébration, et a une longue histoire de transmission orale de génération en génération. En tant que passionné de musique africaine, vous êtes en train de créer une base de données pour répertorier les chansons les plus populaires du continent. Vous décidez d'utiliser PL/SQL pour ajouter des fonctionnalités avancées à votre application.

  1. Créez une table "Chansons" avec les colonnes suivantes : "id" (clé primaire), "titre", "artiste", "année" et "pays".
  2. Ajoutez un trigger nommé "Maj_artiste" qui mettra automatiquement à jour la colonne "pays" pour l'artiste d'une chanson si elle est manquante. Le pays sera déterminé en fonction de la nationalité de l'artiste dans la table "Artistes".
  3. Créez une table "Genres" avec les colonnes suivantes : "id" (clé primaire) et "nom".
  4. Ajoutez un trigger nommé "Maj_genre" qui insérera automatiquement un nouveau genre dans la table "Genres" s'il n'existe pas déjà lors de l'ajout d'une nouvelle chanson.
  5. Créez une table "Chansons_Genres" avec les colonnes suivantes : "id" (clé primaire), "id_chanson" (clé étrangère vers la table "Chansons") et "id_genre" (clé étrangère vers la table "Genres").
  6. Ajoutez un trigger nommé "Maj_Chansons_Genres" qui mettra automatiquement à jour la table "Chansons_Genres" chaque fois qu'une chanson sera associée à un nouveau genre.
  7. Enfin, écrivez une procédure stockée nommée "Top_chansons_genre" qui prendra en entrée le nom d'un genre de musique et renverra les 10 chansons les plus populaires dans ce genre, triées par ordre décroissant de popularité.

Note : Dans cet exercice, les triggers permettront d'automatiser la mise à jour de la base de données lorsque de nouvelles chansons sont ajoutées ou lorsque des associations entre chansons et genres sont créées.

Correction : PL/SQL

1)

 
CREATE TABLE Chansons (
    id NUMBER(10) PRIMARY KEY,
    titre VARCHAR2(100),
    artiste VARCHAR2(100),
    annee NUMBER(4),
    pays VARCHAR2(50)
);

2)

 
CREATE OR REPLACE TRIGGER Maj_artiste
BEFORE INSERT OR UPDATE ON Chansons
FOR EACH ROW
BEGIN
    IF :NEW.pays IS NULL THEN
        SELECT pays INTO :NEW.pays
        FROM Artistes
        WHERE artiste = :NEW.artiste;
    END IF;
END;

3)

 
CREATE TABLE Genres (
    id NUMBER(10) PRIMARY KEY,
    nom VARCHAR2(50)
);


4)

 
CREATE OR REPLACE TRIGGER Maj_genre
BEFORE INSERT ON Chansons
FOR EACH ROW
DECLARE
    genre_exist NUMBER(1);
BEGIN
    SELECT COUNT(*) INTO genre_exist
    FROM Genres
    WHERE nom = :NEW.genre;
    
    IF genre_exist = 0 THEN
        INSERT INTO Genres (id, nom)
        VALUES (Seq_Genres.nextval, :NEW.genre);
    END IF;
END;


5)

 
CREATE TABLE Chansons_Genres (
    id NUMBER(10) PRIMARY KEY,
    id_chanson NUMBER(10),
    id_genre NUMBER(10),
    FOREIGN KEY (id_chanson) REFERENCES Chansons(id),
    FOREIGN KEY (id_genre) REFERENCES Genres(id)
);


6)

 
CREATE OR REPLACE TRIGGER Maj_Chansons_Genres
AFTER INSERT ON Chansons_Genres
FOR EACH ROW
BEGIN
    UPDATE Chansons
    SET genre = :NEW.id_genre
    WHERE id = :NEW.id_chanson;
END;

 

7)

 
CREATE OR REPLACE PROCEDURE Top_chansons_genre(p_genre IN VARCHAR2)
AS
BEGIN
    SELECT *
    FROM (
        SELECT Chansons.id, Chansons.titre, Chansons.artiste, COUNT(*) AS nb_ecoutes
        FROM Chansons, Chansons_Genres, Genres
        WHERE Chansons.id = Chansons_Genres.id_chanson
        AND Chansons_Genres.id_genre = Genres.id
        AND Genres.nom = p_genre
        GROUP BY Chansons.id, Chansons.titre, Chansons.artiste
        ORDER BY nb_ecoutes DESC
    )
    WHERE ROWNUM <= 10;
END;

Si vous avez trouvé les exercices corrigés en PL/SQL de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 658395978 | Réaliser Par Joël_Yk

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam