我想在新表员工中创建触发器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;
请帮助我找到一种方法来运行它。
答案 0 :(得分:2)
您忘记在INSERT语句中的:OLD
值上指定:NEW
或employee_id
。我相信它应该是:
INSERT INTO emp_gotrich
(EMP_ID, RAISE_DATE, OLD_SAL, NEW_SAL)
VALUES
(:OLD.employee_id, SYSDATE, :OLD.salary, :NEW.salary);
我建议一个字段列表,例如我添加的字段列表,应该总是包含在INSERT语句中。