我對觸發器相當陌生,所以顯然我在某處做錯了什麼。我正在製作一個報表,它將從原始表中獲取數據。爲了簡單起見,假設有一個表,然後有一個報表。PLSQL觸發器更新另一個表中的字段值
原始表(orig_tab)
CREATE TABLE orig_tab (
PK NUMBER(8) not null,
NAME VARCHAR2(20) ,
);
INSERT INTO orig_tab (PK, NAME) VALUES (1, 'AAA');
INSERT INTO orig_tab (PK, NAME) VALUES (2, 'BBB');
INSERT INTO orig_tab (PK, NAME) VALUES (3, 'CCC');
;那麼,報告表(rep_tab)
CREATE TABLE rep_tab (
PK NUMBER(8) not null,
NAME VARCHAR2(20) ,
);
從用戶inteface
現在,有人更改記錄2的值,顯然,這應該如何治療作爲插入(因爲此記錄不存在)用於報告表。然後在某個時間之後,值被更改,因此它是報告表的更新情況。
問:我該如何製作這種觸發器?我認爲這是一個合併狀態的情況。
這是我做了什麼:
create or replace trigger vr_reporting_trigger
after update on orig_tab
for each row
begin
MERGE INTO rep_tab d
USING (SELECT pk FROM orig_tab) s
ON (d.pk = s.pk)
WHEN MATCHED THEN
UPDATE SET d.pk = s.pk,
d.name = s.name
WHEN NOT MATCHED THEN
INSERT (d.pk, d.name) VALUES (s.pk, s.name);
end vr_reporting_trigger;
的任何意見或建議,可以幫助我的數字出來?謝謝。
好的答案規定,凡發現最大的問題(變異表異常(「每一行」觸發不允許從表中選擇),可能要AFTER INSERT OR UPDATE觸發器,還有一些需要考慮處理的角落案例,比如更新到orig_tab.pk(可能不希望在報表中留下「舊」行);或者如果在插入匹配行時報告表中已存在行到orig_tab。 – spencer7593