在 oracle 中更改另一个字段的值时更改表字段的值
Posted
技术标签:
【中文标题】在 oracle 中更改另一个字段的值时更改表字段的值【英文标题】:Change value of table field when value of another field was changed in oracle 【发布时间】:2014-03-25 11:57:18 【问题描述】:我在 oracle 数据库中有一个表,它有两个字段:status
和 notes
。 status
字段只有 3 个实际值:active, not-active, removed
。
当status
为active
时,默认情况下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;
但它失败了。我错过了什么?
【问题讨论】:
【参考方案1】:不要使用update
语句,只需赋值即可:
CREATE TRIGGER update_notes
BEFORE UPDATE ON table1
FOR EACH ROW
BEGIN
IF :new.status = 'Active' THEN
:new.notes = null;
END IF;
END;
顺便说一句:表格有列,而不是“字段”
【讨论】:
现在我有了完全不同的东西:04084. 00000 - “无法更改此触发器类型的新值” *原因:新触发器变量只能在行插入或更新触发器之前更改。 *操作:更改触发器类型或删除变量引用 @user3065540:抱歉,我没有看到您使用的是AFTER
触发器。当然你需要使用BEFORE
触发器(见我的编辑)
谢谢 a_horse_with_no_name!这个:在每行更新 VP_DET 之前创建触发器 update_notes IF :new.VP_STATUS = 'Active' THEN :new.VP_STATUS_NOTES := '';万一;结尾;工作!【参考方案2】:
你可以试试下面吗..
CREATE TRIGGER update_notes
AFTER UPDATE ON table1
FOR EACH ROW
BEING
IF :NEW.status = 'Active' THEN
:NEW.notes = '';
END IF;
END;
/
【讨论】:
Oracle 中没有inserted
@a_horse_with_no_name 你说得对,亲爱的。我可以改变我的报价。因此,如果有人查看此博客,那么他们不会感到困惑。以上是关于在 oracle 中更改另一个字段的值时更改表字段的值的主要内容,如果未能解决你的问题,请参考以下文章