簡體   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