Professional Documents
Culture Documents
Taller PLSQL Stored Functions
Taller PLSQL Stored Functions
STORED FUNCTIONS
1. Crear una función llamada ANNUAL_COMP, que dado como parámetro el código de
un empleado me devuelva el total de salario y comisión anual que debería recibir al
año el empleado.
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE NEW_EMP
(emp_id IN employees.employee_id%TYPE, first_n IN
EMPLOYEES.FIRST_NAME%TYPE, last_n IN EMPLOYEES.LAST_NAME%TYPE, mail
IN EMPLOYEES.EMAIL%TYPE,
phone IN EMPLOYEES.PHONE_NUMBER%TYPE, hire_d IN
EMPLOYEES.HIRE_DATE%TYPE, j_id IN EMPLOYEES.JOB_ID%TYPE, sal IN
EMPLOYEES.SALARY%TYPE,
com_pct IN EMPLOYEES.COMMISSION_PCT%TYPE, man_id IN
EMPLOYEES.MANAGER_ID%TYPE, dep_id IN
EMPLOYEES.DEPARTMENT_ID%TYPE, bonus IN
EMPLOYEES.EMPLOYEE_BONUS%TYPE)
IS
err_no_valid_dept EXCEPTION;
BEGIN
IF VALID_DEPTID(dep_id) THEN
INSERT INTO EMPLOYEES VALUES(emp_id, first_n, last_n, mail, phone, hire_d,
j_id, sal, com_pct, man_id, dep_id, bonus);
ELSE
RAISE err_no_valid_dept;
END IF;
COMMIT;
EXCEPTION
WHEN err_no_valid_dept THEN
DBMS_OUTPUT.PUT_LINE('El departamento al que se quiere ingresar no
existe');
END NEW_EMP;
/
3. Crear una función llamada QUERY_JEFE que dado como parámetro el código de un
empleado me devuelva el nombre de su jefe inmediato, probar su funcionamiento
mediante un select a todos los empleados de la tabla employees.
RETURN v_nomjefe;
END query_jefe;
/
--Al empleado con id 130
SELECT query_jefe(employee_id) as "Jefe", last_name as "Empleado" from
employees where employee_id = 130;
--A todos lo empleados
SELECT query_jefe(employee_id) as "Jefe", last_name as "Empleado" from employees;
4. Crear una función llamada QUERY_DEPT que dado como parámetro el código de un
departamento me devuelva el número de puestos de trabajo diferentes que existen
en ese departamento.
BEGIN
SELECT count(count(JOB_ID))
INTO v_jobtypes
FROM employees
where department_id=d_id
group by job_id;
RETURN v_jobtypes;
END QUERY_DEPT;
/