Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 5.73 KB | None | 0 0
  1. /* SQL - 4th GL
  2. SQL -> Limbaj pentru interogari structurate,
  3. !!! Nu limbaj structurat (gen. a 3a) --> PLSQL, C, JAVA, PHP
  4. 2nd Gen - Assembler
  5. 1 GL - Cod Masina
  6. */
  7.  
  8. /*Sa se afiseze departamentul cu cel mai mare salariu mediu*/
  9. SELECT denumire_departament, AVG(salariul) SAL_MEDIU
  10. FROM departamente d JOIN angajati a
  11.     ON a.id_departament=d.id_departament
  12. GROUP BY denumire_departament
  13. HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  14. ORDER BY SAL_MEDIU DESC;
  15.  
  16.  
  17. --sau
  18. SELECT * FROM
  19. (SELECT denumire_departament, AVG(salariul) SAL_MEDIU
  20. FROM departamente d JOIN angajati a
  21.     ON a.id_departament=d.id_departament
  22. GROUP BY denumire_departament
  23. HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  24. ORDER BY SAL_MEDIU DESC)
  25. WHERE ROWNUM<=1;
  26.  
  27. --
  28. SELECT * FROM
  29. (SELECT denumire_departament, AVG(salariul) SAL_MEDIU
  30. FROM departamente d JOIN angajati a
  31.     ON a.id_departament=d.id_departament
  32. GROUP BY denumire_departament
  33. HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  34. ORDER BY SAL_MEDIU DESC)
  35. WHERE ROWNUM<=3
  36. MINUS
  37. SELECT * FROM
  38. (SELECT denumire_departament, AVG(salariul) SAL_MEDIU
  39. FROM departamente d JOIN angajati a
  40.     ON a.id_departament=d.id_departament
  41. GROUP BY denumire_departament
  42. HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  43. ORDER BY SAL_MEDIU DESC)
  44. WHERE ROWNUM<=2;
  45.  
  46. /*BLOC PL:
  47. DECLARE - optional
  48.  
  49. BEGIN
  50.  
  51. EXCEPTION - optional
  52.  
  53. END
  54. */
  55.  
  56. /*Sa se afiseze departamentul cu cel mai mare salariu mediu*/
  57. SET SERVEROUTPUT ON
  58. DECLARE
  59.     V_DEN VARCHAR2(50);
  60.     V_SAL NUMBER;
  61.  
  62. BEGIN
  63.     SELECT denumire_departament, AVG(salariul)  INTO V_DEN,V_SAL
  64.     FROM angajati a JOIN departamente d
  65.     ON a.id_departament=d.id_departament
  66.     GROUP BY denumire_departament
  67.     HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  68.     ORDER BY 2 DESC;
  69.     DBMS_OUTPUT.PUT_LINE('DEPARTAMENTUL '||V_DEN||' ARE SALARIUL MEDIU DE '||ROUND(V_SAL,2));
  70. END;
  71. /
  72.  
  73. /*
  74. EXCEPTII
  75.  
  76. SQLERRM-codul si descrierea exceptiei
  77. SQLCODE-codul exceptiei aparute
  78. */
  79. DECLARE
  80.     V_DEN VARCHAR2(2);
  81.     V_SAL NUMBER;
  82.  
  83. BEGIN
  84.     SELECT denumire_departament, AVG(salariul)  INTO V_DEN,V_SAL
  85.     FROM angajati a JOIN departamente d
  86.     ON a.id_departament=d.id_departament
  87.     GROUP BY denumire_departament
  88.  --   HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  89.     ORDER BY 2 DESC;
  90.     DBMS_OUTPUT.PUT_LINE('DEPARTAMENTUL '||V_DEN||' ARE SALARIUL MEDIU DE '||ROUND(V_SAL,2));
  91. EXCEPTION
  92.     WHEN OTHERS THEN
  93.     DBMS_OUTPUT.PUT_LINE('A APARUT O EXCEPTIE' ||SQLERRM);
  94. END;
  95. /
  96.  
  97. --Prima exceptie termina codul -> VALUE_ERROR - denumire pentru exceptia respectiva
  98.  
  99. DECLARE
  100.     V_DEN VARCHAR2(2);
  101.     V_SAL NUMBER;
  102.  
  103. BEGIN
  104.     V_DEN := 'ABC';
  105.     SELECT denumire_departament, AVG(salariul)  INTO V_DEN,V_SAL
  106.     FROM angajati a JOIN departamente d
  107.     ON a.id_departament=d.id_departament
  108.     GROUP BY denumire_departament
  109.  --   HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  110.     ORDER BY 2 DESC;
  111.     DBMS_OUTPUT.PUT_LINE('DEPARTAMENTUL '||V_DEN||' ARE SALARIUL MEDIU DE '||ROUND(V_SAL,2));
  112. EXCEPTION
  113.     WHEN VALUE_ERROR THEN
  114.     DBMS_OUTPUT.PUT_LINE('VALOARE PREA MARE PENTRU VARIABILA RESPECTIVA');
  115.     WHEN OTHERS THEN
  116.     DBMS_OUTPUT.PUT_LINE('A APARUT O EXCEPTIE ' ||SQLERRM);
  117. END;
  118. /
  119.  
  120. --TOO_MANY_ROWS
  121. DECLARE
  122.     V_DEN VARCHAR2(200);
  123.     V_SAL NUMBER;
  124.  
  125. BEGIN
  126.     V_DEN := 'ABC';
  127.     SELECT denumire_departament, AVG(salariul)  INTO V_DEN,V_SAL
  128.     FROM angajati a JOIN departamente d
  129.     ON a.id_departament=d.id_departament
  130.     GROUP BY denumire_departament
  131.  --   HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  132.     ORDER BY 2 DESC;
  133.     DBMS_OUTPUT.PUT_LINE('DEPARTAMENTUL '||V_DEN||' ARE SALARIUL MEDIU DE '||ROUND(V_SAL,2));
  134. EXCEPTION
  135.     WHEN TOO_MANY_ROWS THEN
  136.     DBMS_OUTPUT.PUT_LINE('PREA MULTE RANDURI RETURNATE');
  137.     WHEN OTHERS THEN
  138.     DBMS_OUTPUT.PUT_LINE('A APARUT O EXCEPTIE ' ||SQLERRM);
  139. END;
  140. /
  141.  
  142. --NO DATA FOUND  join cu a.salariul si id_departament!!
  143. DECLARE
  144.     V_DEN VARCHAR2(200);
  145.     V_SAL NUMBER;
  146.  
  147. BEGIN
  148.     V_DEN := 'ABC';
  149.     SELECT denumire_departament, AVG(salariul)  INTO V_DEN,V_SAL
  150.     FROM angajati a JOIN departamente d
  151.     ON a.salariul=d.id_departament
  152.     GROUP BY denumire_departament
  153.  --   HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  154.     ORDER BY 2 DESC;
  155.     DBMS_OUTPUT.PUT_LINE('DEPARTAMENTUL '||V_DEN||' ARE SALARIUL MEDIU DE '||ROUND(V_SAL,2));
  156. EXCEPTION
  157.     WHEN VALUE_ERROR THEN
  158.     DBMS_OUTPUT.PUT_LINE('VALOARE PREA MARE PENTRU VARIABILA RESPECTIVA');
  159.     WHEN TOO_MANY_ROWS THEN
  160.     DBMS_OUTPUT.PUT_LINE('PREA MULTE RANDURI RETURNATE');
  161.     WHEN OTHERS THEN
  162.     DBMS_OUTPUT.PUT_LINE('A APARUT O EXCEPTIE ' ||SQLERRM);
  163. END;
  164. /
  165. --BUFFER
  166. DECLARE
  167.     V_DEN VARCHAR2(200);
  168.     V_SAL NUMBER;
  169.  
  170. BEGIN
  171.     V_DEN := 'ABC';
  172.     SELECT denumire_departament, AVG(salariul)  INTO V_DEN,V_SAL
  173.     FROM angajati a JOIN departamente d
  174.     ON a.id_departament=d.id_departament
  175.     GROUP BY denumire_departament
  176.     HAVING AVG(salariul)=(SELECT MAX(AVG(salariul)) FROM angajati GROUP BY id_departament)
  177.     ORDER BY 2 DESC;
  178.     FOR i IN 1..1000000 LOOP
  179.     DBMS_OUTPUT.PUT_LINE('DEPARTAMENTUL '||V_DEN||' ARE SALARIUL MEDIU DE '||ROUND(V_SAL,2));
  180.     END LOOP;
  181. EXCEPTION
  182.     WHEN VALUE_ERROR THEN
  183.     DBMS_OUTPUT.PUT_LINE('VALOARE PREA MARE PENTRU VARIABILA RESPECTIVA');
  184.     WHEN TOO_MANY_ROWS THEN
  185.     DBMS_OUTPUT.PUT_LINE('PREA MULTE RANDURI RETURNATE');
  186.     WHEN OTHERS THEN
  187.     DBMS_OUTPUT.PUT_LINE('A APARUT O EXCEPTIE ' ||SQLERRM);
  188. END;
  189. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement