Я пытаюсь создать триггер в базе данных оракула, и у меня возникают проблемы с условием. Когда я пытаюсь использовать его я получаю «неверный оператор отношения»Могу ли я использовать или устанавливать значение Когда в триггер?
create or replace TRIGGER SQLTEST.TRIGGER_TESTE
AFTER INSERT OR UPDATE ON SQLDBA.VT_TABLE
FOR EACH ROW
WHEN (INSERTING OR NEW.FIELD_1 is null and OLD.FIELD_1 is not null or NEW.FIELD_1 <> OLD.FIELD_1)
DECLARE
VAR_FIELD_1 VT_LOG_TABLE.FIELD_1%TYPE;
BEGIN
SELECT SQLDBA.SEQ_LOG_TABLE.NEXtval into VAR_FIELD_1
FROM dual;
INSERT INTO VT_LOG_TABLE
(FIELD_0,VAR_FIELD_1,FIELD_2,FIELD_3,FIELD_1, FIELD_4)
VALUES(:NEW.FIELD_0,VAR_FIELD_1, :NEW.FIELD_2, :NEW.FIELD_3, :NEW.FIELD_1,SYSDATE);
END TRIGGER_TESTE;
Что такое правильный способ сделать это условие?
Можете ли вы опубликовать весь триггер? – araknoid
создать или заменить TRIGGER SQLTEST.TRIGGER_TESTE ПОСЛЕ вставки или обновления ПО SQLDBA.VT_TABLE ДЛЯ КАЖДОЙ ROW КОГДА (ВСТАВКА ИЛИ NEW.FIELD_1 является недействительным и OLD.FIELD_1 не является нулевым или NEW.FIELD_1 <> OLD.FIELD_1) DECLARE VAR_FIELD_1 VT_LOG_TABLE.FIELD_1% TYPE; BEGIN SELECT SQLDBA.SEQ_LOG_TABLE.NEXtval в VAR_FIELD_1 FROM dual; INSERT INTO VT_LOG_TABLE (FIELD_0, VAR_FIELD_1, FIELD_2, FIELD_3, FIELD_1, FIELD_4) ЗНАЧЕНИЯ (: NEW.FIELD_0, VAR_FIELD_1,: NEW.FIELD_2,: NEW.FIELD_3,: NEW.FIELD_1, SYSDATE); END TRIGGER_TESTE; – Igor
Ошибка может быть 'NEW.FIELD_1 <> OLD.FIELD_1', потому что при вставке у вас нет OLD для сравнения ... но не на 100% уверен в этом. – araknoid