2014-03-25 239 views
2

我在oracle数据库中有一个表,其中有两个字段:statusnotesstatus字段只有3个实际值:active, not-active, removed在oracle中更改另一个字段的值时更改表字段的值

  • statusactive,在默认情况下notes领域有着什么也没有。

  • 如果status更改为not-active,notes将输入值。 由用户

  • 如果status更改回active,我需要notes字段值删除。

我从来没有使用触发器之前,所以对我来说这是一个有点复杂,但这里是我有:

CREATE TRIGGER update_notes 
AFTER UPDATE ON table1 
FOR EACH ROW 
BEGIN 
IF status = 'Active' THEN UPDATE table1 SET notes = ''; 
END IF; 
END; 

但它没有。什么我错过了?

回答

3

不要使用update声明,只是指定值:

CREATE TRIGGER update_notes 
BEFORE UPDATE ON table1 
FOR EACH ROW 
BEGIN 
    IF :new.status = 'Active' THEN 
    :new.notes = null; 
    END IF; 
END; 

BTW:表有,而不是 “田”

+0

现在我已经完全不同了:04084. 00000 - “无法更改此触发的NEW值r类型“ *原因:只能在行 插入或更新触发器之前更改新的触发器变量。 *操作:更改触发器类型或删除变量引用 – Dims

+0

@ user3065540:抱歉,我没有看到您正在使用“AFTER”触发器。当然,您需要使用'BEFORE'触发器(请参阅我的编辑) –

+0

谢谢a_horse_with_no_name!这一个:CREATE TRIGGER update_notes BEFORE UPDATE ON VP_DET FOR EACH ROW BEGIN IF:new.VP_STATUS = '有效' THEN :new.VP_STATUS_NOTES:= ''; END IF; END;成功了! – Dims

0

能否请您尝试以下..

CREATE TRIGGER update_notes  
AFTER UPDATE ON table1 
FOR EACH ROW 
BEING 
    IF :NEW.status = 'Active' THEN 
    :NEW.notes = ''; 
    END IF; 
END; 
/
+0

谢谢,但这个也失败了.. – Dims

+0

在Oracle中没有'插入' –

+0

@a_horse_with_no_name你对我亲爱的..我可以改变我的报价。所以如果有人对此博客进行评论,那么他们就不会感到困惑。 –

相关问题