簡體   English   中英

Sql Oracle 12c觸發器

[英]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.

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