【发布时间】:2015-08-04 04:28:53
【问题描述】:
使用oracle 12c,我有一个员工表和一个经理表,如果新插入的员工工资> = 5000,那么他/她被认为是经理。所以我想在员工表上创建触发器,检查新插入的员工的薪水 >=5000 这一行是否应该在经理表中重复。这可能吗?如果是,您能否简单地给我正确的语法。
【问题讨论】:
使用oracle 12c,我有一个员工表和一个经理表,如果新插入的员工工资> = 5000,那么他/她被认为是经理。所以我想在员工表上创建触发器,检查新插入的员工的薪水 >=5000 这一行是否应该在经理表中重复。这可能吗?如果是,您能否简单地给我正确的语法。
【问题讨论】:
先说一些一般性的话:这可能被认为是糟糕的数据库设计。如果您将超出一定薪水的员工视为经理,那么这几乎会要求同一张表中的列,无论是物理的还是虚拟的。例如,它可能看起来像这样:
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;
【讨论】: