oracle批量刪除

2021-08-08 17:47:07 字數 838 閱讀 3015

專案中有個需求需要每個月末定時去刪除一張表裡的歷史資料,

剛開始就寫了乙個簡單的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...