有一个过程:语句1: drop table temp
语句2: create table temp as select ........我想要在当语句2出错的时候,语句1回滚,但是我用事物处理没有效果,难道事物处理对drop 无效?有无其他的办法?谢谢!

解决方案 »

  1.   

    Oracle在任何DDL(create,建表)语句之前和之后发布一个隐式的提交.所以即使你的DDL
    语句执行不成功,你也不能回退前面的语句,因此服务器已经发布提交命令.
    执行commit或rollback语句来明确地结束事务.
      

  2.   

    事务似乎只对DML语句有效如果是10g的话,可以用flashback table 处理,但这些是DBA处理才对
      

  3.   

    drop没有回滚操作。
    10g后有快速恢复可以恢复删除的表。
      

  4.   

    DROP, CREATE, ALTER 是DDL语句,内置了COMMIT操作。一旦执行成功就不能回滚。
      

  5.   

    变通方法就是flashback table xxx to before drop;
    :D
      

  6.   

    使用:create or replace table temp as select ........ 如果语句错误,可能不会删除原表。因手边没有环境,请楼主自已测试一下。
      

  7.   

    语句1: drop table temp 
    语句2: create table temp as select ........ 
    看你是先删除,在创建,其实要处理的只是数据而已,何不换种方式,
    只删除数据,保留表呢,可以改成如下1. delete from table temp
    2. insert into temp select .....