PL/SQL : Gestion des Cyclistes

Exercice PL/SQL : Gestion des Cyclistes

La Falaise de Dschang est connue pour être un lieu de prédilection pour les cyclistes amateurs et professionnels. Chaque année, une course de vélo est organisée pour permettre aux coureurs de se mesurer les uns aux autres et de tester leurs limites sur les routes sinueuses de cette région montagneuse.

Les coureurs qui participent à cette course sont souvent des athlètes aguerris, entraînés à affronter des terrains difficiles et des conditions météorologiques changeantes. Ils doivent faire preuve d'une grande résistance et d'une endurance à toute épreuve pour espérer franchir la ligne d'arrivée en premier.

Malgré les défis rencontrés sur la Falaise de Dschang, les coureurs sont attirés par la beauté spectaculaire de la région et la fierté de participer à une compétition prestigieuse. Pour beaucoup d'entre eux, la course de vélo de la Falaise de Dschang est un véritable test de leur force physique et de leur détermination à réussir.

Dans le cadre d'une course de vélo, le directeur de  l'entreprise Mr Joël Yankam souhaite mettre en place une base de données en PL/SQL pour suivre les temps de passage des coureurs à chaque point de contrôle. Les informations à stocker sont les suivantes :

  • id_coureur : identifiant unique du coureur (entier)
  • nom : nom du coureur (texte)
  • prenom : prénom du coureur (texte)
  • equipe : nom de l'équipe du coureur (texte)
  • temps : temps de passage du coureur à chaque point de contrôle (nombre décimal)

A partir de ces informations, vous devez réaliser les tâches suivantes en PL/SQL :

  1. Créer une table "Coureurs" avec les champs ci-dessus.
  2. Créer une table "Points_controle" pour stocker les temps de passage des coureurs à chaque point de contrôle.
  3. Créer une procédure stockant le temps de passage d'un coureur à un point de contrôle donné.
  4. Créer une fonction qui retourne le temps total de course pour un coureur donné.
  5. Créer un trigger pour vérifier que le temps de passage d'un coureur à un point de contrôle est bien supérieur au temps de passage précédent.
  6. Créer un autre trigger pour mettre à jour le temps total de course d'un coureur à chaque nouveau point de contrôle.

Correction : PL/SQL

1)

 
CREATE TABLE Coureurs (
    id_coureur NUMBER PRIMARY KEY,
    nom VARCHAR2(50),
    prenom VARCHAR2(50),
    equipe VARCHAR2(50)
);


2)

 
CREATE TABLE Points_controle (
    id_coureur NUMBER,
    id_point NUMBER,
    temps NUMBER(6,2),
    CONSTRAINT fk_coureur FOREIGN KEY (id_coureur) REFERENCES Coureurs(id_coureur)
);

3)

 
CREATE OR REPLACE PROCEDURE Ajouter_temps(
    id_coureur IN NUMBER,
    id_point IN NUMBER,
    temps IN NUMBER
) IS
BEGIN
    INSERT INTO Points_controle (id_coureur, id_point, temps)
    VALUES (id_coureur, id_point, temps);
END;

4)

 
CREATE OR REPLACE FUNCTION Temps_total(
    id_coureur IN NUMBER
) RETURN NUMBER IS
    total_temps NUMBER(6,2) := 0;
BEGIN
    SELECT SUM(temps) INTO total_temps
    FROM Points_controle
    WHERE id_coureur = id_coureur;
    RETURN total_temps;
END;



5)

 
CREATE OR REPLACE TRIGGER Verif_temps
BEFORE INSERT ON Points_controle
FOR EACH ROW
DECLARE
    last_temps NUMBER(6,2);
BEGIN
    SELECT temps INTO last_temps
    FROM Points_controle
    WHERE id_coureur = :new.id_coureur AND id_point = :new.id_point - 1;
    IF last_temps > :new.temps THEN
        RAISE_APPLICATION_ERROR(-20001, 'Le temps de passage doit être supérieur au temps précédent');
    END IF;
END;

6)

 
CREATE OR REPLACE TRIGGER Maj_temps_total
AFTER INSERT ON Points_controle
FOR EACH ROW
BEGIN
    UPDATE Coureurs
    SET temps_total = (SELECT SUM(temps) FROM Points_controle WHERE id_coureur = :new.id_coureur)
    WHERE id_coureur = :new.id_coureur;
END;

 

Ce trigger met à jour le temps total de course d'un coureur à chaque nouveau point de contrôle. Il calcule la somme des temps de passage du coureur à tous les points de contrôle, puis met à jour la colonne "temps_total" de la table "Coureurs" pour le coureur concerné. Notez que la colonne "temps_total" doit être ajoutée à la table "Coureurs" pour que ce trigger fonctionne :

 
ALTER TABLE Coureurs ADD temps_total NUMBER(6,2);

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