commit问题

niexiancheng 2007-04-05 11:39:07
ORACLE中:
insert into table1;
insert into table2;
insert into table3 select * from table2;
insert into table3 select * from table1;

我想要的结果是:table3 commit
table1,table2 rollback
要怎么做?
...全文
231 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
niexiancheng 2007-04-16
  • 打赏
  • 举报
回复
savepoint问题可以解决部分问题,但是遇到循环的话就不好解决了
niexiancheng 2007-04-06
  • 打赏
  • 举报
回复
不提交的话,数据是放到回滚段里还是?数据什么时候会失效?
worldly_wind 2007-04-05
  • 打赏
  • 举报
回复
你把需要插入到table3的数据直接做一下关联直接插入即可,不用这么多步骤。你的前两个语句后边应该还有东西吧
wangzk0206 2007-04-05
  • 打赏
  • 举报
回复
commit了 然后在把TABLE1和TABLE2给TRUNCATE就可以了
Paladin_china 2007-04-05
  • 打赏
  • 举报
回复
做事务控制啊。
niexiancheng 2007-04-05
  • 打赏
  • 举报
回复
能直接插的话就不想那么多问题了,
我只是举的一个例子,
实际中比这个复杂

还有就是,不COMMIT,也不ROLLBACK,下次我读这个表时有没有数据?
bjt_ 2007-04-05
  • 打赏
  • 举报
回复
直接插入到table3里不就得了,
adaizi1980 2007-04-05
  • 打赏
  • 举报
回复
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;
niexiancheng 2007-04-05
  • 打赏
  • 举报
回复
我的意思就是有一些表我要更新,有些表的数据也改了,但我不想更新

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧