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