Oracle Split Partitions
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();
Oracle Split Partitions的更多相关文章
- pipe row的用法, Oracle split 函数写法.
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- Oracle Split 函数
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- Oracle split分区表引起ORA-01502错误
继上次删除分区表的分区遇到ORA-01502错误后[详细见链接:Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态],最近在split分区的时候又遇到了这个问题 ...
- (转)pipe row的用法, Oracle split 函数写法.
本文转载自:http://www.cnblogs.com/newsea/archive/2010/12/14/1905482.html 关于 pipe row的用法2009/12/30 14:53 = ...
- oracle split 以及 简单json解析存储过程
BEGIN; 由于之前工作上需要在oracle中做split功能以及json格分解.然后经过一番google和优化整合,最后整理到一个存储过程包中,易于管理,代码如下: 1.包定义: CREATE O ...
- oracle split
select * from table(fun_strsplit('1,2,3,4,5')); 1.创建一个类型 ) 2.创建函数 CREATE OR REPLACE FUNCTION Fun_Str ...
- Oracle Split字符串
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- oracle split函数
PL/SQL 中没有split函数,需要自己写. 代码: ); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些. --创建function create or r ...
- Partitioning & Archiving tables in SQL Server (Part 2: Split, Merge and Switch partitions)
Reference: http://blogs.msdn.com/b/felixmar/archive/2011/08/29/partitioning-amp-archiving-tables-in- ...
随机推荐
- nyoj 199 无线网络覆盖
无线网络覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们的乐乐同学对于网络可算得上是情有独钟,他有一个计划,那就是用无线网覆盖郑州大学. 现在学校给了他一个 ...
- Qt on_pushButton_clicked()的用法【worldsing笔记】
在Qt里按钮控件默认对应一个on_pushButton_clicked()成员,如果想用点击信号,在代码中实现on_pushButton_clicked()成员即可. 最近看了一段代码,里面并没有co ...
- js使用技巧大全
1.防止重新构建 var constructedHtml = ""; for(var i = 0,len = arr.length;i < len;i++){ constru ...
- PowerDesigner 模型文档 说明
PowerDesigner 模型文档 说明 目录(?)[+] 一. 模型文档说明 在前面几篇里介绍了PowerDesigner 的几种模型,如果我们项目里用到的模型较多,亦或者项目牵涉的部门很 ...
- 剑指OFFER之丑数(九度OJ1214)
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...
- Abel 分部求和法
本文之所以叫Abel分部求和法而不叫Abel分部求和公式,是因为求和公式有可能形式上有所不同,但是方法确实相同的. $$\sum_{n=M}^{N}a_{n}b_{n} = \sum_{n=M}^{N ...
- dataGridView控件--未将对象引用设置添加到对象的实例
上篇博客中我完成了如何将控件中的数据导出到excel中dataGridView控件--导出Excel,当我成功导出后,又再次遇到了新问题---未将对象引用设置添加到对象的实例 解决办法: 1 .将代 ...
- 【斐波那契DP】HDU 4639——HeHe
题目:点击打开链接 多校练习赛4的简单题,但是比赛的时候想到了推导公式f(n)=f(n-1)+f(n-2)(就是斐波那契数列),最后却没做出来. 首先手写一下he(不是hehe)连续时的规律.0-1 ...
- ASC(1)G(上升时间最长的序列)
G - Beautiful People Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- android117 下拉列表