OneCompiler

naaani

1659

CREATE OR REPLACE PACKAGE EMP_PKG IS
PROCEDURE add_employee(p_emp_id IN VARCHAR2, p_first_name IN VARCHAR2, p_last_name IN VARCHAR2, p_email IN VARCHAR2, p_dept_id IN VARCHAR2);
PROCEDURE get_employee(p_dept_id IN VARCHAR2, p_first_name OUT VARCHAR2, p_last_name OUT VARCHAR2, p_email OUT VARCHAR2);
END EMP_PKG;

CREATE OR REPLACE PACKAGE BODY EMP_PKG IS

-- Private function to validate department ID
FUNCTION valid_deptid(p_dept_id IN VARCHAR2) RETURN BOOLEAN IS
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count
    FROM departments
    WHERE dept_id = p_dept_id;
    
    RETURN v_count > 0;
END valid_deptid;

-- Public procedure to add an employee
PROCEDURE add_employee(p_emp_id IN VARCHAR2, p_first_name IN VARCHAR2, p_last_name IN VARCHAR2, p_email IN VARCHAR2, p_dept_id IN VARCHAR2) IS
BEGIN
    IF NOT valid_deptid(p_dept_id) THEN
        RAISE_APPLICATION_ERROR(-20010, 'Invalid department ID.');
    END IF;
    
    INSERT INTO employees (emp_id, first_name, last_name, email, dept_id) 
    VALUES (p_emp_id, p_first_name, p_last_name, p_email, p_dept_id);
EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
        RAISE_APPLICATION_ERROR(-20011, 'Employee ID already exists.');
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20012, 'An unexpected error occurred: ' || SQLERRM);
END add_employee;

-- Public procedure to get an employee by department ID
PROCEDURE get_employee(p_dept_id IN VARCHAR2, p_first_name OUT VARCHAR2, p_last_name OUT VARCHAR2, p_email OUT VARCHAR2) IS
BEGIN
    SELECT first_name, last_name, email
    INTO p_first_name, p_last_name, p_email
    FROM employees
    WHERE dept_id = p_dept_id AND ROWNUM = 1;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RAISE_APPLICATION_ERROR(-20013, 'No employee found in the specified department.');
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20014, 'An unexpected error occurred: ' || SQLERRM);
END get_employee;

END EMP_PKG;