2017-01-18 3 views
1

私は給与が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ステートメントに含めることをお勧めします。