我想在oracle數據庫上創建一個觸發器,並且遇到了條件時的問題。 當我嘗試使用它,我得到「無效的關係運算符」我可以使用或觸發何時觸發?
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 2013-02-27 18:37:12
創建或替換TRIGGER SQLTEST.TRIGGER_TESTE 插入或更新後SQLDBA.VT_TABLE FOR EACH ROW WHEN(插入或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 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; – Igor 2013-02-27 18:41:27
錯誤可能是'NEW.FIELD_1 <> OLD.FIELD_1',因爲插入時沒有用於比較的OLD ...但不能100%確定這一點。 – araknoid 2013-02-27 18:49:56