我正面临从名为 links_data 的表中删除记录集的问题,因为要删除大量数据并且 Oracle DB 的临时空间不足。
同样,我对存储过程知之甚少,我编写了以下代码。但是存储过程看起来也运行得很慢。
场景是我需要删除 links_data 表中的行,其中 links_data 表中的 nm_folder 列与 link_folders 表具有外键关系。link_folders 表中的 nm_folder 是主键,我打算一次删除 10000 条记录并提交,然后再次删除 10000 条记录并提交。
请任何人帮助我优化此查询。感谢和问候,
Declare
Type ty_link_floder is table of number;
tble_id_folder ty_link_floder;
Cursor c_data is
select id_folder from link_folders where nm_folder='User Hotlist';
Begin
OPEN c_data;
LOOP
FETCH c_data
BULK COLLECT INTO tble_id_folder LIMIT 10000;
EXIT WHEN tble_id_folder.count = 0;
FORALL i IN tble_id_folder.first .. tble_id_folder.last
DELETE FROM links_data
WHERE id_folder = tble_id_folder(i);
COMMIT;
-- Process contents of collection here.
DBMS_OUTPUT.put_line(tble_id_folder.count || ' rows deleted from links_data table so far');
tble_id_folder.delete;
END LOOP;
CLOSE c_data;
Exception
When others Then
Commit;
Raise;
End;