Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.53 KB | None | 0 0
  1. accept n prompt "Veuillez indiquer le nombre d'employé : ";
  2.  
  3. SET verify OFF;
  4. SET serveroutput ON;
  5.  
  6. DECLARE
  7.     e_trop EXCEPTION;
  8.     e_zero EXCEPTION;
  9.     e_negative EXCEPTION;
  10.     e_numeric EXCEPTION;
  11.     v_ename emp.ename%TYPE;
  12.     v_sal emp.sal%TYPE;
  13.     nb_ligne NUMBER(4);
  14.     i NUMBER := 1;
  15.     nb VARCHAR(5) := '&n';
  16.     CURSOR c IS SELECT ename, sal FROM emp ORDER BY sal DESC;
  17. BEGIN
  18.     SELECT COUNT(*) INTO nb_ligne FROM emp;
  19.    
  20.     IF owa_pattern.match(nb, '^-\D') THEN
  21.         RAISE e_numeric;
  22.     ELSE
  23.         nb := TO_NUMBER(nb);
  24.         IF nb < 0 THEN
  25.             RAISE e_negative;
  26.         ELSIF nb > nb_ligne THEN
  27.             RAISE e_trop;
  28.         ELSE
  29.             RAISE e_zero;
  30.         END IF;
  31.        
  32.         OPEN c;
  33.             FOR i IN 1..nb LOOP
  34.                 IF i = 1 THEN
  35.                     DBMS_OUTPUT.put_line('ename      | sal');
  36.                 END IF;
  37.                
  38.                 FETCH c INTO v_ename, v_sal;
  39.                 DBMS_OUTPUT.put_line(v_ename || ' | ' || v_sal);
  40.             END LOOP;
  41.         CLOSE c;
  42.     END IF;
  43.  
  44. EXCEPTION
  45.     WHEN e_numeric THEN
  46.     DBMS_OUTPUT.put_line('La valeur de n doit être un nombre !');
  47.    
  48.     WHEN e_zero THEN
  49.         DBMS_OUTPUT.put_line('La valeur de n ne peut pas etre 0');
  50.        
  51.     WHEN e_negative THEN
  52.         DBMS_OUTPUT.put_line('n ne peut pas etre inferieur a 0, il doit etre dans l''intervalle 1 - ' || nb_ligne);
  53.        
  54.     WHEN e_trop THEN
  55.         DBMS_OUTPUT.put_line('n ne peut pas etre superieur a ' || nb_ligne || ', mais voici quand meme les resultats :');
  56.        
  57.         OPEN c;
  58.  
  59.         DBMS_OUTPUT.put_line('ename      | sal');
  60.         FOR i IN 1..nb_ligne LOOP
  61.             FETCH c INTO v_ename, v_sal;
  62.             DBMS_OUTPUT.put_line(v_ename || ' | ' || v_sal);
  63.         END LOOP;
  64.        
  65.         CLOSE c;
  66. END;
  67. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement