我有一个触发器,但它没有将记录插入目标表。创建或替换触发器ins_det_trig1在Table_a上插入后声明编译指示autonomous_transaction;---开始插入到inf_det中选择a.loc_id,a.genre_id,to_char (a.emp_date yyyy-mm-dd),a.san_seq从Table_b a,Table_a b在哪里b.emp_date = a.emp_date和b.genre_id = a.genre_id和b.san_seq = a.san_seq;
commit;
exception
when others
Rollback;
end;
pls help me on this
首先,触发器是无效的,所以它不会做任何事情。您正在使用一个未声明的名为v_err
的变量。
那么,你就吞下了所有的异常。如果出现问题,则用错误代码填充该变量,然后静默地结束触发器。因此,当触发器失败时,您永远不会得到通知。
但是主要的问题是你没有像在Oracle中使用触发器那样使用触发器。触发器是行触发器之后的(AFTER INSERT ... FOR EACH ROW
),因此在插入table_a行时每行触发一次。插入到新行中的值可以用:new
访问,例如:new.business_date
。
说了这么多:似乎你想要一个后语句触发器. 在行插入完成后触发的触发器。要做到这一点,请删除FOR EACH ROW
子句和相关的REFERENCING
子句。
create or replace trigger ins_det_trig1
after insert on Table_a
declare
...
begin
...
end;