回复 2# doni
楼主的DDL语句在语法上就不能通过,所以执行了DDL后还有事务可回滚!在DDL语法正确的情况下,无论DDL是否执行成功,都会自动提交之前的所有事务,而且再也无法回滚!试试以下语句:
--先保证数据表中有数据行
SQL> INSERT INTO PLANTS VALUES(1, 'African Violet');
已创建 1 行。
SQL> commit;
提交完成。
--再执行DDL对事务的影响
SQL> INSERT INTO PLANTS VALUES(2, 'African');
已创建 1 行。
SQL> alter table PLANTS modify common_name number;
alter table PLANTS modify common_name number
*
ERROR 位于第 1 行:
ORA-01439: 要更改数据类型,则要修改的列必须为空 (empty)
SQL> SELECT * FROM PLANTS;
PLANT_ID COMMON_NAME
---------- ---------------
1 African Violet
2 African
SQL> rollback;
回退已完成。
SQL> SELECT * FROM PLANTS;
PLANT_ID COMMON_NAME
---------- ---------------
1 African Violet
2 African
虽然提示回滚已完成,但是实际上是因为没有事务可回滚。在DDL前后分别加入SELECT name FROM V$TRANSACTION;就可以看到是否有事务了。
页:
1
[2]