2017-01-18 38 views
1

我想在新工作表员工中创建触发器注册表,并将薪水提高到5000以上,并且迄今为止薪水未超过5000。SQL触发器 - 在IF条件下嵌套INSERT INTO

我写的触发器返回错误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不正确的嵌套,但我不知道我应该怎么改变。

我也尝试过使用'WHEN',但我不知道应该在哪里忽略冒号,所以它也没有工作。

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; 

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

回答

2

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

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

我建议一个字段列表,如一个我加,应始终包含在INSERT语句。