我有桌子,有26列,大小为1TB。我试图使用以下存储过程随机删除此表中的记录:
declare cnt number;
BEGIN
FOR x IN 1 .. 2 LOOP
SELECT RUN_VER_ISSUE_ID into cnt FROM MV_RUN_VER_IES SAMPLE (0.00091) WHERE ROWNUM <=1;
DELETE FROM MV_RUN_VER_IES WHERE RUN_VER_ISSUE_ID = cnt;
END LOOP;
commit;
END;
/
但问题是上面的循环只是进入无限执行循环而永远不会完成。我不确定我在这里做错了什么。我之所以这么说,当我执行这个SQL时:
SELECT RUN_VER_ISSUE_ID FROM MV_RUN_VER_IES SAMPLE (0.00091) WHERE ROWNUM <=1;
它在几分之一秒内执行。此列 RUN_VER_ISSUE_ID 也是表格中的主键列。
更新
不确定原因,但是这个脚本正在完成工作而没有任何问题:
VARIABLE cnt integer;
BEGIN
FOR x IN 1 .. 4000 LOOP
SELECT RUN_VER_ISSUE_ID into :cnt FROM MV_RUN_VER_IES SAMPLE (0.00091) WHERE ROWNUM <=1;
DELETE FROM "ABHINAV"."MV_RUN_VER_IES" WHERE "RUN_VER_ISSUE_ID" = :cnt;
END LOOP;
commit;
END;
答案 0 :(得分:0)
请获取cnt的实际值,
监视执行计划(不要真正执行sql)
您可以使用解释计划
然后从表中查询select *(dbms_xplan.display());
执行计划。 如果执行计划真的显示了主要关键
请真正执行sql,
然后查询v $ session_wait以获取此会话的等待事件