触发器是可以做到你这样的,
只是实现起来很烦,
需用到行级触发器+语句级触发器+包变量或是临时表。
只是你的目的是什么,如果A表仅仅是用来做临时表的话,可以用oracle中的临时表,

解决方案 »

  1.   

    因为数据量很大,记录直接写入B表的话,表数据会变的很大,客户端应用连接B表就会变的很慢。
    to ATsuwu(苏武) :老兄说的没错,我的A表只是临时用一用而已,但oracle的临时表不知道具体怎么用
      

  2.   

    09:41:28 SQL> create global temporary table tbtemp
    09:41:46   2  (rid varchar2(20)) on commit delete rows;表已创建。已用时间:  00: 00: 00.78
    09:42:44 SQL> create or replace trigger trg_tb 
    09:42:58   2  after insert on tb
    09:42:59   3  for each row
    09:42:59   4  begin
    09:43:00   5  insert into tbtemp values(:new.rowid);
    09:43:18   6  end trg_tb;
    09:43:21   7  /触发器已创建已用时间:  00: 00: 00.94
    09:43:22 SQL> create or replace trigger trg_tb_2
    09:43:56   2  after insert on tb
    09:44:02   3  begin
    09:44:04   4  delete from tb where rowid in (select rid from tbtemp);
    09:45:03   5  end trg_tb_2;
    09:45:09   6  /触发器已创建已用时间:  00: 00: 00.16
    09:45:09 SQL> select * from tb;COL1       COL2                           COLNEW
    ---------- ------------------------------ --------------------
    1          aaa                            aaa
    2          aaa                            aaa
    3          aaa                            aaa
    4          bba                            bba
    5          bbb                            bbb
    6          bbb                            bbc
    7          bbb                            bbd
    8          bbb                            ccc
    9          bbb                            TEMP
    10         bbb                            ddd已选择10行。已用时间:  00: 00: 00.16
    09:45:15 SQL> insert into tb values('11','c','c');已创建 1 行。已用时间:  00: 00: 00.78
    09:45:25 SQL> select * from tb;COL1       COL2                           COLNEW
    ---------- ------------------------------ --------------------
    1          aaa                            aaa
    2          aaa                            aaa
    3          aaa                            aaa
    4          bba                            bba
    5          bbb                            bbb
    6          bbb                            bbc
    7          bbb                            bbd
    8          bbb                            ccc
    9          bbb                            TEMP
    10         bbb                            ddd已选择10行。已用时间:  00: 00: 00.31
    09:45:29 SQL> commit;提交完成。已用时间:  00: 00: 00.16
    09:46:12 SQL> 说明刚插入的数据已经被删除。
    只需要在trg_tb_2中delete语句前加上
    insert into b select * from a where rowid in(select rid from tbtemp);
    即可。
    达到目的。
      

  3.   

    可以使用替代触发器.
    create or replace trigger trg_vw_table instead of insert or update or delete on vw_table
      

  4.   

    to bzszp(SongZip) :这样好像不行吧?
    执行有错误。
      

  5.   

    to bzszp(SongZip:要不我在QQ请教你吧。这里交流好像不是很方便。
    我的QQ:8408787