Oracle的autocommit永远是false.
但是在执行DDL操作之后,会隐式提交,所以DDL操作不能回滚。
其实在DDL操作之前,也有一个隐式提交
测试如下代码:
-
create table test(id int);
-
create table t1(id int);
-
-
declare
-
begin
-
insert into test values(10);
-
execute immediate 'create table t1(id int);';
-
rollback;
-
end;
-
/
新建一个表test和t1,在代码中向test表插入一行,然后动态SQL建表。
因为t1表已经存在,所以动态SQL建表将报错,模拟DDL运行异常的情况。
这个时候进行回滚,是不能撤销test表中插入的数据的。
因为在DDL运行之前,已经隐式的提交了事物。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1076352/
,如需转载,请注明出处,否则将追究法律责任。