RT,用其他的语句放在事务中出错后都能正常回滚。但一遇到alter语句就自动提交了,不管后面的有没有出错都不rollback了,可惜敝人偏偏要在一个事务中应用大量的alter语句,也要用回滚保证数据一致性,我要怎么做?请老大们指教指教!不胜感谢!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    就是说让你的业务不在一个事务中同时使用dml和ddl。
    也可以尝试用自治事务解决。
      

  2.   

    比如说我有两张表:
    tableinfo
    fieldinfo
    一张存储表基本信息(序号,表名等等)
    一张存储各表字段信息(字段名、数据类型、长度等等)
    要做一个东东就是:
    做个界面可以动态更改这些信息,点提交按钮后做3件事:
    1、更改tableinfo表里相关记录的内容(比如表ID是T001的表中文名(表中的一个字段))(update)
    2、更改fieldinfo表里相关记录的内容(比如表ID是T001的F001字段的数据长度信息)(update)
    3、改表,把实际表T001里F001字段的数据长度更新为新长度(alter)感觉必须要放在一个事务里啊,不然fieldinfo里成了number(30)但实际表中还是number(10),那怎么同步啊?不是出现数据不一致性了么?!具体怎么搞?有例子么?分不够再加,我初学的。
      

  3.   

    有必要这样弄吗?
    界面显示可以从dba_tables和dba_tab_columns中获取信息。
    用户修改时,即执行alter table语句。
      

  4.   

    自治事务(autonomous transaction)允许你创建一个“事务中的事务),它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前执行事务的状态这个具体得找书看看了,不是一句两句能说明白的。
      

  5.   

    我8L说的方法不能满足LZ的要求吗?
      

  6.   


    修改应用,ddl语句是回滚不了的,
      

  7.   

    最好的办法是,将ddl语句alter改成 dml语句。