声明级别触发器

时间:2016-03-02 12:50:00

标签: plsql triggers

我有一个名为A_TAB的表的触发器,它只是一个字符类型的A列。我有另一个表DUP_A,其列与TAB_A相同。触发A_TAB如下

create or replace trigger A_trig
    before insert on A_TAB 
    for each row
declare
    num1 varchar2(50):= null;
    pragma autonomous_transaction;
begin
    select Wm_Concat(a) into  num1 from DUP_A;
    if num1 is null 
    then
      num1:=:new.a;
    else
      num1:=num1||','||:new.a;
    end if;
    insert into DUP_A values(num1);  
    delete from DUP_A where rowid<>(select max(rowid) from DUP_A);
commit;
end;

我在此处连接新插入的所有值并将其插入DUP_A的单个列。

它工作正常,但我需要具有相同功能的statement level trigger

谢谢

2 个答案:

答案 0 :(得分:0)

删除“for each row”子句会将行级触发器更改为语句级触发器。但是PL / SQL运行时引擎会创建并填充 两个数据结构(:new和:old),其功能与记录类似,当触发行级触发时

答案 1 :(得分:0)

您无法在语句级触发器中引用数据(def compare(directory1, directory2): for file1 in os.listdir(directory1): for file2 in os.listdir(directory2): if "some" in file1 and "some" in file2: print("found") :new)。