Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.36 KB | None | 0 0
  1. CREATE OR REPLACE TRIGGER t_b_i_affecter
  2. after INSERT ON affecter
  3. FOR each ROW
  4. DECLARE
  5. type_cours creneau.typec%TYPE;
  6. type_salle salle.tsal%TYPE;
  7. BEGIN
  8.     SELECT c.typec, s.tsal INTO type_cours, type_salle
  9.     FROM salle s, creneau c
  10.     WHERE c.debsemc = :NEW.debsemc
  11.     AND c.jourc = :NEW.jourc
  12.     AND c.heuredc = :NEW.heuredc
  13.     AND c.grpc = :NEW.grpc
  14.     AND s.nsalle = :NEW.salc;
  15.    
  16.     IF type_cours != type_salle THEN
  17.         raise_application_error(-20001, 'La salle ne convient pas pour ce type d''enseignement');
  18.     END IF;
  19. END;
  20.  
  21.  
  22. INSERT INTO affecter VALUES('05/06/17', 'mardi', '08:00', 'InS2F2', 'IN209'); --Déclanchement du TRIGGER
  23. INSERT INTO affecter VALUES('05/06/17', 'mardi', '08:00', 'InS2F2', 'InJade'); --INSERTION correct0
  24. ROLLBACK;
  25. INSERT INTO affecter VALUES('05/06/17', 'mardi', '08:00', 'InSxx', 'IN209'); --Déclanchement du TRIGGER
  26. INSERT INTO affecter VALUES('05/06/17', 'mardi', '08:00', 'InS2F2', 'INxxx'); --Déclanchement du TRIGGER
  27.  
  28. /* 5 - B */
  29. DROP TRIGGER t_b_i_affecter; --Destruction du trigger
  30.  
  31. CREATE OR REPLACE TRIGGER t_b_i_affecter
  32. BEFORE UPDATE ON affecter
  33. FOR each ROW
  34. DECLARE
  35. type_cours creneau.typec%TYPE;
  36. type_salle salle.tsal%TYPE;
  37. BEGIN
  38.     SELECT c.typec, s.tsal INTO type_cours, type_salle
  39.     FROM salle s, creneau c
  40.     WHERE c.debsemc = :NEW.debsemc
  41.     AND c.jourc = :NEW.jourc
  42.     AND c.heuredc = :NEW.heuredc
  43.     AND c.grpc = :NEW.grpc
  44.     AND s.nsalle = :NEW.salc;
  45.    
  46.     IF type_cours != type_salle THEN
  47.         raise_application_error(-20001, 'La salle ne convient pas pour ce type d''enseignement');
  48.     END IF;
  49. END;
  50.  
  51. /* TEST DU trigger */
  52.  
  53. /*Déclanchement du TRIGGER */
  54. UPDATE AFFECTER
  55. SET SALC = 'IN209'
  56. WHERE AFFECTER.DEBSEMC = '05/06/17'
  57. AND AFFECTER.JOURC = 'vendredi'
  58. AND AFFECTER.HEUREDC = '08:00'
  59. AND AFFECTER.GRPC = 'InS2A1'
  60. AND AFFECTER.SALC = 'InRubis';
  61.  
  62. /*Insertion CORRECT */
  63. UPDATE AFFECTER
  64. SET SALC = 'InJade'
  65. WHERE AFFECTER.DEBSEMC = '05/06/17'
  66. AND AFFECTER.JOURC = 'vendredi'
  67. AND AFFECTER.HEUREDC = '08:00'
  68. AND AFFECTER.GRPC = 'InS2A1'
  69. AND AFFECTER.SALC = 'InRubis';
  70.  
  71. ROLLBACK;
  72.  
  73. /* 5 - C */
  74. DROP TRIGGER t_b_i_affecter; --Destruction du trigger
  75.  
  76. CREATE OR REPLACE TRIGGER t_b_iu_affecter_cap
  77. after INSERT OR UPDATE ON affecter
  78. FOR each ROW
  79. DECLARE
  80.     effectif groupe.eff%TYPE;
  81.     capacite salle.capacite%TYPE;
  82. BEGIN
  83.     SELECT effectif, capacite INTO effectif, capacite
  84.     FROM groupe g, salle s
  85.     WHERE g.grpc = :NEW.grpc
  86.     AND s.nsalle = :NEW.salc;
  87.     IF effectif > capacite THEN
  88.       raise_application_error(-20002, 'La salle ne convient pas autant d''élèves');
  89.     END IF;
  90. END;
  91.  
  92. INSERT INTO creneau VALUES('17/07/17', 'mercredi', '17:00', 'CM', '18:30', 'InS2', 'InM2203');
  93.  
  94. INSERT INTO affecter(debsemc, jourc, heuredc, grpc, salc) VALUES('17/07/17', 'mercredi', '17:00', 'InS2', 'IR028');
  95.  
  96. ROLLBACK;
  97.  
  98. INSERT INTO creneau VALUES('17/07/17', 'mercredi', '17:00', 'CM', '18:30', 'InS2', 'InM2203');
  99.  
  100. INSERT INTO affecter (debsemc, jourc, heuredc, grpc, salc) VALUES('17/07/17', 'mercredi', '17:00', 'InS2', 'In203');
  101.  
  102. ROLLBACK;
  103.  
  104. INSERT INTO creneau VALUES('17/07/17', 'mercredi', '17:00', 'CM', '18:30', 'InS2', 'InM2203');
  105.  
  106. INSERT INTO affecter(debsemc, jourc, heuredc, grpc, salc) VALUES ('17/07/17', 'mercredi', '17:00', 'InS2', 'IR028');
  107.  
  108. UPDATE affecter SET salc = 'InJade'
  109. WHERE affecter.debsemc = '24/04/17'
  110. AND affecter.jourc = 'lundi'
  111. AND affecter.heuredc = '15:30'
  112. AND affecter.grpc = 'InS2'
  113. AND affecter.salc = 'IR028';
  114.  
  115. ROLLBACK;
  116.  
  117.  
  118. -- 5.d
  119.  
  120. CREATE OR REPLACE TRIGGER t_b_i_creneau
  121. BEFORE INSERT ON creneau
  122. FOR each ROW
  123. DECLARE
  124.     counts INT;
  125. BEGIN
  126.     SELECT COUNT(*) INTO counts
  127.     FROM creneau
  128.     WHERE debsemc = :NEW.debsemc
  129.     AND jourc = :NEW.jourc
  130.     AND grpc = :NEW.grpc
  131.     AND (
  132.         to_date(:NEW.heuredc, 'HH24:MI') BETWEEN to_date(heuredc, 'HH24:MI') AND to_date(heurefc, 'HH24:MI')
  133.         OR to_date(:NEW.heurefc, 'HH24:MI') BETWEEN to_date(heuredc, 'HH24:MI') AND to_date(heurefc, 'HH24:MI')
  134.         OR (to_date(:NEW.heuredc,  'HH24:MI') < to_date(heuredc, 'HH24:MI') AND to_date(:NEW.heurefc, 'HH24:MI') > to_date(heurefc, 'HH24:MI'))
  135.     );
  136.    
  137.     IF counts <> 0 THEN
  138.         raise_application_error(-20003, 'Un groupe ne peut pas avoir deux enseignements en même temps');
  139.     END IF;
  140. END;
  141.  
  142. INSERT INTO creneau VALUES('05/06/17', 'mardi', '08:05', 'TP', '09:30', 'InS2F2', 'InM2104');
  143.  
  144. INSERT INTO creneau VALUES('05/06/17', 'mardi', '07:45', 'TP', '13:00', 'InS2F2', 'InM2104');
  145.  
  146. ROLLBACK;
  147.  
  148. -- 6.
  149.  
  150. SELECT * FROM enseigner;
  151.  
  152. SELECT * FROM creneau;
  153.  
  154. SELECT * FROM enseignant;
  155.  
  156. SELECT * FROM nbhdispenseparenseignant;
  157.  
  158. SET serveroutput ON;
  159.  
  160. CREATE OR REPLACE TRIGGER t_b_i_enseigner
  161. BEFORE INSERT OR UPDATE OR DELETE ON Enseigner
  162. FOR each ROW
  163. DECLARE
  164. typeCours creneau.typec%TYPE;
  165. heureFin creneau.heurefc%TYPE;
  166. toAdd FLOAT;
  167. BEGIN
  168.     SELECT typec, heurefc INTO typeCours, heureFin
  169.     FROM creneau
  170.     WHERE debsemc = :NEW.debsemc
  171.     AND jourc = :NEW.jourc
  172.     AND heuredc = :NEW.heuredc
  173.     AND grpc = :NEW.grpc;
  174.    
  175.     IF typeCours IN ('CM', 'TD', 'TP') THEN    
  176.         toAdd := (to_date(heureFin, 'HH24:MI') - to_date(:NEW.heuredc, 'HH24:MI')) * 24;
  177.         IF typeCours = 'CM' THEN
  178.             toAdd := toAdd * 1.5;
  179.         END IF;  
  180.        
  181.         IF DELETING THEN
  182.             toAdd := -toAdd;
  183.         END IF;
  184.            
  185.         UPDATE Enseignant
  186.         SET nbhdisp = nbhdisp + toAdd
  187.         WHERE idenseign = :NEW.ensc;
  188.     END IF;
  189. END;
  190.  
  191. SELECT * FROM enseignant WHERE idenseign = 'DBJ';
  192.  
  193. INSERT INTO enseigner VALUES('06/02/17', 'mardi', '15:30', 'InS4C', 'DBJ');
  194.  
  195. SELECT * FROM enseignant WHERE idenseign = 'DBJ';
  196.  
  197. ROLLBACK;
  198.  
  199. SELECT * FROM enseigner
  200. WHERE debsemc = '06/02/17'
  201. AND jourc = 'mardi'
  202. AND heuredc = '15:30'
  203. AND grpc = 'InS4C';
  204.  
  205. DELETE FROM enseigner
  206. WHERE debsemc = '06/02/17'
  207. AND jourc = 'mardi'
  208. AND heuredc = '15:30'
  209. AND grpc = 'InS4C'
  210. AND ensc = 'DBJ';
  211.  
  212. SELECT * FROM enseignant WHERE idenseign = 'DBJ';
  213.  
  214. DELETE FROM enseigner
  215. WHERE debsemc = '30/01/17'
  216. AND jourc = 'vendredi'
  217. AND heuredc = '09:30'
  218. AND grpc = 'InS2F'
  219. AND ensc = 'DBJ';
  220.  
  221. SELECT * FROM enseignant WHERE idenseign IN ('DBJ', 'EEI');
  222.  
  223. UPDATE enseigner
  224. SET ENSC = 'EEI'
  225. WHERE DEBSEMC = '14/11/16'
  226. AND JOURC = 'vendredi'
  227. AND HEUREDC = '08:00'
  228. AND GRPC = 'InS3A2'
  229. AND ENSC = 'DBJ';
  230.  
  231. SELECT * FROM enseignant WHERE idenseign IN ('DBJ', 'EEI');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement