我們設計了乙個自動分割槽的超級大表,分割槽採用以時間分割槽的方式,結果資料爆掉了,沒辦法必須刪除其中比較早的分割槽資料,我設計了乙個儲存過程完成這個過程,
create or replace procedure ice_drop_partitions(datebefore in date, tablename in varchar2) as
partitionname varchar2(20);
v_sql varchar2(1024);
temp varchar2(1024);
temp_d date;
v_temp varchar2(1024);
v_cs varchar2(1024);
v_error varchar2(1024);
cursor cur_partition is
select t.partition_name,t.high_value from user_tab_partitions t where t.table_name=tablename order by t.last_analyzed desc;
begin
for for_partition in cur_partition loop
begin
v_temp := 'select to_char('||for_partition.high_value||',''yyyy-mm-dd'') from dual';
execute immediate v_temp into temp ;
select to_date(temp,'yyyy-mm-dd') into temp_d from dual;
if (temp_ddatebefore in date, tablename in varchar2
這兩個引數分別是,
datebefore :刪除幾號以前的資料,
tablename :分割槽所在的表
其中用到了游標:
cursor cur_partition is
select t.partition_name,t.high_value from user_tab_partitions t where t.table_name=tablename order by t.last_analyzed desc;
這個是遍歷user_tab_partitions ,找到指定表名的所有分割槽,
v_temp := 'select to_char('||for_partition.high_value||',''yyyy-mm-dd'') from dual';
execute immediate v_temp into temp ;
select to_date(temp,'yyyy-mm-dd') into temp_d from dual;
這個是找到分割槽的條件,實質就是for_partition.high_value就是乙個
寫道to_date(' 2010-06-02 00:00:00', 'syyyy-mm-dd hh24:mi:ss', 'nls_calendar=gregorian')
類似這種的存在,他是乙個long型,所以把它轉化為date,後面就是比較日期,
v_sql := 'alter table '||tablename||' truncate partition ' ||for_partition.partition_name;
dbms_output.put_line(v_sql);
execute immediate v_sql;
這就是最後刪除分割槽的**... 批量刪除儲存過程的儲存過程
create procedure dropprocedure as declare cur cursor read only for select name from sysobjects where xtype p and name like drop declare name varchar 4...
刪除儲存過程
declare procname varchar 500 declare cur cursor for select name from sys.objects where type p open cur fetch next from cur into procname while fetch s...
刪除儲存過程
儲存過程可以被快速刪除和重建,因為它沒有儲存資料。刪除儲存過程可以使用sql server管理平台和transac sql語句。1.使用sql server管理平台刪除儲存過程 操作步驟如下 1 開啟sql server管理平台,展開結點 物件資源管理器 資料庫伺服器 可程式設計性 儲存過程 選擇要...