ORACLE中:
insert into table1;
insert into table2;
insert into table3 select * from table2;
insert into table3 select * from table1;我想要的结果是:table3 commit
table1,table2 rollback
要怎么做?

解决方案 »

  1.   

    直接插入到table3里不就得了,
      

  2.   

    能直接插的话就不想那么多问题了,
    我只是举的一个例子,
    实际中比这个复杂还有就是,不COMMIT,也不ROLLBACK,下次我读这个表时有没有数据?
      

  3.   

    commit了 然后在把TABLE1和TABLE2给TRUNCATE就可以了
      

  4.   

    你把需要插入到table3的数据直接做一下关联直接插入即可,不用这么多步骤。你的前两个语句后边应该还有东西吧
      

  5.   

    1 commit语句提交当前未提交的所有请求;
    2 可以设置savepoint来将当前操作回滚到以前某个未提交的保存点,一旦提交就不能再回滚了;
    3 所以oracle不能通过事务控制实现提交最后的修改后再回滚之前的操作的功能,sqlserver也不可以;
    4 如果之想取消commit之前某些操作,可以通过灵活设置保存点进行回滚操作,但是如果想要只保留最后操作再回滚之前的操作只能通过dml语句进行反向操作了如:
    假设a为主键
    insert into table1 select a,b from table_source;
    insert into table_result select a,b from table1;
    delete table1 where exists (select 1 from  table_source where table_source.a = table1.a);
    commit;
      

  6.   

    savepoint问题可以解决部分问题,但是遇到循环的话就不好解决了