繁体   English   中英

Oracle 同表更新后触发更新记录

[英]Oracle trigger- update record after update on same table

我想在 oracle 数据库中创建触发器。 当有人更改状态时,其状态再次更改为未付款,以便其他用户可以使用相同的号码进行付款。 我写了下面的代码,但它没有改变状态。 请在这方面帮助我。 谢谢你。

CREATE OR REPLACE TRIGGER PAY.TRG_UPDATE_NUMBER

AFTER UPDATE ON PAY.MYBILL

BEGIN

UPDATE PAY.MYBILL

SET STATUS='U'

WHERE MYNUMBER='123456789';

END;

您需要一个触发器来确保特定号码的状态永远不会改变并始终保持为“U”。

为此,您需要一个BEFORE UPDATE触发器。 然后,Oracle 中的触发器旨在直接操作更新数据,而不是通过更新语句。 你需要FOR EACH ROW ,这样你就可以对单行的更新做出反应。

在 update tigger 中,可以通过:old访问旧值,通过:new访问新值。

CREATE OR REPLACE TRIGGER pay.trg_update_number
BEFORE UPDATE OF status ON pay.mybill
FOR EACH ROW
BEGIN
  IF :new.mynumber = 123456789 THEN
    :new.status := 'U'; -- or :new.status := :old.status;
  END IF;
END trg_update_number;

除了IF / THEN ,您还可以使用WHEN子句:

CREATE OR REPLACE TRIGGER pay.trg_update_number
BEFORE UPDATE OF status ON pay.mybill
FOR EACH ROW
WHEN (new.mynumber = 123456789)
BEGIN
  :new.status := 'U'; -- or :new.status := :old.status;
END trg_update_number;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM