Guest User

exo PL/SQL

a guest
Apr 14th, 2012
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.51 KB | None | 0 0
  1.  
  2. PROMPT Vous allez inscrire un nouvel employé
  3. PROMPT saisissez le nom
  4. ACCEPT nom
  5. SELECT empno, ename, deptno FROM emp WHERE job = 'MANAGER';
  6. PROMPT saisissez le numéro du supérieur hiérarchique
  7. ACCEPT sup
  8. PROMPT saisissez le poste
  9. ACCEPT poste
  10. PROMPT saisissez le département
  11. ACCEPT dep
  12. PROMPT saisissez le salaire
  13. ACCEPT salaire
  14. PROMPT saisissez le commission
  15. ACCEPT com
  16. PROMPT saisissez la _date d''embauche
  17. ACCEPT hdate
  18.  
  19. DECLARE
  20.    
  21.     numero          emp.empno%TYPE;
  22.     nom             emp.ename%TYPE;
  23.     poste           emp.job%TYPE;
  24.     sup             emp.mgr%TYPE;
  25.     hdate           emp.hiredate%TYPE;
  26.     salaire         emp.sal%TYPE;
  27.     com             emp.comm%TYPE;
  28.     dep             emp.deptno%TYPE;
  29.     dept_ok         NUMBER;
  30.     test            NUMBER;
  31.     erreur          NUMBER;
  32.     depass_excep    EXCEPTION;
  33.     nosup           EXCEPTION;
  34.     sales_nocomm    EXCEPTION;
  35.     nosales_comm    EXCEPTION;
  36.     nodept          EXCEPTION;
  37.     PRAGMA EXCEPTION_INIT
  38.         (depass_excep, -1438);
  39.    
  40.        
  41.  
  42. BEGIN
  43.     SELECT (MAX(empno)+1) INTO numero FROM emp;
  44.     SELECT COUNT(*) INTO test FROM emp WHERE empno = '&sup';
  45.     SELECT COUNT(deptno) INTO dept_ok FROM dept WHERE deptno = &dep;
  46.     poste := UPPER ('&poste');
  47.    
  48.    
  49.     BEGIN
  50.         IF test = 0 THEN
  51.             sup := NULL;
  52.             erreur := erreur+1;
  53.             RAISE nosup;
  54.         END IF;
  55.     END;
  56.     BEGIN
  57.         IF '&poste' = 'SALESMAN' AND ('&com' IS NULL) THEN
  58.             erreur := erreur+1;
  59.             RAISE sales_nocomm;
  60.         ELSIF '&poste' != 'SALESMAN' AND ('&com' IS NOT NULL) THEN
  61.             erreur := erreur+1;
  62.             RAISE nosales_comm;
  63.         END IF;
  64.     END;
  65.     BEGIN
  66.         IF dept_ok = 0 THEN
  67.             erreur := erreur+1;
  68.             RAISE nodept;          
  69.         END IF;
  70.     END;
  71.     BEGIN
  72.         IF erreur = 0 THEN
  73.             IF '&poste' = 'SALESMAN' THEN
  74.                 INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
  75.                     VALUES (numero, '&nom', '&poste', '&sup', '&hdate', '&salaire', '&com', '&dep');
  76.             ELSIF '&poste' != 'SALESMAN' THEN
  77.                 INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, deptno)
  78.                     VALUES (numero, '&nom', '&poste', '&sup', '&hdate', '&salaire', '&dep');
  79.             END IF;
  80.         ELSE
  81.             DBMS_OUTPUT.PUT_LINE('Le traitement a rencontré ' || erreur || ' erreurs');
  82.         END IF;
  83.     END;
  84.    
  85. EXCEPTION
  86.     WHEN depass_excep THEN
  87.         DBMS_OUTPUT.PUT_LINE('Dépassement de format.');
  88.     WHEN nosup THEN
  89.         DBMS_OUTPUT.PUT_LINE('Manager inexistant.');
  90.     WHEN sales_nocomm THEN
  91.         DBMS_OUTPUT.PUT_LINE('SALESMAN sans commission.');
  92.     WHEN nosales_comm THEN
  93.         DBMS_OUTPUT.PUT_LINE('commission sur autre que SALESMAN.');
  94.     WHEN nodept THEN
  95.         DBMS_OUTPUT.PUT_LINE('Département inexistant');   
  96. END;
  97. /
  98.  
  99.  
  100.  
  101.     SELECT * FROM emp WHERE empno = (SELECT MAX(empno) FROM emp);
  102.    
  103.     ROLLBACK;
Advertisement
Add Comment
Please, Sign In to add comment