User Tools

Site Tools


kurs:procedure_upsert_employee

This is an old revision of the document!


--------------------------------------------------------
--  DDL for Procedure INSERT_EMPLOYEE
--------------------------------------------------------
set define off;

  CREATE OR REPLACE PROCEDURE "HR"."INSERT_EMPLOYEE" 
(
  P_FIRST_NAME IN VARCHAR2  
, P_LAST_NAME IN VARCHAR2  
, P_DEPARTMENT_NAME IN departments.department_name%type
, P_SALARY IN NUMBER
, p_email in varchar2
, p_phone_number in varchar2
, p_hire_date in date
, p_job_title in varchar2
, p_commission_pct in number
, p_manager_id in number
) AS 

v_employee_id number;
v_department_id departments.department_id%type;
v_manager_id number;
v_job_id jobs.job_id%type;
v_max_salary number;

BEGIN
  
  begin
  select department_id into v_department_id
    from departments
   where department_name = P_DEPARTMENT_NAME;
  exception
  when no_data_found then
    raise_application_error(-20001, 'no department found');  
  end;
  
  begin  
  select job_id into v_job_id 
    from jobs
   where job_title = p_job_title;
  exception
  when no_data_found then
    raise_application_error(-20002, 'no such job_title found');  
  end;
   
  v_manager_id := 101;  
    
  select max(salary) into v_max_salary from employees;
  if p_salary > v_max_salary then 
    raise_application_error(-20003, 'too much money exception');  
  end if;    
    
  merge into employees e
  using (select 1 from dual) 
  on (first_name = p_first_name and
      last_name  = p_last_name)
  when matched then 
    update set    
    email          = p_email,
    phone_number   = p_phone_number,
    hire_date      = p_hire_date,
    job_id         = v_job_id,
    salary         = p_salary,
    commission_pct = p_commission_pct,
    manager_id     = v_manager_id,
    department_id  = v_department_id 
  when not matched then
    insert (
    employee_id,
    first_name,
    last_name,
    email,
    phone_number,
    hire_date,
    job_id,
    salary,
    commission_pct,
    manager_id,
    department_id
  ) values (
    employees_seq.nextval,
    p_first_name,
    p_last_name,
    p_email,
    p_phone_number,
    p_hire_date,
    v_job_id,
    p_salary,
    p_commission_pct,
    v_manager_id,
    v_department_id
  );
  
END INSERT_EMPLOYEE;

/
kurs/procedure_upsert_employee.1399372630.txt.gz · Last modified: 2014/09/10 21:22 (external edit)