| 之前我对于ddl的隐式提交也仅限于ddl操作成功,则隐式提交。看了这篇文章,然后试了一下( Oracle 10.2.0.5.0 - 64bit),确如文章中所述。MARK~ |
来自:http://itspace.iteye.com/blog/1000379
文章分类:数据库Oracle ddl通过语法检查,但对象不存在。
在一号会话中:引用SQL> select * from zhoul;
I NAME
---------- --------------------
1 bbb
2 bbb
3 bbb
SQL> update zhoul set i=1*8 where i=1;
1 row updated.
发布一条符合ddl语法的语句,只是表格yuiyiuyiuyui不存在引用SQL> drop table yuiyiuyiuyui;
drop table yuiyiuyiuyui
*
ERROR at line 1:
ORA-00942: table or view does not exist
在二号会话中查看事务已经提交:引用SQL> select * from zhoul;
I NAME
---------- --------------------
8 bbb
2 bbb
3 bbb
经过以上测试,可以看出对于ddl语句,只要经过语法检查,还会进行隐式提交。
Oracle ddl通过语法检查,但对象没有相应权限在一号会话中:
引用SQL> select * from zhoul;
I NAME
---------- --------------------
1 bbb
2 bbb
3 bbb
SQL> select count(*) from sys.testddl;
COUNT(*)
----------
10
SQL> update zhoul set i=1*8 where i=1;
1 row updated.
没有drop sys.testddl对象权限引用SQL> drop table sys.testddl;
drop table sys.testddl
*
ERROR at line 1:
ORA-01031: insufficient privileges
在二号会话中查看事务已经提交:引用SQL> select * from zhoul;
I NAME
---------- --------------------
8 bbb
2 bbb
3 bbb
如果ddl语句不通过语法检查,那会出现什么情况呢?在一号会话中:引用SQL> select * from zhoul;
I NAME
---------- --------------------
1 bbb
2 bbb
3 bbb
SQL>
SQL> update zhoul set i=1*8 where i=1;
1 row updated.
发布一条不符合语法的ddl语句引用SQL> drop tablw dss;
drop tablw dss
*
ERROR at line 1:
ORA-00950: invalid DROP option
在二号会话中可以看到并没有进行隐式提交。引用SQL> select * from zhoul;
I NAME
---------- --------------------
1 bbb
2 bbb
3 bbb
ddl总是提交在它之前正在进行的工作,从伪代码角度来讲,ddl进行如下处理:
begin
commit;
parse the ddl --verify privileages and syntax
begin
do_the_ddl;
commit;
exception
when others then
rollback;
end;
end;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23650854/viewspace-697662/ ,如需转载,请注明出处,否则将追究法律责任。