Elyspio

TD5

Feb 28th, 2018
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.20 KB | None | 0 0
  1. -- CrΓ©ation des tables (Q2)
  2. CREATE TABLE AVION
  3. (
  4.   avNum NUMBER primary key,
  5.   avNom VARCHAR2(50),
  6.   capacite NUMBER,
  7.   localisation VARCHAR2(50)
  8. );
  9.  
  10. CREATE TABLE Pilote
  11. (
  12.   plNum NUMBER primary key,
  13.   plNom VARCHAR2(40),
  14.   plPrenom VARCHAR2(40),
  15.   ville VARCHAR2(40),
  16.   salaire NUMBER
  17. );
  18.  
  19. CREATE TABLE vol
  20. (
  21.   volNum NUMBER primary key
  22.   avNum NUMBER foreign key reference avion.avNum,
  23.   plNum NUMBER foreign key reference pilote.plNum,
  24.   villeDept VARCHAR2(40),
  25.   villeArr VARCHAR2(40),
  26.   heureDept DATE,
  27.   heureArr DATE
  28.  
  29.   Constraint fk_av foreign key (avNum) references avion(avNum);
  30.   Constraint fk_pl foreign key (plNum) reference
  31. );
  32.  
  33. -- Q1.
  34. DECLARE
  35.   v_nb_total NUMBER := 0;
  36.   v_nb_jongleur NUMBER := 0;
  37.   v_percent_jongleur NUMBER(4,2) := 0;
  38. CURSOR c_personnel IS SELECT * FROM personnel;
  39.  
  40. BEGIN
  41.   FOR v_personnel IN c_personnel
  42.   LOOP
  43.     IF v_personnel.role = 'Jongleur' THEN
  44.       v_nb_jongleur := v_nb_jongleur + 1;
  45.     END IF;
  46.     v_nb_total := v_nb_total + 1;
  47.   END LOOP;
  48.   v_percent_jongleur := v_nb_jongleur/v_nb_total*100;
  49.   DBMS_OUTPUT.PUT_LINE('Pourcentage de Jongleur :  ' || v_percent_jongleur || '%');
  50.  
  51. END;
  52.  
  53. -- Q2
  54. DECLARE
  55.   CURSOR c_record IS SELECT vol.volNum, vol.avNum, heureArr, heureDept, avnom FROM vol, avion WHERE vol.avnum = avion.avnum AND avion.avnom IN ('A300', 'A310') ;
  56.  
  57. BEGIN
  58.   FOR v_record IN c_record
  59.   LOOP
  60.     IF v_record.avnom = 'A300' THEN
  61.       UPDATE vol
  62.       SET HEUREARR = HEUREARR * 0.9 WHERE volnum = v_record.volnum;
  63.     ELSE
  64.       UPDATE vol
  65.       SET HEUREARR = HEUREARR * 0.85 WHERE volnum = v_record.volnum;
  66.     END IF;
  67.   END LOOP;
  68.  
  69. END;
  70.  
  71.  
  72.  
  73. -- Q3.1
  74.  
  75. DECLARE
  76.   v_nom VARCHAR2(40);
  77. BEGIN
  78.   SELECT ename INTO v_nom FROM emp WHERE  empno = 7844;
  79.   DBMS_OUTPUT.PUT_LINE('L e salariΓ© qui a pour matricule 7844 s appelle ' || v_nom);
  80. END;
  81.  
  82. -- Q3.2
  83.  
  84. DECLARE
  85.   CURSOR c_dept IS SELECT * FROM dept WHERE DNAME = 'RESEARCH';
  86. BEGIN
  87.   FOR v_dept IN c_dept
  88.   LOOP
  89.       DBMS_OUTPUT.PUT_LINE('Departement numero : ' || v_dept.deptno);
  90.       DBMS_OUTPUT.PUT_LINE('Departement qui a pour nom : ' || v_dept.dname);
  91.       DBMS_OUTPUT.PUT_LINE('Departement qui se situe : ' || v_dept.loc);
  92.   END LOOP;
  93.  
  94. END;
  95.  
  96.  
  97. -- Q3.3
  98. DECLARE
  99.   v_nb_emp NUMBER;
  100. CURSOR c_dept IS SELECT * FROM dept ;
  101. BEGIN
  102.   FOR v_dept IN c_dept
  103.   LOOP
  104.       SELECT COUNT(*) INTO v_nb_emp FROM emp WHERE emp.deptno = v_dept.deptno;
  105.       DBMS_OUTPUT.PUT_LINE('Departement numero : ' || v_dept.deptno);
  106.       DBMS_OUTPUT.PUT_LINE('Departement qui a pour nom : ' || v_dept.dname);
  107.       DBMS_OUTPUT.PUT_LINE('Departement qui se situe : ' || v_dept.loc);
  108.       DBMS_OUTPUT.PUT_LINE('Departement a : ' || v_nb_emp || ' employΓ©(s)');
  109.  
  110.   END LOOP;
  111.  
  112. END;
  113.  
  114. -- Q3.4
  115. DECLARE
  116.   CURSOR c_dept IS SELECT * FROM dept;
  117. BEGIN
  118.   FOR v_dept IN c_dept
  119.   LOOP
  120.         DBMS_OUTPUT.PUT_LINE('Departement numero : ' || v_dept.deptno);
  121.         DBMS_OUTPUT.PUT_LINE('Departement qui a pour nom : ' || v_dept.dname);
  122.       DBMS_OUTPUT.PUT_LINE('Departement qui se situe : ' || v_dept.loc);
  123.   END LOOP;
  124.  
  125. END;
  126. -- Q3.5
  127. DECLARE
  128.   CURSOR c_emp IS SELECT ename, sal, job FROM emp, salgrade WHERE grade = 4 AND sal BETWEEN losal AND hisal;
  129. BEGIN
  130.   FOR v_emp IN c_emp
  131.   LOOP
  132.     DBMS_OUTPUT.PUT_LINE('Nom : ' || v_emp.ename);
  133.     DBMS_OUTPUT.PUT_LINE('Salaire : ' || v_emp.sal);
  134.     DBMS_OUTPUT.PUT_LINE('Job : ' || v_emp.job);
  135.  
  136.   END LOOP;
  137. END;
  138.  
  139. -- Q3.6
  140. DECLARE
  141.   CURSOR c_emp IS SELECT emp.ename, emp.sal, emp.mgr, job FROM emp , salgrade WHERE grade = 4 AND sal BETWEEN losal AND hisal;
  142.   v_nom_manager EMP.ENAME%TYPE;
  143.  
  144. BEGIN
  145.   FOR v_emp IN c_emp
  146.   LOOP
  147.     SELECT ename INTO v_nom_manager FROM emp WHERE empno = v_emp.mgr;
  148.     DBMS_OUTPUT.PUT_LINE('Nom : ' || v_emp.ename);
  149.     DBMS_OUTPUT.PUT_LINE('Salaire : ' || v_emp.sal);
  150.     DBMS_OUTPUT.PUT_LINE('Job : ' || v_emp.job);
  151.     DBMS_OUTPUT.PUT_LINE('Manageur : ' ||v_nom_manager);
  152.     DBMS_OUTPUT.PUT_LINE(' ');
  153.  
  154.   END LOOP;
  155. END;
  156.  
  157. -- Values
  158.  
  159. INSERT INTO pilote VALUES (1, 'GUICHARD', 'Jonathan', 'LYON', 5000);
  160. INSERT INTO pilote VALUES (2, 'REYNAUD', 'Baptiste', 'PARIS', 4000);
  161. INSERT INTO pilote VALUES (3, 'CINQUINO', 'Colin', 'LYON', 3000);
  162. INSERT INTO pilote VALUES (4, 'PLANCHON', 'Johan', 'LYON', 7000);
  163.  
  164. INSERT INTO Avion  VALUES ( 1 , 'A300' , 3.14159 , 'ChezJP');
  165. INSERT INTO Avion  VALUES ( 2 , 'A310' , 42 , 'ChezMireille');
  166. INSERT INTO Avion  VALUES ( 3 , 'B16' , 9 , 'Devine');
  167. INSERT INTO Avion VALUES ( 4 , 'A300' , 3.14159 , 'Lyon');
  168. INSERT INTO Avion VALUES ( 5 , 'B16' , 9 , 'Devine');
  169. INSERT INTO Avion VALUES ( 6 , 'B16' , 9 , 'Devine');
  170. INSERT INTO Avion VALUES ( 7 , 'B16' , 9 , 'Devine');
  171. INSERT INTO Avion VALUES ( 8 , 'A310' , 42 , 'Paris');
  172.  
  173. INSERT INTO vol VALUES (1, 1, 1, 'Lyon', 'Paris', 12.00, 13.50);
  174. INSERT INTO vol VALUES (2, 2, 2, 'Marseille', 'Reims', 10.00, 13.00);
  175. INSERT INTO vol VALUES (3, 3, 3, 'Bordeaux', 'Paris', 8.00, 10.50);
  176. INSERT INTO vol VALUES (4, 4, 4, 'Bordeaux', 'Paris', 8.00, 10.50);
  177. INSERT INTO vol VALUES (5, 5, 1, 'Pompei', 'Paris', 8.00, 14.50);
  178. INSERT INTO vol VALUES (6, 6, 2, 'IUT', 'Maison', 8, 8.2);
  179. INSERT INTO vol VALUES (7, 7, 3, 'Recharinge', 'Perpignant', 7.00, 10.50);
  180. INSERT INTO vol VALUES (8, 8, 4, 'Bordeaux', 'Toulouse', 7.00, .50);
Advertisement