在项目中经常要增加大量的分区,总结了增加分区的方法:

1.如果只增加一级分区,没有子分区,可以简单的用如下语句增加:

alter table TDW_12580_ORD_REL_TAB_M

add PARTITION M_TDW_12580_201005 VALUES (201005)

[@more@]

2.如果增加的分区有子分区,则需要先建一个一级分区和子分区,然后用下面的脚本来增加:

注意:表名用大写,日期格式为20100801 结束日期为下一个月的1号,如20100901

脚本:

declare

--初始化参数

v_table_name varchar2(30);

v_partition_name varchar2(30);

v_subpartition_name varchar2(30);

v_segment_type varchar2(30);

v_begin_date_str varchar2(10);

v_sql varchar2(1000);

v_begin_date date;

v_end_date date;

--查找出所有分区表

cursor C_table_name is

select t1.table_name

from user_tables t1

where t1.table_name in ('&TABLE_NAME');

begin

open C_table_name;

loop

fetch C_table_name

into v_table_name;

exit when C_table_name%notfound;

--查找出分区表的类型

select distinct (t2.segment_type)

into v_segment_type

from user_segments t2

where t2.segment_name = v_table_name;

if v_segment_type in ('TABLE SUBPARTITION') then

--取出分区和子分区表名的不含日期部分

select distinct substr(t3.partition_name,

0,

length(t3.partition_name) - 6),

substr(t3.subpartition_name,

0,

length(t3.subpartition_name) - 8)

into v_partition_name, v_subpartition_name

from user_tab_subpartitions t3

where t3.table_name = v_table_name;

--初始化日期

v_begin_date := to_date('&START_DATE', 'YYYYMMDD');

v_end_date := to_date('&END_DATE', 'YYYYMMDD');

--循环创建2010年的表分区

while v_begin_date < v_end_date loop

--创建增加分区语句,如:alter table v_table_name add partition v_partition_nameYYYYMM values (YYYYMM) (subpartition v_subpartition_nameYYYYMMDD values (YYYYMMDD));

v_begin_date_str := substr(to_char(v_begin_date, 'YYYYMMDD'), 7, 2);

if v_begin_date_str in ('01') then

v_sql := 'alter table ' || v_table_name || ' add partition ' ||

v_partition_name ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

' values (' ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

') (subpartition ' || v_subpartition_name ||

to_char(v_begin_date, 'YYYYMMDD') || ' values (' ||

to_char(v_begin_date, 'YYYYMMDD') || '))';

else

v_sql := 'alter table ' || v_table_name || ' modify partition ' ||

v_partition_name ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

' add subpartition ' || v_subpartition_name ||

to_char(v_begin_date, 'YYYYMMDD') || ' values (' ||

to_char(v_begin_date, 'YYYYMMDD') || ')';

end if;

--显示增加分区语句

--DBMS_OUTPUT.put_line(v_sql);

--执行增加分区语句

execute immediate v_sql;

--日期加一天

v_begin_date := v_begin_date + 1;

end loop;

elsif v_segment_type in ('TABLE PARTITION') then

--取出分区表名的不含日期部分

select distinct (substr(t4.partition_name,

0,

length(t4.partition_name) - 6))

into v_partition_name

from user_tab_partitions t4

where t4.table_name = v_table_name;

--初始化日期

v_begin_date := to_date('&START_DATE', 'YYYYMMDD');

v_end_date := to_date('&START_DATE', 'YYYYMMDD');

--循环创建2010年的表分区

while v_begin_date < v_end_date loop

--创建增加分区语句,如:alter table v_table_name add partition v_partition_nameYYYYMM values (YYYYMM);

v_sql := 'alter table ' || v_table_name || ' add partition ' ||

v_partition_name ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

' values (' ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) || ')';

--显示增加分区语句

--- DBMS_OUTPUT.put_line(v_sql);

--执行增加分区语句

execute immediate v_sql;

--日期加一月

v_begin_date := add_months(v_begin_date, 1);

end loop;

else

DBMS_OUTPUT.put_line(v_table_name || '表类型为' || v_segment_type ||

',请查看!');

end if;

end loop;

close C_table_name;

end;

oracle 增加一个新分区,oracle增加分区的方法相关推荐

  1. TensorFlow 教程 --进阶指南--3.6增加一个新 Op

    预备知识: 对 C++ 有一定了解. 已经下载 TensorFlow 源代码并有能力编译它. 如果现有的库没有涵盖你想要的操作, 你可以自己定制一个. 为了使定制的 Op 能够兼容原有的库 , 你必须 ...

  2. 在MTK6572当中如何增加一个新按键,而且此按键值在虚拟按键当中可以使用

    在物理按键当中如果你要增加一个新按键: [Description] How to add a new key on android ICS/ICS2   [Solution] 1.在DCT tool ...

  3. 【工厂方法模式】将原有的电视机工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电视机,如果需要生产其他电视,只需要对应增加一个新的工厂即可

    简单工厂模式想要增加新的产品必须修改工厂类,不符合开发的开闭原则,如果使用工厂方法模式,那么只需要增加一个工厂类即可. 工厂方法模式包含如下角色: Product:抽象产品 ConcreteProdu ...

  4. oracle oem 13c新特性,Oracle Database 12c - 新特性实现的历程与13c的预测

    Oracle Database 12c - 新特性实现的历程与13c的预测 虽然Oracle Database 12c的新特性文档已经随处可见,但是Oracle仍然没有关于12c正式发布的准确日期,这 ...

  5. oracle 增加一个新分区,oracle 11g 新增分区

    oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值 ...

  6. 使用python和flask建个人博客---增加一个新功能:点击主页图片的时候能够跳转到指定的网页

    蜗牛笔记的主页主要有两个html文件,一个是index.html,一个是type.html,index.html是这个博客的主页,type.html是点击不同的文章类型的时候的页面,这些页面也可以设计 ...

  7. oracle 12c dg新特性,oracle 12c:新特性-网格(Grid)基础架构的增强

    oracle 12c:新特性-网格(Grid)基础架构的增强,传统标准集群和Flex集群. Flex 集群 Oracle 12c 在集群安装时支持两类配置:传统标准集群和Flex集群.在一个传统标准集 ...

  8. 学习一个新领域的知识的最佳方法和最快时间各是什么?

    Liu Cao ,「学习方法」是个伪命题 玉某人.冷峻.淡之 等人赞同 有个TED演讲简直是为这个问题量身订做的. The first 20 hours-How to learn Anything. ...

  9. 建立一个新的Oracle数据库

    PostgreSQL重置序列 select setval('rec_lan_land_id_seq',10,false); rec_lan_land_id_seq--序列名称以管理员身份登录的: 1. ...

最新文章

  1. 利用owc生成excel并且显示在页面
  2. Java模拟面试总结
  3. java写入简介_Java关于IO流的介绍
  4. ffmpeg解析TS流
  5. python xposed_GitHub - twqdev/CPWechatXposed: 使用Xposed Hook微信等APP
  6. LeetCode 要记得一些小trick
  7. 一代私募传奇落幕:黑石创始人彼得森留下4000亿美元离世
  8. url采集工具_爬山虎采集实战-站长之家网站排行榜
  9. 数模竞赛必备参考书籍《算法竞赛入门经典(第2版)》PDF免费下载
  10. Python-爬取历史地震数据并可视化
  11. Telnet 详解 及命令使用
  12. html 酷狗音乐教程,仿酷狗html5手机音乐播放器主要部分代码_html5教程技巧
  13. 基于多模态路标跟踪的紧耦合激光—视觉—惯导里程计(ICRA2021)
  14. 开启 Windows 10 中的「卓越性能」电源计划
  15. oracle vm 强制关机,[已解决]Virtualbox安装archlinux过程中客户机和宿主机全部卡死...
  16. 爬虫 -- 简单封装
  17. c语言编写while乘法表,用C语言的while循环,打印九九乘法表,
  18. 关闭Window 10 Ctrl+Shift+B(表情包)快捷键冲突
  19. C语言冒泡法输出成绩与学号,C语言:根据成绩进行冒泡排序,学号也得跟着动,输出的结果...
  20. CDRshp文件转html,CDR转PDF设置教程-告诉你如何把cdr转换成适合印刷的pdf

热门文章

  1. 计算机视觉技术的应用实例,图像识别技术都有哪些?图像识别技术原理及应用实例...
  2. “芯片”=“集成电路”=“半导体”吗?
  3. jmeter中控制器的使用
  4. 二级c语言编译完程序如何运行,计算机二级C语言辅导:C++环境下编译和运行c语言...
  5. 【二次开发】如何使用C#进行CATIA二次开发
  6. 放弃幻想,人不会有什么长久安逸的
  7. python实现归一化与标准化
  8. Gateway 网关
  9. 金融风控-- >申请评分卡模型-- >特征工程(特征分箱,WOE编码)
  10. 载谭 Binomial Sum:多项式复合、插值与泰勒展开