您可以使用会话临时表来保存前 10 个 tid(元组 id),然后根据这些删除:
declare global temporary table session.tenrows as
select first 10 tid the_tid from "table" where web_id<0
on commit preserve rows with norecovery;
delete from "table" where tid in (select the_tid from session.tenrows);
当您说“没有过载数据库”时,您的意思是避免达到事务日志文件的强制中止限制吗?如果是这样,可能对您有用的是:
set session with on_logfull=notify;
delete from table where web_id<0;
这将在达到强制中止然后继续的点自动提交您的事务,而不是回滚并报告错误。使用此设置的一个缺点是,如果发生任何其他错误(您的工作可能会部分提交),取消选择已完成/未完成的操作可能会很棘手,但因为这似乎是从表中直接删除应该很明显哪些行保留,哪些不保留。“设置会话”语句必须在事务开始时运行。我建议不要使用“on_logfull=notify”运行并发会话(这方面存在错误,它们是否在您的安装中得到修复取决于您的版本/补丁级别)。