DDL命令即使失败也会提交事务

Onk*_*ari 1 sql database oracle

我运行了以下查询.

insert into emp(id,name) values(1,'ONKAR');
Run Code Online (Sandbox Code Playgroud)

然后我写了

Create table emp(id number(10));
Run Code Online (Sandbox Code Playgroud)

它失败了,因为emp表已经存在.

然后我跑了

rollback;
Run Code Online (Sandbox Code Playgroud)

然后

select * from emp;
Run Code Online (Sandbox Code Playgroud)

它返回1排.

我知道DML提交数据后的任何DDL命令.但是为什么即使DDL命令失败也要提交?

Bon*_*ist 10

这是因为Oracle 根据文档在DDL之前和之后发出提交:

在以下情况下,Oracle数据库会发出隐式COMMIT:

  • 在任何语法上有效的数据定义语言(DDL)语句之前,即使语句导致错误
  • 在完成没有错误的任何数据定义语言(DDL)语句之后