ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 分区表中多个分区的合并

分区表中多个分区的合并

原创 Linux操作系统 作者:hexiaomail 时间:2010-07-09 17:49:33 0 删除 编辑

/*显示当前用户所有分区表的信息 */
select * from user_part_tables;

/* 显示当前用户所有分区表的详细分区信息* /
select * from user_tab_partitions;


/* 执行下列语句会产生ORA-14275错误 */
alter table PARTITIONED_TABLE merge partitions part_1,part_2 into partition part_1;
ORA-14275: cannot reuse lower-bound partition as resulting partition;
ORA-14275: 不能将下界分区作为结果分区重用


/* 执行分区表中多个分区的合并 */
DECLARE
   l_first   VARCHAR (30);

BEGIN
   SELECT partition_name
     INTO l_first
     FROM (SELECT   ROWNUM AS sn, partition_name
               FROM user_tab_partitions
              WHERE table_name = 'RANGE_EXAMPLE01'
           ORDER BY partition_name) a
    WHERE a.sn = 1;

   FOR x IN (SELECT partition_name
               FROM (SELECT   ROWNUM AS sn, partition_name
                         FROM user_tab_partitions
                        WHERE table_name = 'RANGE_EXAMPLE01'
                     ORDER BY partition_name) a
              WHERE a.sn > 1)
   LOOP
      execute immediate   'alter table range_example01 merge partitions '
                           || l_first
                           || ','
                           || x.partition_name
                           || ' into partition '
                           || x.partition_name;
      l_first:= x.partition_name;              
   END LOOP;
END;


/* 产生分区表实现多个分区合并的代码 */
DECLARE
   l_first   VARCHAR (30);

BEGIN
   SELECT partition_name
     INTO l_first
     FROM (SELECT   ROWNUM AS sn, partition_name
               FROM user_tab_partitions
              WHERE table_name = 'RANGE_EXAMPLE01'
           ORDER BY partition_name) a
    WHERE a.sn = 1;

   FOR x IN (SELECT partition_name
               FROM (SELECT   ROWNUM AS sn, partition_name
                         FROM user_tab_partitions
                        WHERE table_name = 'RANGE_EXAMPLE01'
                     ORDER BY partition_name) a
              WHERE a.sn > 1)
   LOOP
      DBMS_OUTPUT.put_line
                          (   'alter table range_example01 merge partitions '
                           || l_first
                           || ','
                           || x.partition_name
                           || ' into partition '
                           || x.partition_name
                           || ';'
                          );
      l_first:= x.partition_name;
   END LOOP;
END;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9932141/viewspace-667678/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-05

  • 博文量
    86
  • 访问量
    219969