1. 创建分离分区的存储过程

CREATE OR REPLACE Procedure SP_Split_Partition(
v_table_name_in in varchar2,
v_part_name_prifex_in in varchar2,
v_split_partition_source_in in varchar2,
v_tablespace_name_in in varchar2,
v_field_tablespace_name_in in varchar2,
v_create_partition_count_in in number
) is
/*
名称:SP_Split_Partition
描述:oracle分区表分离分区的存储过程
参数说明:
v_table_name_in 分区表表名称
v_part_name_prifex_in 分区名称前缀
v_split_partition_source_in 要分离的目标分区
v_tablespace_name_in in 分区表所在表空间
v_field_tablespace_name_in 特别字段特别分区SQL
v_create_partition_count_in 从现在开始创建多少个分区
*/
-- Local variables here
i integer; ---最后一个分区信息
cursor cur_utp(v_table_name_in in user_tab_partitions.table_name%TYPE) is
select *
from (select utp.table_name,
utp.tablespace_name,
utp.partition_name,
utp.high_value,
utp.high_value_length,
utp.partition_position
from user_tab_partitions utp
where utp.table_name = UPPER(v_table_name_in)
and utp.high_value_length<>8
order by utp.partition_position desc
) utp
where rownum = 1; v_high_value varchar2(255); --less than value信息
v_partition_max_date date; ---- 当前最大分区
v_sqlexec VARCHAR2(2000); --DDL语句变量
v_count number := 0;
v_interver number := 1; --步长间隔 单位(月)
v_tablespace_name varchar2(200); v_max_date_this_time date; begin
-- 根据v_create_partition_count_in, 得到最后要生成的分区日期
v_max_date_this_time:=last_day(add_months(trunc(SYSDATE), v_create_partition_count_in))+1; --取值
for utp in cur_utp(v_table_name_in) loop
v_high_value := substr(utp.high_value,11,10);
v_partition_max_date := to_date(v_high_value,'YYYY-MM-DD'); dbms_output.put_line('v_high_value:' || v_high_value); --如果没有给默认值
if (v_tablespace_name_in is null) then
v_tablespace_name := utp.tablespace_name;
else
v_tablespace_name := v_tablespace_name_in;
end if;
end loop; i:= 0;
v_partition_max_date := add_months(v_partition_max_date,v_interver); /************************************************************
alter table Article_Detail split partition Article_Detail_Others at(TO_DATE('2014-01-01', 'yyyy-mm-dd'))
into(
partition Article_Detail_201401 LOB (CONTENT_HTML) store as SECUREFILE (TABLESPACE wm_article_detail_clob) tablespace WM_ARTICLE_DETAIL,
partition Article_Detail_Others LOB (CONTENT_HTML) store as SECUREFILE (TABLESPACE wm_article_detail_clob) tablespace WM_ARTICLE_DETAIL
);
*************************************************************/ while v_partition_max_date <= v_max_date_this_time loop
v_SqlExec := 'ALTER TABLE ' || v_table_name_in || ' SPLIT PARTITION ' || v_split_partition_source_in || ' AT' ||
'(TO_DATE('''||to_char(v_partition_max_date, 'YYYY-MM-DD')||''',''YYYY-MM-DD'')) INTO(PARTITION '||
v_part_name_prifex_in || to_char(v_partition_max_date,'YYYYMM') || ' ' || v_field_tablespace_name_in ||
' TABLESPACE ' || v_tablespace_name || ', PARTITION '||v_split_partition_source_in||')';
dbms_output.put_line('Added Partition ' || i || '=' || v_SqlExec);
DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
v_partition_max_date := add_months(v_partition_max_date,v_interver);
i:= i + 1;
end loop; v_count := v_count + i;
dbms_output.put_line('Added Partition Count:' || v_count); commit;
Exception
when OTHERS then
--ReturnValue:=-1003;
dbms_output.put_line('The SQLCode is: '||SQLCODE);
dbms_output.put_line('The SQLERRM is: '||SQLERRM); end SP_Split_Partition;

2. 创建调度分离分区的存储过程

CREATE OR REPLACE Procedure SP_Call_SP_Split_Partition is
begin update Article_Detail t set t.transfer_done_time=t.extracted_time where t.transfer_done_time is null;
commit; dbms_stats.gather_table_stats('WDM_APP','ARTICLE_DETAIL',partname=>'ARTICLE_DETAIL_OTHERS'); SP_Split_Partition(
'ARTICLE_DETAIL',
'ARTICLE_DETAIL_',
'ARTICLE_DETAIL_OTHERS',
'WM_ARTICLE_DETAIL',
'LOB (CONTENT_HTML) store as SECUREFILE (TABLESPACE wm_article_detail_clob)',
3
); SP_Split_Partition(
'ARTICLE_DATA',
'ARTICLE_DATA_',
'ARTICLE_DATA_OTHERS',
'WM_ARTICLE_DATA',
'',
3
); Exception
when OTHERS then
--ReturnValue:=-1003;
dbms_output.put_line('The SQLCode is: '||SQLCODE);
dbms_output.put_line('The SQLERRM is: '||SQLERRM); end SP_Call_SP_Split_Partition;

3. 创建相应的JOB, 并执行.

CREATE OR REPLACE PROCEDURE Job_SP_Call_SP_Split_Partition AS
JobNo user_jobs.job%TYPE;
BEGIN
begin
dbms_job.submit(JobNo, 'begin SP_Call_SP_Split_Partition; end;',
SYSDATE+1/1440,'TRUNC(SYSDATE+15)');
COMMIT;
end;
END;
/ call Job_SP_Call_SP_Split_Partition();

最新文章

  1. BYTE 和字符串转换
  2. pod install 错误 - incompatible character encodings: UTF-8 and ASCII-8BIT
  3. js 重点 (转载)
  4. 3、JPA一些常用的注解
  5. jQuery ajax传递特殊字符参数(例如+)
  6. Node log4js
  7. 《HelloGitHub月刊》第10期
  8. grid表格选择模式
  9. iphone怎么投屏到电脑屏幕上
  10. JMeter Dubbo请求插件jmeter-plugin-dubbo.jar
  11. C语言中指针变量的加减运算
  12. docker学习(1)--基础概念
  13. SpringSecurity整合JWT
  14. 【转】关于提示can&#39;t load package &#39;xxx.bpl.&#39; 错误问题的解决方法
  15. chrome浏览器的VUE调试插件Vue.js devtools
  16. 为什么不要在Spring的配置里,配置上XSD的版本号
  17. 利用Sonar定制自定义JS扫描规则(一)——sonar环境搭建
  18. 利用Mongodb做地理空间查询
  19. 【CF954I】Yet Another String Matching Problem(FFT)
  20. 浅谈BUFF设计

热门文章

  1. css控制内容显示,自动加&quot;...&quot;
  2. [struts2]jstl标签用法技巧
  3. Java NIO 备忘
  4. 一、JSP、Servlet 概要
  5. JS 添加千分位,测试可以使用
  6. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT
  7. Android模拟器操作快捷键
  8. android学习日记04--开发中的通用细节
  9. JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本
  10. git - 版本控制器(本地仓库)