Advertisement
xlujiax

Function / Procedure

Oct 26th, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.54 KB | None | 0 0
  1. --------------------------------------
  2. SET SERVEROUTPUT ON
  3. DECLARE  
  4. cod_Dep DEPARTMENTS.DEPARTMENT_ID%TYPE;
  5.  
  6. CURSOR c1 IS SELECT d.Department_id, d.department_name, e.salary
  7. FROM DEPARTMENTS d join employees e
  8. ON d.DEPARTMENT_ID=e.DEPARTMENT_ID;
  9.  
  10. salary employees.salary%TYPE;
  11. nam_dep departments.department_name%TYPE;
  12.  
  13. BEGIN
  14. salary :=0;
  15. cod_dep := 20;
  16. FOR i IN c1 LOOP
  17. IF cod_dep = i.department_id THEN  
  18.   salary := salary + i.salary;  
  19. END IF;
  20. nam_dep := i.department_name;
  21. END LOOP;  
  22. DBMS_OUTPUT.put_line('El departamento ' || nam_dep || ' de codigo: ' || cod_dep ||' tiene como suma de salario: ' || salary );
  23. END;
  24.  
  25. --v2
  26. SET SERVEROUTPUT ON
  27. DECLARE  
  28. cod_Dep DEPARTMENTS.DEPARTMENT_ID%TYPE;
  29.  
  30. CURSOR c1 IS SELECT d.Department_id, d.department_name, e.salary
  31. FROM DEPARTMENTS d join employees e
  32. ON d.DEPARTMENT_ID=e.DEPARTMENT_ID;
  33.  
  34. salary employees.salary%TYPE;
  35. nam_dep departments.department_name%TYPE;
  36. r_department c1%ROWTYPE;
  37. BEGIN
  38. salary :=0;
  39. cod_Dep := 20;
  40. OPEN c1;
  41. FETCH c1 INTO r_department;
  42. WHILE (c1%FOUND)
  43.     LOOP
  44.       EXIT WHEN c1%NOTFOUND;
  45.       IF (r_department.department_id = cod_Dep) THEN
  46.         salary := salary + r_department.salary;
  47.       END IF;
  48.       nam_dep := r_department.department_name;
  49.       FETCH c1 INTO r_department;
  50.     END LOOP;
  51.     DBMS_OUTPUT.put_line('El departamento ' || nam_dep || ' de codigo: ' || cod_Dep ||' tiene como suma de salario: ' || salary );
  52. CLOSE c1;
  53. END;
  54.  
  55.  
  56. ---
  57.  
  58.  
  59. DECLARE  nume NUMBER (2);
  60. text VARCHAR2 (100);
  61. prin VARCHAR2 (200);
  62. BEGIN nume:= 1;
  63. FOR i IN 1..5 LOOP text:= 'Create table TEMP_TAB_' || nume;  prin := text|| '( EMPLOYEE_ID   NUMBER(6), FIRST_NAME    VARCHAR2(20), LAST_NAME     VARCHAR2(25) )';
  64. EXECUTE IMMEDIATE prin;
  65. nume := nume+1;
  66. END LOOP;  
  67. END;
  68.  
  69.  
  70. CREATE OR REPLACE FUNCTION Pais_nombre (f_country_id IN VARCHAR2)
  71. RETURN VARCHAR2 AS
  72. vcountry_name countries.country_id%TYPE;
  73. BEGIN
  74.   SELECT country_name INTO vcountry_name
  75.   FROM countries
  76.   WHERE country_id = f_country_id  
  77.   RETURN vcountry_name;
  78.   EXCEPTION
  79.   WHEN NO_DATA_FOUND THEN RETURN 'No existe Dpto';
  80. END Pais_nombre;
  81.  
  82. SELECT Pais_nombre('AR') FROM DUAL;
  83.  
  84. CREATE OR REPLACE FUNCTION NOMBRE_DEPTO (fdepartment_id IN NUMBER)
  85. RETURN VARCHAR2 AS
  86. vdepartment_name departments.department_name%TYPE;
  87. BEGIN
  88. SELECT department_name INTO vdepartment_name
  89. FROM departments
  90. WHERE department_id = fdepartment_id;
  91. RETURN vdepartment_name;
  92. EXCEPTION
  93. WHEN NO_DATA_FOUND THEN RETURN 'No existe Dpto';
  94. END NOMBRE_DEPTO;
  95.  
  96. SELECT NOMBRE_DEPTO(70) FROM DUAL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement