[英]Sql Oracle 12c Trigger
我需要一些幫助。 我正在嘗試創建一個觸發器,只要在特定的表上執行插入,刪除或更新操作,就執行該過程。 這是觸發器
CREATE OR REPLACE NONEDITIONABLE TRIGGER NQDI.GAV_TRG
AFTER INSERT or UPDATE or DELETE ON D_GAV
FOR EACH ROW
BEGIN
PRC_FILL_D_GAV(:old.report_name);
END;
不幸的是,由於觸發器在任何提交完成之前就開始了,我需要從同一個表中讀取,它給了我“正在修改D_GAV表無法讀取”的錯誤。 此外, FOR EACH ROW使每個記錄的觸發器開始改變,而我希望觸發器僅在結束時啟動,每次更新,插入或刪除都已提交,但我還沒有找到保存的方法:執行此操作時, old.report_name 。 我知道我可以通過“正常運行的過程”做我想做的事,但我想避免這種情況。 我還有其他解決方案嗎?
你想要一個復合觸發器 。 在每個行事件之后,您將數據插入到數組中。 在聲明之后,您循環訪問數據並調用您的過程。
create or replace trigger nqdi.gav_trg
for insert or update or delete on d_gav compound trigger
type type_table_of_gav is table of d_gav%rowtype;
v_gavs type_table_of_gav := type_table_of_gav();
after each row is
begin
v_gavs.extend(1);
v_gavs(v_gavs.count).report_name := coalesce(:old.report_name, :new.report_name);
end after each row;
after statement is
begin
for i in 1 .. v_gavs.count loop
prc_fill_d_gav(v_gavs(i).report_name);
end loop;
end after statement;
end gav_trg;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.