我有两个表(A表和B表),机构完全相同:A 表建立触发器
当insert into A(id,name) values('1','zhangsan'); 我只想将name=zhangsan的时候将insert语句插入到B表中而A表不执行操作这个触发器应该怎么实现呢?
如:
  if :nve.name=‘zhangsan' then
    insert into B(id,name) values(:nve.id,:nve.name);
  end if;
可是像我这么写这两个表都有数据呀,我只想让B表中有数据而A表没有,这个触发器应该怎么写呢,谢谢给位了

解决方案 »

  1.   

    你可以在AB的基础上建个视图,在视图上加instead of触发器,当insert视图的时候,选择是插A表还是B表。
      

  2.   


    create table a (id number, name varchar2(30));
    create table b (id number, name varchar2(30));create view va as
    select id, name from a;create or replace trigger trig_va
    instead of insert on va
    for each row
    begin
        if :new.name = 'zhangsan' then
            insert into b values (:new.id, :new.name);
        else
            insert into a values (:new.id, :new.name);
        end if;
    end;insert into va values (1, 'zhangsan');
    insert into va values (2, 'lisi');select * from a;
            ID NAME                                         
    ---------- ---------------------------------------------
             2 lisi  select * from b;
            ID NAME                                         
    ---------- ---------------------------------------------
             1 zhangsan 這是ora-04091 table is mutating trigger function may not see it的問題,比較難處理。
    現在還在研究不用視圖能否實現。
      

  3.   

    create table a (id number, name varchar2(30));
    create table b (id number, name varchar2(30));create view va as
    select id, name from a;create or replace trigger trig_va
    instead of insert on va
    for each row
    begin
        if :new.name = 'zhangsan' then
            insert into b values (:new.id, :new.name);
        else
            insert into a values (:new.id, :new.name);
        end if;
    end;
      

  4.   

    你可以在AB的基础上建个视图,在视图上加instead of触发器,当insert视图的时候,选择是插A表还是B表。