学院首页>网络编程>ORACLE>在ORACLE里用存储过程定期分割表

在ORACLE里用存储过程定期分割表

作者:unknown 来源:Channel7 添加时间:2006-5-26 9:51:57

重命名原始表到目标表的存储过程rename_table:

create or replace procedure rename_table(source_name in varchar2,target_name in varchar2,times in out number)isquery_str varchar2(4000);source_name1 varchar2(64);target_name1 varchar2(64);cursor c1 is select segment_name from user_segments where segment_name=upper(source_name);dummy c1%rowtype; cursor c2 is select segment_name from user_segments where segment_name=upper(target_name);dummy2 c2%rowtype; beginsource_name1:=source_name;target_name1:=target_name;open c1;fetch c1 into dummy;-- if c1%found then-- dbms_output.put_line(source_name1||'exist!');-- end if;open c2;fetch c2 into dummy2;-- if c2%notfound then-- dbms_output.put_line(target_name1||'not exist!'); -- end if;if c2%notfound and c1%found thenquery_str :='alter table '||source_name1||' rename to '||target_name1;execute immediate query_str;dbms_output.put_line('rename success!');end if;close c1;close c2;exceptionWHEN OTHERS THEN times:=times+1;if times<100 then-- dbms_output.put_line('times:'||times);rename_table(source_name1,target_name1,times);elsedbms_output.put_line(SQLERRM);dbms_output.put_line('error over 100 times,exit');end if;end;/截断分割log表的存储过程log_history:create or replace procedure log_historyisquery_str varchar2(32767);year_month varchar2(8);times number;beginselect to_char(sysdate-15,'YYYYMM') into year_month from dual;times:=0;query_str :='create table log_new pctfree 10 pctused 80 as select * from log where 1=2';execute immediate query_str;query_str :='alter table log_new add constraints log_'||year_month||'_pkprimary key (id) tablespace indx nologging pctfree 10';execute immediate query_str; query_str :='alter table log_his modify logtime default sysdate';execute immediate query_str; query_str :='create index log_'||year_month||'_logtime on log(logtime)tablespace indx nologging pctfree 10';execute immediate query_str; rename_table('log','log'||year_month,times);query_str :='alter table log_new rename to log';execute immediate query_str;end;/
第 2 页,共 2 页 [1] [2]
站内搜索