【sql请教】DDL语句不能自动回滚
SQL*Plus: Release 11.1 Production on Sat Mar 31 10:17:13 2012SQL> conn t3/abc
Connected.
SQL> CREATE TABLE plants
( plant_id NUMBER PRIMARY KEY,
common_name VARCHAR2(15) );2 3
Table created.
SQL> INSERT INTO plants VALUES (1, 'African Violet');
1 row created.
SQL> ALTER TABLE plants ADD (selectVARCHAR2(40) );
ALTER TABLE plants ADD (select VARCHAR2(40) )
*
ERROR at line 1:
ORA-00904: : invalid identifier
SQL> select * from plants; -----------上面的DDL错误后,应该会自动产生一个ROLLBACK吧,为什么还能查到数据?
PLANT_ID COMMON_NAME
---------- ------------------------------
1 African Violet
SQL> rollback; -------------------还得手工地ROLLBACK,这是为什么
Rollback complete.
SQL> select * from plants;
no rows selected
SQL> 不会自动rollback,而且如果alter成功的话,会自动commit DML语句才有手动提交的问题,DDL语句没有! 回复 2# doni
If the ALTER TABLE statement succeeds, then the database
commits this statement; otherwise, the database rolls back this statement. In either case
the two INSERT statements have already been committed.------otherwise的意思是否则吗?否则应该就会回滚这个insert吧,而且两种情况下,都会提交?我不知道是不是这样翻译的,但这样翻译明显有逻辑问题
是不是与ORACLE的版本有关系,我用的是11.1G,这个concept是11.2g的 本帖最后由 doni 于 2012-04-01 15:26 编辑
回复 4# smalltom30
不知道上下文是如何的,单独看这段this statement应该是指alter table,
所以rolls back是指atler table(不过这段是有点别扭,本身就没成功,也没什么可rollback) 回复 6# doni
没有什么可回滚吗?不是吧
下面不是扫描到了数据吗?
SQL> select * from plants; -----------上面的DDL错误后,应该会自动产生一个ROLLBACK吧,为什么还能查到数据?
PLANT_ID COMMON_NAME
---------- ------------------------------
1 African Violet
如果回滚了,结果就应该是这样:no rows selected
回复 7# smalltom30
我不是讲你的例子,是讲这段英文 ddl之前也有隐含的commit 回复 9# Minsic
目前我做的这个测试就是因为这个隐含的commit没有生效
页:
[1]
2