1. 如果DDL语法正确,即使执行失败,也会导致隐式提交:
duzz$scott@orcl>create table t1 as select * from dept;
Table created.
Elapsed: 00:00:00.03
duzz$scott@orcl>update t1 set loc='xx' where deptno=10;
1 row updated.
Elapsed: 00:00:00.03
duzz$scott@orcl>drop table xx;
drop table xx
*
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.01
+++++++++++++++++++++++++++++++++++++++++++++++++++++
duzz$sys@orcl>select * from scott.t1;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING xx
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Elapsed: 00:00:00.01
2. 如果DDL语法错误,则不会导致隐式提交,亦不会自动回滚事务:
duzz$scott@orcl>update t1 set loc='yy' where deptno=20;
1 row updated.
Elapsed: 00:00:00.00
duzz$scott@orcl>drop table col xx;
drop table col xx
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
Elapsed: 00:00:00.00
+++++++++++++++++++++++++++++++++++++++++++++++++++++
duzz$sys@orcl>select * from scott.t1;
DEPTNO DNAME LOC
---------- ------------------------------------------ ---------------------------------------
10 ACCOUNTING xx
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Elapsed: 00:00:00.00
总结:
DDL伪代码:
Begin
Parse DDL;
Commit;
Do DDL;
Exception
When others then
Null;
End;
Ref:
本文探讨了Oracle数据库中DDL(数据定义语言)操作对于事务的影响。通过具体示例展示了DDL执行成功与否对隐式提交及事务状态的作用,并附带了相关伪代码,帮助读者理解DDL如何与事务管理交互。
2083

被折叠的 条评论
为什么被折叠?



