先删除数据,但是添加的时候出错,调用回滚
发现添加的都没加上,但是删除的却都删掉了.
问:是否可以将删除掉的数据也回滚?像这种问题,如何解决?

解决方案 »

  1.   

    begin
      delete from your_table;
      insert into your_table values (...);
      commit; -- 提交
    exception
      when others then
        dbms_output.put_line(sqlerrm); -- 顯示錯誤信息
         rollback; -- 回滾
    end;
      

  2.   

    新手,我不太懂oracle的事务是什么时候开始,什么样时候结束
    比如我分别删除5个表里的数据,再往5个表里加数据.事务是怎么开始的?删第一条数据的时候吗?
      

  3.   

    是的,從第一天DML語句開始一個新的事務
      

  4.   

    delete和insert之间不要执行ddl语句
      

  5.   

    事务结束
    1.commit或者rollback
    2.ddl或者dcl语句被执行(自动提交)
    3.用户退出
    4.系统中止
      

  6.   


    -- 測試數據的準備工作
    drop table test1;
    drop table test2;
    create table test1 (id1 number, name1 varchar2(20));
    create table test2 (id2 number, name2 varchar2(20));
    insert into test1 values (1, 'ab');
    insert into test2 values (2, 'cd');
    commit;-- 顯示操作前的數據
    select * from test1;
           ID1 NAME1                         
    ---------- ------------------------------
             1 ab  select * from test2;
           ID2 NAME2                         
    ---------- ------------------------------
             2 cd  begin
      -- 開始事務
      delete from test1 where id1 = 1;
      delete from test2 where id2 = 2;
      insert into test1 values (3, 'abccc');
      insert into test2 values ('ab','cd'); -- 製造錯誤 ORA-01722: invalid number
      commit; -- 提交事務
    exception
      when others then -- 捕獲異常
        dbms_output.put_line(sqlerrm);
        rollback; -- 回滾事務
    end;-- 操作後的數據
    select * from test1;
           ID1 NAME1                         
    ---------- ------------------------------
             1 ab select * from test2;
           ID2 NAME2                         
    ---------- ------------------------------
             2 cd  -- 可以看出,刪除掉的數據通過回滾事務而沒有真正刪除
      

  7.   

    我用php连接数据库,php操作oracle不是很好.