簡體   English   中英

創建觸發器以在插入后更新同一個表

[英]Create trigger to update same table after insert

我需要一些幫助來自動忽略表上的一些數據(插入后),以便它不處理這些記錄:

CREATE or REPLACE TRIGGER "user"."trigger_name"
AFTER INSERT ON user.tab
FOR EACH ROW
BEGIN
    UPDATE tab
       SET :NEW.status = 'DONE'
     WHERE :NEW.type not in (1, 2)
       AND :NEW.status = 'NEW'
    COMMIT;
END trigger_name;

這是一個正確的方法嗎?

非常感謝!

我認為您正在尋找更像這樣的東西,如上所述:

CREATE or REPLACE TRIGGER user.trigger_name
BEFORE INSERT ON user.table
FOR EACH ROW
BEGIN
    if :new.status = 'NEW' and :new.type not in (1,2) then
        :new.status = 'DONE';
    end if;
END trigger_name;

我建議您為列status添加一個虛擬列,而不是創建數據庫觸發器。 由於您可能會遇到觸發器不自覺地被禁用的情況。 這可能會產生一些符合規則的數據,而其中一些則不符合。 此外,通過這種方式,您將能夠跟蹤原始數據。

因此,請考慮應用以下 DDL 語句

ALTER TABLE tab
ADD (
     status2 AS (CASE 
                 WHEN status = 'NEW' AND type NOT IN (1,2) THEN 
                      'DONE' 
                 ELSE 
                      status 
                  END)
);

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM