[英]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.