我运行了以下查询。
insert into emp(id,name) values(1,'ONKAR');
然后我写了
Create table emp(id number(10));
失败,因为emp表已经存在。
然后我跑了
rollback;
然后
select * from emp;
它返回1行。
我知道DML之后的任何DDL命令都会提交数据。但是,为什么即使DDL命令失败也要提交?
答案 0 :(得分:10)
这是因为Oracle按照the documentation在DDL之前和之后都发出了提交:
在以下情况下,Oracle数据库发出隐式COMMIT:
- 在语法上有效的数据定义语言(DDL)语句之前,即使该语句导致错误
- 在任何没有错误的情况下完成的数据定义语言(DDL)语句之后