晕,应该是一次性取出所有记录,然后一次性删除所有。操作这2次是必要的。
当然,如果使用存储过程,
可以将这2次并起来。
所以解决办法很简单,
写个存储过程,一次取出所有记录做为返回值,然后删除所有记录。
还有一个,就是,使用ORACLE的话,DELETE可以有一个RETURNING子句,返回删除记录的某个字段或全部字段值。

解决方案 »

  1.   

    给你写个例子:
    给你个例子:
    drop table testTable;
    create table testTable (id number, testResult varchar2(200));
    insert into testTable (id, testResult) values(1, 'test 1');
    insert into testTable (id, testResult) values(2, 'test 2');
    insert into testTable (id, testResult) values(3, 'test 3');
    insert into testTable (id, testResult) values(4, 'test 4');
    commit;CREATE OR REPLACE FUNCTION 
        t(param number) RETURN VARCHAR2
    IS 
      result VARCHAR2(200);
    BEGIN
      delete from testTable where id=param returning testResult into result;
      commit;
      return (result);
    END;
    /直接在SQL*PLUS中运行,会建立一张测试用的表,和一个FUNCTION,
    这个FUNCTION的作用是,删除你要删除的行,并返回该行的一个叫testResult字段的值,
    传入参数是要删除行的id,
    你可以运行下看效果。这个确实是只用一句就搞定的,
    对于你的情况,会这样,一次DELETE所有记录,然后RETURNING所有记录到一个打开的游标,
    然后返回该游标。
    对于这样的大批量的数据库集中操作,使用存储过程是一个比较好的选择。