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