Advertisement
Djomobil

Fonction & Trigger TP3 - BDD

Mar 19th, 2020
1,162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.95 KB | None | 0 0
  1. --------------------------------------------------------------------------------
  2. -- Q2-B : Contrôler l'inscription d'un adhérent comme membre d'équipage
  3. -- trigger t_InscriptionEqu
  4. --------------------------------------------------------------------------------
  5. CREATE OR REPLACE FUNCTION f_InscriptionEqu() RETURNS TRIGGER AS $$
  6. BEGIN
  7.  
  8.     IF EXISTS (SELECT numact FROM activite WHERE datedebut <= CURRENT_DATE AND numact = NEW.numact) THEN
  9.         RAISE NOTICE '(t_InscriptionEqu) L''activité % est en cours ou déjà terminée. La requete est annulée !', NEW.numact;
  10.         RETURN NULL;
  11.  
  12.     ELSIF NOT membredispo(NEW.numadh, (SELECT datedebut FROM activite WHERE numact = NEW.numact), (SELECT datefin FROM activite WHERE numact = NEW.numact)) THEN
  13.         RAISE NOTICE '(t_InscriptionEqu) % n''est pas disponible pour l''activité %. La requete est annulée !', (SELECT nom FROM adherent WHERE numadh = NEW.numadh), NEW.numact;
  14.         RETURN NULL;
  15.  
  16.     ELSIF (SELECT COUNT(numadh)+1 FROM equipage WHERE numbat = NEW.numbat AND numact = NEW.numact) = (SELECT nbplaces FROM bateau WHERE numbat = NEW.numbat) THEN
  17.         RAISE NOTICE '(t_InscriptionEqu) Le Bateau n°% est complet. La requete est annulée !', NEW.numbat;
  18.         RETURN NULL;
  19.  
  20.     ELSE RETURN NEW;
  21.     END IF;
  22.  
  23.  
  24. END; $$ LANGUAGE 'plpgsql';
  25.  
  26.  
  27. CREATE TRIGGER t_InscriptionEqu
  28. BEFORE
  29. INSERT
  30. ON Equipage
  31. FOR EACH ROW
  32. EXECUTE PROCEDURE f_InscriptionEqu();
  33.  
  34.  
  35. --------------------------------------------------------------------------------
  36. -- Q3-B : Contrôler l'inscription d'un adhérent comme chef de bord
  37. -- trigger t_InscriptionCdb
  38. --------------------------------------------------------------------------------
  39.  
  40. CREATE OR REPLACE FUNCTION f_InscriptionCdb() RETURNS TRIGGER AS $$
  41. BEGIN
  42.  
  43.     IF EXISTS (SELECT numact FROM activite WHERE datedebut <= CURRENT_DATE AND numact = NEW.numact) THEN
  44.         RAISE NOTICE '(t_InscriptionCdb) L''activité % est en cours ou déjà terminée. La requete est annulée !', NEW.numact;
  45.         RETURN NULL;
  46.  
  47.     ELSIF NOT membredispo(NEW.numadh, (SELECT datedebut FROM activite WHERE numact = NEW.numact), (SELECT datefin FROM activite WHERE numact = NEW.numact)) THEN
  48.         RAISE NOTICE '(t_InscriptionCdb) % n''est pas disponible pour l''activité %. La requete est annulée !', (SELECT nom FROM adherent WHERE numadh = NEW.numadh), NEW.numact;
  49.         RETURN NULL;
  50.  
  51.     ELSIF (SELECT skipper FROM adherent WHERE numadh = NEW.numadh) = 'non' THEN
  52.         RAISE NOTICE '(t_InscriptionCdb) Le membre saisie n''est pas skipper. La requete est annulée !';
  53.         RETURN NULL;
  54.  
  55.     ELSIF NOT bateaudispo(NEW.numbat, (SELECT datedebut FROM activite WHERE numact = NEW.numact), (SELECT datefin FROM activite WHERE numact = NEW.numact)) THEN
  56.         RAISE NOTICE '(t_InscriptionCdb) Le Bateau n°% est complet. La requete est annulée !', NEW.numbat;
  57.         RETURN NULL;
  58.  
  59.     ELSE RETURN NEW;
  60.     END IF;
  61.  
  62.  
  63. END; $$ LANGUAGE 'plpgsql';
  64.  
  65. CREATE TRIGGER t_InscriptionCdb
  66. BEFORE
  67. INSERT
  68. ON chefdebord
  69. FOR EACH ROW
  70. EXECUTE PROCEDURE f_InscriptionCdb();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement