SQL触发器 - 在IF条件下嵌套INSERT INTO

时间:2017-01-18 20:46:29

标签: oracle plsql triggers

我想在新表员工中创建触发器registring,他们的工资提高到5000以上,到目前为止还没有高于5000的工资。

我写的触发器返回错误Error(2,41): PL/SQL: ORA-00984: column not allowed here

这是我的触发器:

CREATE OR REPLACE TRIGGER emp_gotrich_trig BEFORE UPDATE OF salary ON employees
FOR EACH ROW BEGIN
    IF :NEW.salary>5000 AND :OLD.salary<=5000 THEN
        INSERT INTO emp_gotrich VALUES (employee_id, SYSDATE, :OLD.salary, :NEW.salary);
    END IF;
END;

这里有emp_gotrich表:

CREATE TABLE emp_gotrich ( emp_id NUMBER(6), raise_date DATE, old_sal NUMBER(8,2), new_sal NUMBER(8,2) );

我认为INSERT statemet没有正确嵌套,但我不知道应该改变什么。

我也尝试过使用&#39; WHEN&#39;但我不知道我应该在哪里省略冒号,所以它也无法工作。

CREATE OR REPLACE TRIGGER emp_getrich_log BEFORE UPDATE OF salary ON employees FOR EACH ROW
WHEN
    NEW.salary>5000 AND OLD.salary<=5000;
BEGIN
    INSERT INTO emp_gotrich VALUES(employee_id, SYSDATE, :OLD.salary, :NEW.salary);
END;

请帮助我找到一种方法来运行它。

1 个答案:

答案 0 :(得分:2)

您忘记在INSERT语句中的:OLD值上指定:NEWemployee_id。我相信它应该是:

INSERT INTO emp_gotrich
  (EMP_ID, RAISE_DATE, OLD_SAL, NEW_SAL)
VALUES
  (:OLD.employee_id, SYSDATE, :OLD.salary, :NEW.salary);

我建议一个字段列表,例如我添加的字段列表,应该总是包含在INSERT语句中。