是否可以使用oracle 12c中另一个表上的触发器填充表

时间:2015-08-03 20:03:40

标签: sql oracle

使用oracle 12c,我有一个员工表和一个管理员表,如果新插入的员工工资> = 5000,那么他/她被认为是经理。因此,我想在表员工上创建触发器,检查新插入的员工的薪水是否应该在管理员表中重复此行。这可能吗?如果是的话,你能不能给我正确的语法。

1 个答案:

答案 0 :(得分:1)

首先是一些通用词:这可能被认为是糟糕的数据库设计。如果你认为一个超过一定薪水的员工是经理,那么这几乎就是同一个表中的一个列,无论是物理的还是虚拟的。例如,它可能如下所示:

CREATE TABLE employees (
  id          NUMBER,
  first_name  VARCHAR2(10),
  last_name   VARCHAR2(10),
  salary      NUMBER(9,2),
  is_manager  as (case when salary >= 5000 then 1 else 0 end)
  CONSTRAINT employees_pk PRIMARY KEY (id)
);

如果您仍想使用触发器和第二个管理器表,它可以这样工作:

CREATE OR REPLACE TRIGGER trig_emp_insert
AFTER INSERT
   ON employees
FOR EACH ROW

BEGIN

    if (:new.salary >= 5000) then
        insert into managers (...) values (...)
    end if;

END;