專案中有個需求需要每個月末定時去刪除一張表裡的歷史資料,
剛開始就寫了乙個簡單的delete語句,然後起乙個job定時去呼叫,
後來被告知歷史資料量很大,所以從效能和安全上考慮對sql進行了如下修改:
declare cursor id_key_cursor is
select id_key
from x_table
where x_column = "***"
begin
for v_to_del in id_key_cursor loop
delete x_table
where id_key = v_to_del.id_key
if mod(id_key_cursor%rowcount, 5000) = 0
then commit;
end if;
end loop;
commit;
end;
將處理的資料每5000筆提交一次,分批處理;
id_key可以是x_table的主鍵,也可以是row_id;
上面的方法使用了游標,迴圈開啟游標會影響一定的效能
下面是一種效率更高的方法
begin
loop
delete from table_name
where column_name = '***'
and rownum <=5000;
exit when sql%notfound;
commit;
end loop;
end;
oracle批量刪除表
如下 declare 定義臨時變數用於儲存每一條刪除sql tmp sql varchar2 4000 定義游標變數用於儲存所有的刪除sql cursor drop sql is 查詢拼接出所有刪除sql select drop table table name from user tables w...
ORACLE批量刪除表
我們在使用資料庫時可能會建立很多臨時表,時間長了這些臨時表會佔很大的空間所以我們要定期對自己不用的臨時表進行清理,下面介紹兩個我自己經常用的語句 方法一 簡單粗暴 通俗易懂 select drop table table name from user tables where table name ...
oracle 批量刪除注釋和恢復
專案上線後,由於一些原因.我們要刪除開發時資料庫中的注釋欄位.這裡簡單起見,只需要執行簡單的兩三句.因為oracle是有張表來管理注釋.一.先備份字段注釋.以便以後dmp資料有注釋.plsql執行 select comment on column t.table name t.column name...