簡體   English   中英

PLSQL插入並使用觸發器更新另一個表

[英]PLSQL Insert and update another table with trigger

我是plsql的新手; 我有2個表,tableA和tableB。

tableA是我的主表。 在tableA上插入或更新后,我想用其相關表對其進行更新。

例如:tableA的列名為“ GID_FROM_B”,而tableB的列名為“ GID”。 我可以將此表的值與id和counter匹配。 根據下表,我想從我的界面向tableA添加(2,5,'')值。 並且gid_from_b將使用觸發器更新。 我在下面編寫了觸發器。

tableA:
id     |   counter  |   gid_from_b  |
1             3            xyz                            


tableB:
id     |   counter  |      gid      |
1             3            xyz                            
2             5            abc 

CREATE OR REPLACE TRIGGER gid_update
AFTER INSERT OR UPDATE ON DBO.TABLEA
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW

UPDATE TABLEA
   SET GID_FROM_B =  TABLEB.GID
   WHERE TABLEA.ID = TABLEB.ID AND TABLEA.COUNTER = TABLEB.COUNTER;
END;

對於僅要執行的INSERT操作,我們需要用BEFORE INSERT替換AFTER INSERT OR UPDATE ,如果不可能用:new前綴列創建AFTER INSERT TRIGGER

以下內容非常適合您的目標:

CREATE OR REPLACE TRIGGER gid_update
BEFORE INSERT ON TableA
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN 
  for c in ( select b.gid from tableB b where b.id = :new.id and b.counter = :new.counter )
  loop
    :new.gid_from_b := c.gid; 
  end loop; 
END;

您無需運行任何更新語句,只需在:NEW.gid_from_b中使用選擇即可。 請注意,如果要修改:NEW列的值,則應為“ BEFORE UPDATE TRIGGER

假設您的TableB的每個ID,計數器組合只有一行。 如果不是,則可能必須獲取MAX(gid) MIN(gid)或適合您的任何東西。

CREATE OR REPLACE TRIGGER gid_update
   BEFORE INSERT OR UPDATE ON TABLEA
FOR EACH ROW WHEN (NEW.gid_from_b IS NULL)
BEGIN
 SELECT gid INTO 
    :NEW.gid_from_b FROM tableB b 
  WHERE b.id =:NEW.id AND b.counter = :NEW.counter;
END;
/

dbfiddle

暫無
暫無

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

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