smalltom30 发表于 2012-03-31 10:29

【sql请教】DDL语句不能自动回滚

SQL*Plus: Release 11.1 Production on Sat Mar 31 10:17:13 2012
SQL> 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>

doni 发表于 2012-03-31 17:27

不会自动rollback,而且如果alter成功的话,会自动commit

moon38sun 发表于 2012-03-31 19:04

DML语句才有手动提交的问题,DDL语句没有!

smalltom30 发表于 2012-04-01 09:49

回复 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吧,而且两种情况下,都会提交?我不知道是不是这样翻译的,但这样翻译明显有逻辑问题

smalltom30 发表于 2012-04-01 09:57

是不是与ORACLE的版本有关系,我用的是11.1G,这个concept是11.2g的

doni 发表于 2012-04-01 15:25

本帖最后由 doni 于 2012-04-01 15:26 编辑

回复 4# smalltom30


    不知道上下文是如何的,单独看这段this statement应该是指alter table,
   所以rolls back是指atler table(不过这段是有点别扭,本身就没成功,也没什么可rollback)

smalltom30 发表于 2012-04-01 18:11

回复 6# doni


   没有什么可回滚吗?不是吧
下面不是扫描到了数据吗?
SQL> select * from plants;   -----------上面的DDL错误后,应该会自动产生一个ROLLBACK吧,为什么还能查到数据?

PLANT_ID COMMON_NAME
---------- ------------------------------
         1 African Violet
如果回滚了,结果就应该是这样:no rows selected



doni 发表于 2012-04-02 22:38

回复 7# smalltom30


    我不是讲你的例子,是讲这段英文

Minsic 发表于 2012-04-06 17:27

ddl之前也有隐含的commit

smalltom30 发表于 2012-04-07 09:21

回复 9# Minsic


   目前我做的这个测试就是因为这个隐含的commit没有生效
页: [1] 2
查看完整版本: 【sql请教】DDL语句不能自动回滚