Elyspio

TD4

Feb 16th, 2018
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.62 KB | None | 0 0
  1. -- EXO 1
  2. -- 1.
  3. SET SERVEROUTPUT ON;
  4.  
  5. DECLARE
  6. n NUMBER;
  7.  
  8. BEGIN
  9.   n := &n;
  10.  
  11.   FOR i IN 0..10
  12.   LOOP
  13.  
  14.     DBMS_OUTPUT.PUT_LINE(n || ' x ' || i || ' = ' || n*i);
  15.   END LOOP;
  16.  
  17. END;
  18.  
  19. -- 2.
  20. DECLARE
  21. n NUMBER;
  22. n_facto NUMBER := 1;
  23.  
  24. BEGIN
  25.   LOOP
  26.     n := &n;
  27.     EXIT WHEN n > 0;
  28.  
  29.   END LOOP
  30.  
  31.   FOR i IN 1..n
  32.   LOOP
  33.     n_facto := n_facto * i;
  34.   END LOOP;
  35.  
  36.   DBMS_OUTPUT.PUT_LINE(n || '! = ' || n_facto);
  37.  
  38. END;
  39.  
  40. -- 3.
  41. DECLARE
  42.  
  43.   v_tabExist NUMBER;
  44.   v_sommeDue NUMBER;
  45.   v_duree NUMBER;
  46.   v_remboursementAnnuel NUMBER;
  47.   v_taux NUMBER;
  48.   v_interet NUMBER;
  49.   v_annuite NUMBER;
  50.  
  51. BEGIN
  52.  
  53.  
  54.   SELECT COUNT(*) INTO v_tabExist FROM  user_tables WHERE table_name = 'PRET';
  55.   IF v_tabExist > 0 THEN
  56.     EXECUTE IMMEDIATE 'drop table PRET';
  57.   END IF;
  58.   EXECUTE IMMEDIATE 'create table PRET (duree number, sommeDue number, rembAnnuel number, interet number, annuite number)';
  59.  
  60.   v_sommeDue := &Somme_Emprunte;
  61.   v_duree := &Duree_Emprunt;
  62.   v_taux := &Taux_annuel;
  63.  
  64.   v_remboursementAnnuel := v_sommeDue/v_duree;
  65.   v_interet := v_sommeDue * v_taux;
  66.   v_annuite := v_remboursementAnnuel + v_interet;
  67.  
  68.   FOR i IN 1..(v_sommeDue/v_remboursementAnnuel)
  69.   LOOP
  70.     INSERT INTO PRET VALUES(i, v_sommeDue, v_remboursementAnnuel, v_interet, v_annuite);
  71.     v_sommeDue := v_sommeDue - v_remboursementAnnuel;
  72.     v_interet := v_sommeDue * v_taux;
  73.     v_annuite := v_remboursementAnnuel + v_interet;
  74.   END LOOP;
  75.  
  76. END;
  77.  
  78.  
  79.  
  80.  
  81. -- EXO 2
  82. -- 1.
  83. -- a-c)
  84.  
  85.  
  86. DECLARE
  87.   v_sal emp2.SAL%TYPE;
  88.   v_moySal emp2.SAL%TYPE := 0;
  89.   v_id EMP2.EMPNO%TYPE;
  90.   v_job emp2.JOB%TYPE;
  91.   v_temp NUMBER;
  92. CURSOR c_emp IS SELECT job, empno, sal FROM emp;
  93.  
  94. BEGIN
  95.   v_id := &EMPNO;
  96.   SELECT job INTO v_job FROM emp2 WHERE EMPNO = v_id;
  97.   FOR v_emp IN c_emp
  98.   LOOP
  99.     IF v_emp.job = v_job THEN
  100.       v_moySal := v_moySal + v_emp.sal;
  101.     END IF ;
  102.   END LOOP;
  103.   SELECT COUNT(*)INTO v_temp FROM emp2 WHERE job = v_job;
  104.   v_moySal := v_moySal / v_temp;
  105.  
  106.   IF v_emp.sal < v_moySal THEN
  107.     UPDATE EMP2
  108.     SET SAL = v_moySal
  109.     WHERE EMPNO = v_emp.empno AND EMPNO = v_id;
  110.   ELSE
  111.     UPDATE EMP2
  112.     SET SAL = SAL * 1.1
  113.     WHERE EMPNO = v_emp.empno AND EMPNO = v_id;
  114.   END IF;
  115.  
  116. END;
  117.  
  118. -- 2.
  119. -- Commande SQL
  120. ALTER TABLE dept2 add (BUDGET NUMBER(10,2));
  121. -- Bloc PL SLQ a
  122. DECLARE
  123.   CURSOR c_dept IS SELECT deptno FROM dept2;
  124.   v_temp emp2.sal%TYPE;
  125.  
  126. BEGIN
  127.   FOR v_dept IN c_dept
  128.   LOOP
  129.     SELECT SUM(sal) INTO v_temp FROM emp2 WHERE emp2.deptno = v_dept.deptno;
  130.     UPDATE DEPT2
  131.     SET BUDGET = v_temp WHERE v_dept.deptno = dept2.deptno;
  132.     DBMS_OUTPUT.PUT_LINE(v_temp);
  133.   END LOOP;
  134. END;
  135.  
  136.  
  137. -- Bloc PL SQL b
  138. DECLARE
Advertisement