zoukankan      html  css  js  c++  java
  • ORA-04091: table xxx is mutating, trigger/function may not see it

    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as tbcs
     
    SQL> 
    SQL> 
    SQL> drop trigger tbcs.TRG_CJW_TEST;
     
    drop trigger tbcs.TRG_CJW_TEST
     
    ORA-04080: trigger 'TRG_CJW_TEST' does not exist
    SQL> drop table tbcs.cjw_test;
     
    drop table tbcs.cjw_test
     
    ORA-00942: table or view does not exist
    SQL> create table cjw_test
      2  (
      3  itemid1    varchar2(10),
      4  itemid2    varchar2(10),
      5  itemid3    varchar2(10)
      6  );
     
    Table created
    SQL> insert into cjw_test values('1','1','1');
     
    1 row inserted
    SQL> commit;
     
    Commit complete
    
    /*
    对于after 类型的 for each row 级别的triggers,不论哪种insert语句触发了trigger,
    都不允许在 trigger 中访问本trigger所依赖的table的
    */
    
    SQL> create or replace trigger trg_cjw_test
      2    after insert on tbcs.cjw_test
      3    for each row
      4  declare
      5    i   number:=0;
      6  begin
      7    select count(1) into i from tbcs.cjw_test;
      8  end trg_cjw_test;
      9  /
     
    Trigger created
     
    SQL> insert into cjw_test values('1','1','1');
     
    insert into cjw_test values('1','1','1')
     
    ORA-04091: table TBCS.CJW_TEST is mutating, trigger/function may not see it
    ORA-06512: at "TBCS.TRG_CJW_TEST", line 4
    ORA-04088: error during execution of trigger 'TBCS.TRG_CJW_TEST'
     
    SQL> 
    SQL> 
    /*
    对于before 类型的 for each row 级别的triggers,如果使用 insert into ... values 语句触发此trigger ,
    则在trigger 中访问本table没有问题;但如果使用 insert into select .. from 语句触发此trigger ,
    则在trigger 中访问本table就报ora-04091错误;
    */
    
    SQL> create or replace trigger trg_cjw_test
      2    before insert on tbcs.cjw_test
      3    for each row
      4  declare
      5    i   number:=0;
      6  begin
      7    select count(1) into i from tbcs.cjw_test;
      8  end trg_cjw_test;
      9  /
     
    Trigger created
     
    SQL> insert into cjw_test values('1','1','1');
     
    1 row inserted
     
    SQL> commit;
     
    Commit complete
     
    SQL> 
    SQL> create or replace trigger trg_cjw_test
      2    before insert on tbcs.cjw_test
      3    for each row
      4  declare
      5    i   number:=0;
      6  begin
      7    insert into tbcs.cjw_test
      8    select '2','2','2' from dual;
      9  end trg_cjw_test;
     10  /
     
    Trigger created
     
    SQL> insert into cjw_test values('1','1','1');
     
    insert into cjw_test values('1','1','1')
     
    ORA-04091: table TBCS.CJW_TEST is mutating, trigger/function may not see it
    ORA-06512: at "TBCS.TRG_CJW_TEST", line 4
    ORA-04088: error during execution of trigger 'TBCS.TRG_CJW_TEST'
    ORA-06512: at "TBCS.TRG_CJW_TEST", line 4
    ORA-04088: error during execution of trigger 'TBCS.TRG_CJW_TEST'
     
    SQL> 
    
     SQL> 
    /*
    上面实验中使用before,我们在仅插入一条数据的情况下,并没有报错,现在试一下插入多条数据的情况
    */
    SQL> create or replace trigger trg_cjw_test
      2    before insert on tbcs.cjw_test
      3    for each row
      4  declare
      5    i   number:=0;
      6  begin
      7    select count(1) into i from tbcs.cjw_test;
      8  end trg_cjw_test;
      9  /
     
    Trigger created
     
    SQL> 
    SQL> create table cjw_test_bak as select * from cjw_test;
     
    Table created
    SQL> insert into cjw_test_bak values('2','1','1');
     
    1 row inserted
    SQL> insert into cjw_test_bak values('3','1','1');
     
    1 row inserted
    SQL> insert into cjw_test_bak values('4','1','1');
     
    1 row inserted
     
    SQL> commit;
     
    Commit complete
     
    SQL> insert into cjw_test select * from cjw_test_bak;
     
    insert into cjw_test select * from cjw_test_bak
     
    ORA-04091: table TBCS.CJW_TEST is mutating, trigger/function may not see it
    ORA-06512: at "TBCS.TRG_CJW_TEST", line 4
    ORA-04088: error during execution of trigger 'TBCS.TRG_CJW_TEST'
     
    SQL> 
  • 相关阅读:
    apache站点优化—静态缓存
    apache站点优化——长连接
    部署LAMP-WordPress站点上线
    hdu 5402 Travelling Salesman Problem (技巧,未写完)
    UVA 11419 SAM I AM (最小点覆盖,匈牙利算法)
    UVA 1175 Ladies' Choice 女士的选择(稳定婚姻问题,GS算法)
    HDU 5380 Travel with candy (贪心,单调队列)
    HDU 5381 The sum of gcd (技巧,莫队算法)
    UVALive 2238 Fixed Partition Memory Management 固定分区内存管理(KM算法,变形)
    hihoCoder #1196 高斯消元·二
  • 原文地址:https://www.cnblogs.com/dingyingsi/p/3358675.html
Copyright © 2011-2022 走看看