登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞哥的技术博客

世上无难事,只怕有心人!

 
 
 

日志

 
 
 
 

oracle自治事务的学习   

2009-06-23 20:18:04|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 那当insert append C在一个事务的当中,其他语句要在一个事务中执行,如果其他事务回滚掉,
而同事要求insert又要commit,怎么办?
insert A
update B
insert append C
delete D
update E
ABDE要在一个事务中

对insert append C操作使用oracle的自治事务功能,测试过程如下:
测试:
drop table tt;
create table tt
as
select * from all_col_comments;

create procedure bb is
begin
insert into tt(owner,table_name,column_name,comments)values('dm','aa','aa','ssss');
update tt
  set  tt.comments='ssssss'
 where tt.owner='SYS';
inserttt();
delete from tt;
rollback;
end bb;

CREATE PROCEDURE inserttt AS
 PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert /*+ append*/into aa
select * from temp;
commit;
END inserttt;

SQL> select count(*) from aa;
  COUNT(*)
----------
1355173

SQL> select count(*) from temp ;
  COUNT(*)
----------
    104169

--执行存储过程:
begin
bb();
end;

SQL>  select count(*) from aa;
  COUNT(*)
----------
   1459342
  
  
1459342-1355173=104169(正好等于批量插入的数据量,即存储过程inserttt插入的数据量)

  评论这张
 
阅读(540)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018