2017-01-18 74 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語句。