我想在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