2017-01-18 3 views
1

Я хочу создать триггер в новых РЕГИСТРАЦИЯ сотрудников таблицы, которых заработная плата поднимается выше 5000 и не получали зарплату выше, чем 5000 до сих пор.SQL триггер - вложенности INSERT INTO в IF условие

Trigger Я написал номер ошибки 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 не вложен правильно, но я не знаю, что я должен измениться.

Я также попытался использовать «когда», но я не знаю, где я должен omitt колонов, так что doeasn't работать тоже.

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

Вы забыли указать :OLD или :NEW по значению employee_id в своем заявлении INSERT. Я считаю, что это должно быть:

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

Я полагаю, что поле списка, например, один я добавил, всегда должны быть включены в операторе INSERT.