Advertisement
Guest User

PL.SQL

a guest
Apr 18th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.08 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION FIND_AVG(D_ID DEPARTMENTS.DEPARTMENT_ID%TYPE)
  2. RETURN NUMBER
  3. IS
  4. AVG_SALARY EMPLOYEES.SALARY%TYPE;
  5. BEGIN
  6. SELECT AVG(SALARY) INTO avg_salary
  7. FROM EMPLOYEES
  8. WHERE department_id = d_id;
  9. RETURN avg_salary;
  10. END FIND_AVG;
  11.  
  12. --INPUT: EMPLOYEE ID
  13. --OUTPUT: BOOLEAN (EMPLOYEE HAS SALARY HIGHER THAN AVERAGE OF HIS DEPARTMENT)
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. CREATE OR REPLACE FUNCTION EVAL_SAL(E_ID EMPLOYEES.EMPLOYEE_ID% TYPE,
  21. OUT_SALARY OUT EMPLOYEES.SALARY%TYPE)
  22. RETURN BOOLEAN
  23. IS
  24. E_SAL EMPLOYEES.SALARY%TYPE;
  25. AVG_SAL EMPLOYEES.SALARY%TYPE;
  26. D_ID EMPLOYEES.DEPARTMENT_ID%TYPE;
  27. BEGIN
  28. SELECT SALARY,DEPARTMENT_ID INTO E_SAL,D_ID
  29. FROM EMPLOYEES
  30. WHERE employee_id = E_ID;
  31. out_salary :=E_SAL;
  32. SELECT AVG(SALARY) INTO avg_sal
  33. FROM EMPLOYEES
  34. WHERE department_id = d_id;
  35. IF E_SAL> avg_sal THEN
  36. RETURN TRUE;
  37. ELSE
  38. RETURN FALSE;
  39. END IF;
  40. END EVAL_SAL;
  41.  
  42. SELECT * FROM EMPLOYEES;
  43.  
  44. DECLARE
  45. X BOOLEAN;
  46. Y EMPLOYEES.SALARY%TYPE :=0;
  47. BEGIN
  48. X:= eval_sal(195,Y);
  49. IF X THEN
  50. DBMS_OUTPUT.put_line(Y|| ' ABOVE AVERAGE');
  51. ELSE
  52. DBMS_OUTPUT.put_line(Y||' BELOW AVERAGE');
  53. END IF;
  54. END;
  55.  
  56.  
  57.  
  58.  
  59.  
  60. DECLARE
  61. AVG_S EMPLOYEES.SALARY%TYPE;
  62. BEGIN
  63. AVG_S := FIND_AVG(80);
  64. DBMS_OUTPUT.put_line(AVG_S);
  65. END;
  66.  
  67.  
  68.  
  69.  
  70.  
  71. DECLARE
  72. CURSOR C_E IS
  73. SELECT FIRST_NAME,SALARY
  74. FROM EMPLOYEES
  75. WHERE department_id = 80;
  76. F_N EMPLOYEES.FIRST_NAME%TYPE;
  77. E_SAL EMPLOYEES.SALARY%TYPE;
  78. BEGIN
  79. OPEN C_E;
  80. LOOP
  81. FETCH C_E INTO f_n, e_sal;
  82. EXIT WHEN C_E%NOTFOUND;
  83. DBMS_OUTPUT.put_line(f_n ||' '|| e_sal);
  84. END LOOP;
  85. CLOSE C_E;
  86. END;
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. DECLARE
  95. CURSOR TEST_E IS
  96. SELECT SALARY, FIRST_NAME, department_id
  97. FROM EMPLOYEES;
  98. D_ID EMPLOYEES.DEPARTMENT_ID%TYPE;
  99. E_SAL EMPLOYEES.SALARY%TYPE;
  100. E_N EMPLOYEES.FIRST_NAME%TYPE;
  101. D_NAME DEPARTMENTS.DEPARTMENT_NAME%TYPE;
  102. BEGIN
  103. OPEN TEST_E;
  104. LOOP
  105. FETCH TEST_E INTO e_sal, e_n, d_id;
  106. SELECT DEPARTMENT_NAME INTO D_NAME FROM DEPARTMENTS WHERE department_id = d_id;
  107. EXIT WHEN TEST_E%NOTFOUND;
  108. IF E_SAL>FIND_AVG(D_ID) THEN
  109. DBMS_OUTPUT.put_line(E_N ||' ABOVE AVERAGE '|| d_name);
  110. ELSE
  111. DBMS_OUTPUT.put_line(E_N ||' BELOW AVERAGE '|| d_name);
  112. END IF;
  113. END LOOP;
  114. CLOSE TEST_E;
  115. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement