Advertisement
Guest User

SQL

a guest
Dec 11th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.51 KB | None | 0 0
  1. CREATE TABLE MAT(
  2. MATC VARCHAR2(10) PRIMARY KEY,
  3. INTC VARCHAR2(70)
  4. );
  5.  
  6. insert into MAT(MATC, INTC)
  7. select distinct MATC, INTC from thierry_millan.CELCAT2017
  8. where MATC is not null;
  9.  
  10. CREATE TABLE GROUPE( GRPC VARCHAR2(20),ANNEEC CHAR(3));
  11.  
  12. CREATE TABLE CRENEAU( DEBSEMC DATE, JOURC VARCHAR2(8), HEUREDC CHAR(5), TYPEC VARCHAR2(20), HEUREFC CHAR(5), GRPC VARCHAR2(20), MATC VARCHAR2(10));
  13.  
  14. CREATE TABLE ENSEIGNER( DEBSEMC DATE, JOURC VARCHAR2(8), HEUREDC CHAR(5),GRPC varchar2(20), ENSC char(3));
  15.  
  16. CREATE TABLE AFFECTER ( DEBSEMC DATE, JOURC VARCHAR2(8), HEUREDC CHAR(5),GRPC varchar2(20), SALC varchar2(15));
  17.  
  18. alter table GROUPE add constraint PK_GROUPE primary key (GRPC);
  19. alter table CRENEAU add constraint PK_CRENEAU primary key (DEBSEMC,JOURC,HEUREDC,GRPC);
  20. alter table ENSEIGNER add constraint PK_ENSEIGNER primary key (DEBSEMC,JOURC,HEUREDC,GRPC,ENSC);
  21. alter table AFFECTER add constraint PK_AFFECTER primary key (DEBSEMC,JOURC,HEUREDC,GRPC,SALC);
  22.  
  23. ALTER TABLE CRENEAU ADD CONSTRAINT FK_CRENEAU_MATC FOREIGN KEY (MATC) REFERENCES MAT(MATC);
  24. ALTER TABLE CRENEAU ADD CONSTRAINT FK_CRENEAU_GRPC FOREIGN KEY (GRPC) REFERENCES GROUPE(GRPC);
  25. ALTER TABLE AFFECTER ADD CONSTRAINT FK_AFFECTER_GRPC FOREIGN KEY (GRPC) REFERENCES GROUPE(GRPC);
  26. ALTER TABLE ENSEIGNER ADD CONSTRAINT FK_ENSEIGNER_GRPC FOREIGN KEY (GRPC) REFERENCES GROUPE(GRPC);
  27.  
  28. ALTER TABLE AFFECTER ADD CONSTRAINT FK_AFFECTER_DEBSEMC_GRPC FOREIGN KEY (DEBSEMC, JOURC, HEUREDC, GRPC) REFERENCES CRENEAU ( DEBSEMC, JOURC, HEUREDC, GRPC) ;
  29. ALTER TABLE ENSEIGNER ADD CONSTRAINT FK_ENSEIGNER_DEBSEMC_GRPC FOREIGN KEY (DEBSEMC, JOURC, HEUREDC, GRPC) REFERENCES CRENEAU ( DEBSEMC, JOURC, HEUREDC, GRPC) ;
  30.  
  31. insert into GROUPE(GRPC,ANNEEC) select distinct GRPC,ANNEEC from thierry_millan.CELCAT2017 where GRPC is not null;
  32. insert into CRENEAU (DEBSEMC,JOURC,HEUREDC,TYPEC,HEUREFC,GRPC,MATC) select distinct DEBSEMC,JOURC,HEUREDC,TYPEC,HEUREFC,GRPC,MATC from thierry_millan.CELCAT2017 ;
  33. insert into ENSEIGNER (DEBSEMC,JOURC,HEUREDC,GRPC,ENSC) select distinct DEBSEMC,JOURC,HEUREDC,GRPC,ENSC from thierry_millan.CELCAT2017 where ENSC is not null;
  34. insert into AFFECTER(DEBSEMC,JOURC,HEUREDC,GRPC,SALC) select distinct DEBSEMC,JOURC,HEUREDC,GRPC,SALC from thierry_millan.CELCAT2017 where SALC is not null;
  35.  
  36. SELECT CRENEAU.DEBSEMC, CRENEAU.JOURC, CRENEAU.HEUREDC, TYPEC, HEUREFC, CRENEAU.GRPC, CRENEAU.MATC, SALC, ENSC, ANNEEC, INTC
  37. FROM CRENEAU, MAT, GROUPE, ENSEIGNER, AFFECTER
  38. WHERE CRENEAU.GRPC = GROUPE.GRPC
  39. AND MAT.MATC(+) = CRENEAU.MATC
  40. AND AFFECTER.DEBSEMC(+) = CRENEAU.DEBSEMC
  41. AND AFFECTER.JOURC(+) = CRENEAU.JOURC
  42. AND AFFECTER.HEUREDC(+) = CRENEAU.HEUREDC
  43. AND AFFECTER.GRPC(+) = CRENEAU.GRPC
  44. AND ENSEIGNER.DEBSEMC(+) = CRENEAU.DEBSEMC
  45. AND ENSEIGNER.JOURC(+) = CRENEAU.JOURC
  46. AND ENSEIGNER.HEUREDC(+) = CRENEAU.HEUREDC
  47. AND ENSEIGNER.GRPC(+) = CRENEAU.GRPC
  48. MINUS
  49. SELECT DEBSEMC, JOURC, HEUREDC, TYPEC, HEUREFC, GRPC, MATC, SALC, ENSC, ANNEEC, INTC
  50. FROM thierry_millan.CELCAT2017 ;
  51.  
  52.  
  53. SELECT DEBSEMC, JOURC, HEUREDC, TYPEC, HEUREFC, GRPC, MATC, SALC, ENSC, ANNEEC, INTC
  54. FROM thierry_millan.CELCAT2017
  55. MINUS
  56. SELECT CRENEAU.DEBSEMC, CRENEAU.JOURC, CRENEAU.HEUREDC, TYPEC, HEUREFC, CRENEAU.GRPC, CRENEAU.MATC, SALC, ENSC, ANNEEC, INTC
  57. FROM CRENEAU, MAT, GROUPE, ENSEIGNER, AFFECTER
  58. WHERE CRENEAU.GRPC = GROUPE.GRPC
  59. AND MAT.MATC(+) = CRENEAU.MATC
  60. AND AFFECTER.DEBSEMC(+) = CRENEAU.DEBSEMC
  61. AND AFFECTER.JOURC(+) = CRENEAU.JOURC
  62. AND AFFECTER.HEUREDC(+) = CRENEAU.HEUREDC
  63. AND AFFECTER.GRPC(+) = CRENEAU.GRPC
  64. AND ENSEIGNER.DEBSEMC(+) = CRENEAU.DEBSEMC
  65. AND ENSEIGNER.JOURC(+) = CRENEAU.JOURC
  66. AND ENSEIGNER.HEUREDC(+) = CRENEAU.HEUREDC
  67. AND ENSEIGNER.GRPC(+) = CRENEAU.GRPC;
  68.  
  69. create table FORMATION as select * from thierry_millan.FORMATION2018;
  70. create table SALLE as select * from thierry_millan.SALLE2018;
  71. create table ENSEIGNANT as select * from thierry_millan.ENSEIGNANT2018;
  72. create table STATUT as select * from thierry_millan.STATUT2018;
  73.  
  74. ALTER TABLE FORMATION add constraint PK_FORMATION primary key (IdFor);
  75. ALTER TABLE SALLE add constraint PK_SALLE primary key (NSalle);
  76. ALTER TABLE ENSEIGNANT add constraint PK_ENSEIGNANT primary key (IdENseign);
  77. ALTER TABLE STATUT add constraint PK_STATUT primary key (Grade);
  78.  
  79. ALTER TABLE GROUPE ADD CONSTRAINT FK_GROUPE_ANNEEC FOREIGN KEY (ANNEEC) REFERENCES FORMATION(IdFor);
  80. ALTER TABLE ENSEIGNANT ADD CONSTRAINT FK_ENSEIGNANT_GRADE FOREIGN KEY (Grade) REFERENCES STATUT(Grade);
  81. ALTER TABLE ENSEIGNER ADD CONSTRAINT FK_ENSEIGNER_ENSC FOREIGN KEY (ENSC) REFERENCES ENSEIGNANT(IdEnseign);
  82. ALTER TABLE AFFECTER ADD CONSTRAINT FK_AFFECTER_SALC FOREIGN KEY (SALC) REFERENCES SALLE(NSalle);
  83.  
  84. ALTER TABLE GROUPE ADD Eff NUMBER(3) DEFAULT 0;
  85. UPDATE GROUPE SET Eff = (SELECT Eff FROM Thierry_millan.EFFORMATION2018 WHERE IDGRP = GROUPE.GRPC) ;
  86.  
  87. SELECT GROUPE.GRPC, GROUPE.EFF
  88. FROM GROUPE, CRENEAU
  89. WHERE GROUPE.GRPC = CRENEAU.GRPC
  90. AND CRENEAU.JOURC = 'mercredi'
  91. AND CRENEAU.DEBSEMC = '19/09/16'
  92. AND CRENEAU.HEUREDC = '11:00'
  93. AND CRENEAU.MATC = 'InM1101' ;
  94.  
  95. SELECT CRENEAU.MATC, SUM(CASE TYPEC WHEN 'CM' THEN ((to_date(HEUREFC,'HH24:MI')-to_date(HEUREDC,'HH24:MI'))*24*1.5) ELSE ((to_date(HEUREFC,'HH24:MI')-to_date(HEUREDC,'HH24:MI'))*24)END)
  96. FROM CRENEAU
  97. WHERE CRENEAU.TYPEC in('CM','TD','TP')
  98. GROUP BY CRENEAU.MATC ;
  99.  
  100. SELECT * FROM SALLE ;
  101. SELECT * FROM AFFECTER ;
  102.  
  103. -- 5.a
  104.  
  105. CREATE OR REPLACE TRIGGER types_cours_salles
  106. BEFORE INSERT
  107. ON AFFECTER FOR EACH ROW
  108. DECLARE
  109. type_salle varchar2(10 BYTE);
  110. type_cours varchar2(10 BYTE);
  111. type_salle_diff_type_cours EXCEPTION ;
  112. PRAGMA EXCEPTION_INIT (type_salle_diff_type_cours, -00001);
  113. BEGIN
  114. SELECT SALLE.TSAL INTO type_salle FROM SALLE WHERE SALLE.nsalle = :NEW.SALC ;
  115. SELECT CRENEAU.TYPEC INTO type_cours FROM CRENEAU
  116. WHERE CRENEAU.DEBSEMC = :NEW.DEBSEMC
  117. AND CRENEAU.JOURC = :NEW.JOURC
  118. AND CRENEAU.HEUREDC = :NEW.HEUREDC
  119. AND CRENEAU.GRPC = :NEW.GRPC ;
  120. IF type_cours = 'TP' THEN
  121. IF type_salle <> 'TP' THEN
  122. RAISE type_salle_diff_type_cours ;
  123. END IF;
  124. END IF;
  125. EXCEPTION
  126. WHEN type_salle_diff_type_cours THEN
  127. RAISE_APPLICATION_ERROR(num => -20001, msg => 'La salle ne convient pas pour ce type d enseignement');
  128. WHEN OTHERS THEN NULL ;
  129. END types_cours_salles ;
  130.  
  131. INSERT INTO AFFECTER VALUES ('05/06/2017','mardi','08:00','InS2F2','IN209');
  132.  
  133. DELETE FROM AFFECTER
  134. WHERE DEBSEMC = '05/06/2017'
  135. AND JOURC = 'mardi'
  136. AND HEUREDC = '08:00'
  137. AND GRPC = 'InS2F2'
  138. AND SALC = 'IN209' ;
  139.  
  140. INSERT INTO AFFECTER VALUES ('05/06/17','mardi','08:00','InS2F2','InJade');
  141.  
  142. DELETE FROM AFFECTER
  143. WHERE DEBSEMC = '05/06/17'
  144. AND JOURC = 'mardi'
  145. AND HEUREDC = '08:00'
  146. AND GRPC = 'InS2F2'
  147. AND SALC = 'InJade' ;
  148.  
  149. INSERT INTO AFFECTER VALUES ('05/06/17','mardi','08:00','InSxx','IN209');
  150.  
  151. -- 5.b
  152.  
  153. CREATE OR REPLACE TRIGGER types_cours_salles
  154. BEFORE INSERT OR UPDATE -- + MàJ
  155. ON AFFECTER FOR EACH ROW
  156. DECLARE
  157. type_salle varchar2(10 BYTE);
  158. type_cours varchar2(10 BYTE);
  159. type_salle_diff_type_cours EXCEPTION ;
  160. PRAGMA EXCEPTION_INIT (type_salle_diff_type_cours, -00001);
  161. BEGIN
  162. SELECT SALLE.TSAL INTO type_salle FROM SALLE WHERE SALLE.nsalle = :NEW.SALC ;
  163. SELECT CRENEAU.TYPEC INTO type_cours FROM CRENEAU
  164. WHERE CRENEAU.DEBSEMC = :NEW.DEBSEMC
  165. AND CRENEAU.JOURC = :NEW.JOURC
  166. AND CRENEAU.HEUREDC = :NEW.HEUREDC
  167. AND CRENEAU.GRPC = :NEW.GRPC ;
  168. IF type_cours = 'TP' THEN
  169. IF type_salle <> 'TP' THEN
  170. RAISE type_salle_diff_type_cours ;
  171. END IF;
  172. END IF;
  173. EXCEPTION
  174. WHEN type_salle_diff_type_cours THEN
  175. RAISE_APPLICATION_ERROR(num => -20001, msg => 'La salle ne convient pas pour ce type d enseignement');
  176. WHEN OTHERS THEN NULL ;
  177. END types_cours_salles ;
  178.  
  179. UPDATE AFFECTER
  180. SET SALC = 'IN2019'
  181. WHERE AFFECTER.DEBSEMC = '05/06/17'
  182. AND AFFECTER.JOURC = 'vendredi'
  183. AND AFFECTER.HEUREDC = '08:00'
  184. AND AFFECTER.GRPC = 'InS2A1'
  185. AND AFFECTER.SALC = 'InRubis';
  186.  
  187. commit ;
  188.  
  189. UPDATE AFFECTER
  190. SET SALC = 'InJade'
  191. WHERE AFFECTER.DEBSEMC = '05/06/17'
  192. AND AFFECTER.JOURC = 'vendredi'
  193. AND AFFECTER.HEUREDC = '08:00'
  194. AND AFFECTER.GRPC = 'InS2A1'
  195. AND AFFECTER.SALC = 'InRubis';
  196.  
  197. rollback ;
  198.  
  199. CREATE TRIGGER verif_effectif_capacite
  200. BEFORE INSERT OR UPDATE
  201. ON AFFECTER FOR EACH ROW
  202. DECLARE
  203. effectif_groupe NUMBER ;
  204. capacite_salle NUMBER ;
  205. effectif_sup_capacite EXCEPTION;
  206. PRAGMA EXCEPTION_INIT (effectif_sup_capacite,-00002);
  207. BEGIN
  208. SELECT GROUPE.EFF INTO effectif_groupe FROM GROUPE WHERE GROUPE.GRPC = :NEW.GRPC ;
  209. SELECT SALLE.CAPACITE INTO capacite_salle FROM SALLE WHERE SALLE.NSALL = :NEW.SALC ;
  210. END verif_effectif_capacite ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement