首页 > 其他分享 >动态使用存储过程给分区表建立分区

动态使用存储过程给分区表建立分区

时间:2023-04-30 21:06:48浏览次数:31  
标签:存储 name 分区 partition utp 分区表 tablespace date part


in varchar2,
                                           v_tablespace_name_in in varchar2,
                                           v_begin_date         in varchar2,
                                           v_end_date           in varchar2) is
  
   -- Local variables here
   ---分区表信息
   cursor cur_utp(v_table_name 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)
              order by utp.partition_position desc) utp
      v_high_value         varchar2(255); --less than value信息
   v_partition_max_date timestamp; ----less than value信息的 timestamp表示形式
   v_sqlexec            VARCHAR2(2000); --DDL语句变量
   v_count              number := 0;
   v_interver           number := 1; --步长间隔 单位(天)
   v_part_name_header   varchar2(20) := 'p';
   v_part_name          varchar2(2000); --分区名
   v_partition_num      number := 0;
   v_tablespace_name    varchar2(200);
   v_end_date_inner     timestamp;
   
 begin
   v_interver         := 1 ;
   v_end_date_inner := trunc(to_timestamp(v_end_date,
                                          'syyyy-mm-dd hh24:mi:ss.ff'));
   --取值
   for utp in cur_utp(v_table_name) loop
     v_high_value         := substr(utp.high_value,
                                    11,
                                    10);
     v_partition_max_date := to_timestamp(v_high_value,
                                          'syyyy-mm-dd hh24:mi:ss.ff');
     if (to_timestamp(v_begin_date, 'syyyy-mm-dd hh24:mi:ss.ff') >
        v_partition_max_date) then
       v_partition_max_date := to_timestamp(v_begin_date,
                                            'syyyy-mm-dd hh24:mi:ss.ff');
     end if;
     v_part_name := utp.partition_name;
   
     --如果没有给默认值
     if (v_tablespace_name_in is null) then
       -- v_tablespace_name
       v_tablespace_name := utp.tablespace_name;
     else
       v_tablespace_name := v_tablespace_name_in;
     end if;
   if (v_part_name_header =
      substr(v_part_name, 1, length(v_part_name_header))) then
     v_partition_num := to_number(substr(v_part_name,
                                         length(v_part_name_header) + 1,
                                         length(v_part_name)));
     v_partition_num := to_number(to_char(to_date(v_partition_num,'yyyymmdd')+1,'yyyymmdd'));
   else
     dbms_output.put_line('not expect part_name header user default:' ||
                          v_part_name);
     v_partition_num := 0;
   i                    := 0;
   v_partition_max_date := v_partition_max_date + v_interver;
  
  while v_partition_max_date <= v_end_date_inner loop
     
     v_SqlExec := 'ALTER TABLE ' || v_table_name || ' ADD PARTITION ' ||
                  v_part_name_header || (to_number(to_char(to_date(v_partition_num,'yyyymmdd')+i,'yyyymmdd'))) ||
                  ' values less than(TIMESTAMP''' ||
                  to_char(v_partition_max_date, 'syyyy-mm-dd hh24:mi:ss.ff') ||
                  ''') TABLESPACE ' || v_tablespace_name;
     dbms_output.put_line('创建 表分区' || i || '=' || v_SqlExec);
     --alter table IP_CONNRATE_LIMITEX_LOG add partition part_0002 values less than(TIMESTAMP'2010-08-31 00:00:00.000000') tablespace NASP_IP_LOG_TABLESPACE;
     DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
     v_partition_max_date := v_partition_max_date + v_interver;
     i                    := i + 1;
   
   end loop;
   
   v_count := v_count + i;
   end add_partition;

标签:存储,name,分区,partition,utp,分区表,tablespace,date,part
From: https://blog.51cto.com/u_548275/6238234

相关文章

  • 如何在存储过程中执行ddl语句
    如何在存储过程中执行ddl语可用;EXECUTEIMMEDIATE'CREATETABLEbonus(idNUMBER,amtNUMBER)';不过好象在存储过程中创建一个临时表不大好.句========================================================dbms_utility.exec_ddl_statement(p_sql);......
  • 【数据结构】链式型存储结构-静态链表
    1 前言地球人都知道C语言是个伟大的语言,它的魅力在于指针的灵活性,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。(面向对象语言,比如java,可以使用对象引用机制间接地实现指针的某些功能)但是古人还是木有C语言丫,木有JAVA丫,只有原始的Basic,Fortran等......
  • 【数据结构】链式型存储结构-单链表
    1 前言线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置。比起顺序存储结构每个元素只需要存储一个位置就可以了。现在链式存储结构中,除了要存储数据信息外,还要存储它的后继元素的存储地址(指针)。也就是说......
  • 【数据结构】线性表分类以及顺序型存储结构
    1 什么是线性表线性表的定义:由零个或多个数据元素组成的有限序列首先它是一个序列,也就是说元素之间是有先来后到之分。若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。线性表强调是有限的,事实上无论计算机发展到多强大,他所能处理......
  • 第三章 3.4 特殊矩阵的压缩存储
    一维数组和二维数组的存储二维数组存储分为行优先存储和列优先存储.行优先存储列优先存储压缩存储三角矩阵的压缩存储<对角线上的元素都是每行的第二个元素>稀疏矩阵的存储1.使用数组直接存储2.十字链表法总结......
  • Linux分区调整
    一.查看系统分区信息1.显示系统分区信息cat/proc/mtddev:sizeerasesizenamemtd0:0004000000040000"u-boot"mtd1:0001000000040000"u-boot-env"mtd2:00e3000000040000"rootfs"size16进制字节数erasesize单词擦除的大小---1个block大小256kb2.显示......
  • 栈的顺序存储 C语言
    #include<iostream>#include<stdio.h>#defineMAXSIZE50typedefstruct{intdata[MAXSIZE];inttop;}SqStack;//初始化栈voidInitStack(SqStack&s){s.top=-1;}//判断栈空boolStackEmpty(SqStack&s){if(s.top==-1)......
  • iOS数据存储的四种方案对比
    你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨。本文主要从概念上把“数据存储”这个问题进行剖析,并且结合各自特点和适用场景给大家提供一个选择的思路,并不详细介绍某一种方式的技术细节。谈到数据......
  • C语言链式存储(使用引用传递)
    #include<stdio.h>#include<stdlib.h>typedefstructLinkNode{ intdata; structLinkNode*next;}LinkNode;typedefstructLink{ LinkNode*front,*rear;//frontrear为链表的伴随指针}LinkQueue;voidInitQueue(LinkQueue&Q){Q.front=Q.rear......
  • C语言的存储类别
    存储类别概念对象:硬件中,被存储的每个值都占用一定的物理内存,c语言吧这样的一块内存成为对象标识符:标识符用来指定特定的对象存储期:用来描述对象,描述对象在内存中保留了多长时间作用域、用来描述标识符,描述程序中可以访问标识符的区域链接:用来描述标识符,c语言有3中链接属性:......