1.数据库版本

2.具体procedure

DROP PROCEDURE DB2USER.TOOLS_PARTITION_TABLE_SHOW (VARCHAR ());

CREATE OR REPLACE PROCEDURE Tools_partition_table_show(IN ETL_DATE VARCHAR(8))
/******************************************************************************
NAME:
PURPOSE: REVISIONS:
Ver Date Author Description
--------- ---------- ------------ ------------------------------------
1.0 2015-07-22 Zen 1. 作为分区表添加和快速删除分区的一个示例
供有相同需求的脚本参考。
******************************************************************************/
LANGUAGE SQL
BEGIN
DECLARE V_LOCATION VARCHAR(100);
DECLARE V_START_TIME TIMESTAMP;
DECLARE V_SQLMSG VARCHAR(255);
DECLARE V_CNT INT;
DECLARE V_PARTITION_NAME VARCHAR(50);
DECLARE V_PARTITION_END VARCHAR(50);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS EXCEPTION 1 V_SQLMSG = MESSAGE_TEXT;
CALL DB2USER.PRO_LOG(ETL_DATE,'Tools_partition_table_show','测试分区表作业方式',V_START_TIME,current timestamp,'ERROR',V_LOCATION,V_SQLMSG);
END;
/*清空目标表*/
SET V_START_TIME = current timestamp;
SET V_LOCATION = '清空数据'; /*
DELETE FROM DB2USER.S_CLM_RATE_POL_AAA WHERE BBQ = SUBSTR(ETL_DATE,1,6); COMMIT;*/
SET V_LOCATION = '测试保单赔率表的抽取开始';
SET V_PARTITION_NAME = 'P'||SUBSTR(ETL_DATE,1,6);
SET V_PARTITION_END = TO_CHAR(add_months(TO_DATE(ETL_DATE,'YYYYMMDD'),1),'YYYYMM'); --SELECT TO_CHAR(add_months(TO_DATE(ETL_DATE,'YYYYMMDD'),1),'YYYYMM') INTO V_PARTITION_END FROM sysibm.dual; --判断分区是否存在,如果存在,数据转出删除
SELECT COUNT(*) INTO V_CNT FROM syscat.datapartitions t
WHERE tabschema='DB2USER'
AND tabname='S_CLM_RATE_POL_AAA_TEST'
AND datapartitionname=V_PARTITION_NAME ; IF V_CNT=1 THEN
-- 分区数据转出
EXECUTE IMMEDIATE 'ALTER TABLE S_CLM_RATE_POL_AAA_test DETACH PARTITION '||V_PARTITION_NAME||' INTO DB2USER.TEMP_S_CLM_RATE_POL_AAA';
COMMIT;
EXECUTE IMMEDIATE 'DROP TABLE DB2USER.TEMP_S_CLM_RATE_POL_AAA';
END IF ; SET V_LOCATION = 'after 分区数据转出'; --非正常DML或DDL 需要调用 sysproc.admin_cmd();
--收集统计信息
CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE db2user.S_CLM_RATE_POL_AAA_test'); -- 添加新分区
EXECUTE IMMEDIATE 'ALTER TABLE DB2USER.S_CLM_RATE_POL_AAA_test ADD PARTITION '||V_PARTITION_NAME||' STARTING '||SUBSTR(ETL_DATE,1,6)||' INCLUSIVE ENDING '||V_PARTITION_END||' exclusive'; SET V_LOCATION = 'after 添加新分区';
COMMIT; EXECUTE IMMEDIATE 'ALTER TABLE DB2USER.S_CLM_RATE_POL_AAA_test ACTIVATE NOT LOGGED INITIALLY'; FOR REC AS WITH TMP(TYPE) AS (SELECT 'AAA1' AS TYPE FROM SYSIBM.DUAL
UNION ALL
SELECT 'AAA2' AS TYPE FROM SYSIBM.DUAL
UNION ALL
SELECT 'AAA4' AS TYPE FROM SYSIBM.DUAL)
SELECT * FROM TMP
DO
SET V_LOCATION = 'test'||REC.TYPE; INSERT INTO DB2USER.S_CLM_RATE_POL_AAA_test
SELECT
......END FOR; CALL DB2USER.PRO_LOG(ETL_DATE,'Tools_partition_table_show','测试分区表作业方式',V_START_TIME,current timestamp,'SUCCESS','','');
END;

3.总结:

a.db2 中表分区目前只支持range分区,没有oracle的丰富。

b.分区不能直接删除必须先 DETACH PARTITION ,detach之后必须commit不然会报结构不完善的错误。

c.需要添加新的分区只需要直接 ADD partition。

d.DDL语句用在procedure中需要显示commit。

DB2分区表删除和添加分区的更多相关文章

  1. oracle range分区表已经有了MAXVALUE 分区,如何添加分区?要不能删除MAXVALUE分区里的数据,不影响在线应用。

    来做个实验说明该问题:1.创建个分区表SQL> create table p_range_test 2 (id number,name varchar2(100)) 3 partition by ...

  2. linux下添加分区并挂载目录、卸载并删除分区

    添加分区并挂载目录 Linux的硬盘识别: 一般使用”fdisk -l”命令可以列出系统中当前连接的硬盘 设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息.   1.关闭服务器加上新硬盘   ...

  3. Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态

    (一)问题: 最近在做Oracle数据清理,在对分区表进行数据清理时,采用的方法是drop partition,删除的过程中,没有遇到任何问题,大概过了10分钟,开发人员反馈部分分区表上的业务失败.具 ...

  4. Linux fdisk命令操作磁盘(添加、删除、转换分区等)

    创建分区1->查看原始分区sudo fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, ...

  5. oracle 11g 如何创建、修改、删除list-list组合分区

    Oracle11g在分区方面做了很大的提高,不但新增了4种复合分区类型,还增加了虚拟列分区.系统分区.INTERVAL分区等功能. 9i开始,Oracle就包括了2种复合分区,RANGE-HASH和R ...

  6. Oracle 分区表管理之组合分区(分区索引失效与性能比较)

    整体结构如下: Oracle  分区表管理之组合分区(分区索引失效与性能比较) 虽然老早就使用了分区表,终于有时间写有关分区表的内容:不是所有的场景数据量变大需要用到分区表,一般单表数据超过2g可以考 ...

  7. 创建,增加,删除mysql表分区

    1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles (     emp_no      INT NOT NULL,     titl ...

  8. hive中简单介绍分区表(partition table)——动态分区(dynamic partition)、静态分区(static partition)

    一.基本概念 hive中分区表分为:范围分区.列表分区.hash分区.混合分区等. 分区列:分区列不是表中的一个实际的字段,而是一个或者多个伪列.翻译一下是:“在表的数据文件中实际上并不保存分区列的信 ...

  9. Oracle 分区表的索引、分区索引

    对于分区表,可以建立不分区索引.也就是说表分区,但是索引不分区.以下着重介绍分区表的分区索引. 索引与表一样,也可以分区.索引分为两类:locally partition index(局部分区索引). ...

随机推荐

  1. iOS实现自定义的弹出视图(popView)

    前段时间,在项目中有个需求是支付完成后,弹出红包,实现这么一个发红包的功能.做了最后,实现的效果大致如下: 一.使用方法 整个ViewController的代码大致如下 // //  SecondVi ...

  2. oracle的控制语句if和循环语句loop while for

    pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...

  3. Linux命令行下cp,rm,mv命令的使用

    以下的内容来源于<鸟哥的私房菜> Linux命令行下的复制.删除与移动:cp,rm,mv cp(copy)复制        cp这个命令的用途很多,除了单纯的复制之外,还可以创建链接文件 ...

  4. JavaScript的正则表达式使用

    一:遇到问题 今天做项目时,在前台js对身份证号进行验证时,一直达不到预期的效果,我是监控文本域变量, $scope.watch('form.idNo',function(v){ if(!v){ re ...

  5. javaweb学习总结九(xml解析以及调整JVM内存大小)

    一:解析XML文件的两种方式 1:dom,document object model,文档对象模型. 2:sax,simple API for XML. 3:比较dom和sax解析XML文件的优缺点 ...

  6. angularjs $state.go 传参

    在目标页面规定接受的参数:$stateProvider.state('page2', {params: {'data': null}}) 传参:$state.go('page2', {data: 'a ...

  7. Linux下进程的创建

    这篇文章主要是讲解到Linux进程的控制,包括程序和进程.守护进程.守护进程的出错处理. 1.程序和进程 程序(program)是存放在磁盘文件中的可执行文件,程序的执行实例被称为进程(process ...

  8. Acrobat 2015 win32破解版

    Acrobat 2015 win32破解版,带破解补丁dll覆盖即可 百度云盘:http://pan.baidu.com/s/1i4tFnNJ

  9. 今天写了几个css属性

    <!DOCTYPE html> <html> <head> <meta charset=UTF-8"> <title></t ...

  10. Linux 命令 - cp: 拷贝文件和目录

    命令格式 cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY ...