[英]Oracle ROWNUM with DELETE and Looping
想知道是否有人可以為我確認下面的delete語句以及下面設置的循環。 我要執行的操作是刪除CREATED_DATE的日期超過90天的記錄,但一次僅刪除1k條記錄。 如果正確,我計划將其放入下面列出的循環中。 使用ROWNUM時,我遇到了不同的結果,只是想確認一下。
DELETE from
(select * from ESPADMIN.ESP_STATUS_MESSAGE where CREATED_DATE <SYSDATE-90)
WHERE ROWNUM <1001 ;
commit;
LOOP
DELETE from
(select * from ESPADMIN.ESP_STATUS_MESSAGE where CREATED_DATE <SYSDATE-90)
WHERE ROWNUM <1001 ;
commit;
END LOOP;
您可能想要類似的東西:
DECLARE
cnt INT;
BEGIN
SELECT COUNT(*) -- 0/1
INTO cnt
FROM dual
WHERE EXISTS (SELECT 1
FROM ESPADMIN.ESP_STATUS_MESSAGE
where CREATED_DATE <SYSDATE-90);
WHILE (cnt > 0) LOOP
DELETE ESPADMIN.ESP_STATUS_MESSAGE
where CREATED_DATE <SYSDATE-90
AND rownum < 1001;
COMMIT;
SELECT COUNT(*)
INTO cnt
FROM dual
WHERE EXISTS (SELECT 1
FROM ESPADMIN.ESP_STATUS_MESSAGE
where CREATED_DATE <SYSDATE-90);
END LOOP;
END;
編輯:
我將您的示例重寫為:
BEGIN
LOOP
DELETE from (select *
from ESPADMIN.ESP_STATUS_MESSAGE where CREATED_DATE <SYSDATE-90)
WHERE ROWNUM <1001 ;
EXIT WHEN sql%ROWCOUNT = 0;
commit;
END LOOP;
COMMIT;
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.