现在有两个表A和B,B是要create的表,在create table B之前,我对A的数据进行了update,那么create table B以后是否会将对A的update的事务自动commit?如果create B的时间很长,那么事务的提交是在create之前还是之后呢?以上代码是在一个存储过程之中,应该是在同一session内。

解决方案 »

  1.   


    不是create table b以后对update的事务自动commit,而是在开始create 操作之前就已经提交了事务
      

  2.   

    在执行的同时就提交了事物..
    可以理解为执行create table之前自动执行了commit;
      

  3.   

    12.15   什么是ORACLE数据库的事务(Transactions)为了有效地控制事务(Transactions),ORACLE引入了两个显式的事务(Transactions)控制命令(语句)。一个是COMMIT,另一个是ROLLBACK。ORACLE数据库的事务(Transactions)可由:Ø        一个或多个DML语句组成。
    Ø        一个DDL语句组成。
    Ø        一个DCL语句组成。那么如何标识一个事务(Transactions)呢?因为ORACLE公司在开始时是瞄准联机事务处理(OLTP)的,所以它对事务处理提供了强有力的支持。ORACLE可以自动地标识一个事务(Transactions)。ORACLE的一个事务是以第一个可执行的SQL语句开始。当下列事件之一发生时结束。1.        用户执行了COMMIT语句(提交)。
    2.        用户执行了ROLLBACK语句(回滚)。
    3.        用户执行了DDL语句(自动提交)。
    4.        用户执行了DCL语句(自动提交)。
    5.        用户正常退出SQL*PLUS(自动提交)。
    6.        用户非正常退出SQL*PLUS(自动回滚)。
    7.        系统崩溃,包括硬件或软件故障(自动回滚)。作为一位ORACLE的专业人员,你应该尽可能地使用COMMIT和ROLLBACK语句来显式地控制事务的提交和回滚。因为使用从3到7的隐显式事务控制特性有时可能产生意想不到的结果。现在我们可以使用这两个语句把12.14节中在银行的自动提款机(ATM)上那些逻辑上相关的操作集成为一个事务。这些逻辑上相关的操作要么全部完成(提交),要么全部放弃(回滚)。摘自:“从实践中学习Oracle/SQL”, 清华大学出版社出版。
      

  4.   

    另外仍然有一个问题,create table as select * from...是否也属于DDL语句?
      

  5.   

    记得好像再那里看到过ddl的自动提交过程如下:
    1 commit;
    2 ddl
    3 commit;
    所以ddl语句即使报错也会提交.