User Tools

Site Tools


kurs:instead_of_trigger

This is an old revision of the document!


create table new_emps as select 
employee_id, first_name, last_name, salary, department_id
from employees


create table new_deps as select 
department_id, department_name from departments
CREATE OR REPLACE VIEW view_emp_dep (
   first_name,
   last_name,
   department_name,
   salary )
AS
SELECT new_emps.first_name,
       new_emps.last_name,
       new_deps.department_name,
       new_emps.salary
  FROM new_deps, new_emps
 WHERE ((new_emps.department_id = new_deps.department_id(+)))
/
-- Start of DDL Script for Trigger HR.TRG_VIEW_EMP_DEP
-- Generated 13.11.2008 12:57:27 from HR@ORCL

CREATE OR REPLACE TRIGGER trg_view_emp_dep
 INSTEAD OF
  INSERT OR DELETE OR UPDATE
 ON view_emp_dep
REFERENCING NEW AS NEW OLD AS OLD
declare
 dep_id departments.department_id%type;
begin
  if inserting then
  select department_id into dep_id from new_deps where
    department_name = :new.department_name;
    
  insert into new_emps (
    EMPLOYEE_ID,
    FIRST_NAME,
    LAST_NAME,
    SALARY,
    DEPARTMENT_ID)
  values (
    employees_seq.nextval,
    :new.first_name,
    :new.last_name,
    :new.salary,
    dep_id);
  elsif deleting then
    delete from new_emps where
      :old.last_name  = last_name and
      :old.first_name = first_name;
  else
    update new_emps set
      first_name = nvl(:new.first_name, :old.first_name),
      last_name  = nvl(:new.last_name,  :old.last_name),
      salary     = :new.salary,
      department_id =
       (select department_id from new_deps where
        department_name = :old.department_name)
    where
     first_name = :old.first_name and
     last_name  = :old.last_name;

  end if;
end;
/
kurs/instead_of_trigger.1274174146.txt.gz · Last modified: 2014/09/10 21:22 (external edit)