在 oracle 中更改另一个字段的值时更改表字段的值

Posted

技术标签:

【中文标题】在 oracle 中更改另一个字段的值时更改表字段的值【英文标题】:Change value of table field when value of another field was changed in oracle 【发布时间】:2014-03-25 11:57:18 【问题描述】:

我在 oracle 数据库中有一个表,它有两个字段:statusnotesstatus 字段只有 3 个实际值:active, not-active, removed

statusactive 时,默认情况下notes 字段中没有任何内容。

如果 status 更改为 not-activenotes 将输入值。 由用户

如果将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 中更改另一个字段的值时更改表字段的值的主要内容,如果未能解决你的问题,请参考以下文章

当并行用户输入文本字段值更改下拉值时,应自动更改

在不同组件中更改值时将设置值反应到另一个组件

sql语句查询表中一个字段的值小于另一个字段的值怎么写?

怎么根据一个表的字段值修改另一个表的字段值

遍历表并更改值时访问崩溃

oracle中如何修改日期类型的字段值