delete... 
之后,加上 commit; 提交.

解决方案 »

  1.   

    在对数据进行操作之后,Oracle 提交两种机制:1.回滚(rollback);2.提交(commit;)在删除记录的时候,没有进行 rollback 或 commit 的话,会把操作放到回滚段.
    所以执行删除,加上一个 commit; 就可以了.(上面的问题就不会发生)
      

  2.   

    可能是你的事务太大了,可以在delete语句后加commit试一下
      

  3.   

    先创建一个大的回滚段
    CREATE ROLLBACK SEGMENT rbs01
    TABLESPACE rbs
    STORAGE (
    INITIAL 5m
    NEXT 5m
    MINEXTENTS 10
    MAXEXTENTS 100
    OPTIMAL 50M );将该rollback segment online:
    alter rollback segment rbs01 online;要使该rollback segment 数据库启动时能够online,在初始化文件中加入:
    rollback_segments=(rbs01)然后更改你的qk:
    create or replace procedure qk
    as 
    begin
      set SET TRANSACTION USE ROLLBACK SEGMENT rbs01;   --指定使用大的回滚段    --全是删除数据的操作,数据表很多30多个
      delete from sc_bjlld;
       ...
       ...
       ...
    end qk;
      

  4.   

    create or replace procedure qk
    as 
    begin
      SET TRANSACTION USE ROLLBACK SEGMENT rbs01;   --指定使用大的回滚段    --全是删除数据的操作,数据表很多30多个
      delete from sc_bjlld;
       ...
       ...
       ...
    end qk;
      

  5.   

    create or replace procedure qk
    as 
    begin
      execute immediate 'truncate table sc_bjlld';
      execute immediate 'truncate table table2';
       ...
       ...
       ...
    end qk;
    另外如果你是要清空表里的所有记录,你也可以这样(使用动态SQL):(适用8.10及以上)
    create or replace procedure qk
    as 
    begin
      SET TRANSACTION USE ROLLBACK SEGMENT rbs01;   --指定使用大的回滚段    --全是删除数据的操作,数据表很多30多个
      delete from sc_bjlld;
       ...
       ...
       ...
     
       commit;  --最后提交
    end qk;
    这样做可以减少回滚段的压力
      

  6.   

    呵呵。谢谢各位,尤其是zzok1()。
    我在过程第一句中增加了
      SET TRANSACTION USE ROLLBACK SEGMENT aNewRollback;
    其中aNewRollback的初始大小为8M,增量也为8M
    结果令人满意。