那当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插入的数据量)