【发布时间】:2020-07-13 08:27:40
【问题描述】:
我需要以最快的方式从 50 条记录中删除 2000 万条记录。我尝试使用下面的循环来完成这项工作:
LOOP
DELETE FROM dssoti.appt_purge WHERE to_date(substr(apntmt_dt,0,9)) < '01-JAN-17' AND ROWNUM < 200000;
EXIT WHEN SQL%ROWCOUNT = 0;
COMMIT;
END LOOP;
但是当我执行它时它不会循环,它只会删除 199,999 条记录。我在这里做错了什么?我正在使用 oracle SQL 开发人员版本 18
【问题讨论】:
-
你为什么要把删除放在一个循环中?你在执行其他逻辑吗?
-
另外,还有一篇关于如何快速删除东西的 AskTom 文章。看看:AskTOM。它特别警告您的循环构造。
-
只是为了清楚。您是说循环内的代码执行一次?你怎么知道的?
-
执行脚本输出后显示“已删除 199,999 条记录”,当我计算记录以确认其准确无误时。
-
完全没有循环,因为满足条件,它会一次性删除。您想逐条删除还是说每 100000 条记录或您喜欢的任何数字?
标签: oracle loops delete-row large-data-volumes