Professional Documents
Culture Documents
STORED FUNCTIONS
1. Crear una funcin llamada ANNUAL_COMP, que dado como parmetro el cdigo de
un empleado me devuelva el total de salario y comisin anual que debera recibir al
ao 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 funcin llamada QUERY_JEFE que dado como parmetro el cdigo 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 funcin llamada QUERY_DEPT que dado como parmetro el cdigo de un
departamento me devuelva el nmero de puestos de trabajo diferentes que existen
en ese departamento.
RETURN v_jobtypes;
END QUERY_DEPT;
/