我有两张表如下
Emp(eno, ename, sal)
salHistory( empNo, ename, oldSal, newSal, salDif)
我想知道的是如何创建一个触发器(触发器的名称是salary_change),只要“Emp”表获得UPDATE
声明来更改员工的salary column (Sal)
,就应该触发该触发器。此触发器的目标是将empNo
,ename
,oldSal
,newSal
,salDif
写入表格调用SalHistory
。
(在这里salDi
f表示工资差异)
谢谢......
答案 0 :(得分:0)
首先,我建议对salhistory
表至少进行两次更改:
saldif
定义为计算列据说salhistory
的表格式可能类似于
CREATE TABLE salhistory
(
empno NUMBER NOT NULL,
ename VARCHAR2(32) NOT NULL,
oldsal NUMBER(10,2) NOT NULL,
newsal NUMBER(10,2) NOT NULL,
saldif NUMBER(10,2) AS (newsal - oldsal),
changed DATE NOT NULL,
PRIMARY KEY (empno, changed)
);
现在是触发器
CREATE OR REPLACE TRIGGER tg_salary_history
AFTER UPDATE ON emp
FOR EACH ROW
WHEN (NEW.sal <> OLD.sal) -- log a salary change only if the salary has been actually changed
BEGIN
INSERT INTO salhistory (empno, ename, oldsal, newsal, changed) VALUES
(:OLD.eno, :OLD.ename, :OLD.sal, :NEW.sal, SYSDATE());
END;
/
这是 SQLFiddle 演示