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