首页 > 解决方案 > Oracle触发器-更新同一张表后更新记录

问题描述

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

标签: sqldatabaseoracle

解决方案


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

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

在更新触发器中,旧值可通过 访问: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;

推荐阅读