具有DB2 LUW中数据的范围分区表

问题描述 投票:0回答:1

首先,我的问题是,在向DB2的分区表中插入数据时,是否有一种自动生成分区的方式(例如Oracle中用于区间分区的间隔?)>

目前,我有一个包含数百个表的架构,这些表尚未分区。我想对它们进行分区。我的步骤将是:

  • 将所有表重命名为OLD_table_name
  • 为那些表执行DDL,但已经分区(按load_id列int数据类型)
  • 全部执行,插入表名中,从* old_table_name中选择*
  • ...从这里开始。(当然,该过程必须是自动的,并且我不知道哪些值包含load_id列+所有表的值都将不同,否则可以生成简单的alter语句并执行它们)。因此,我会去找光标。

目前我有可行的解决方案,但我不喜欢它:

BEGIN
FOR CL AS MYCURS INSENSITIVE CURSOR FOR
    select distinct 'alter table '||tb_nm||' 
                    add partition PART_'||lpad(load_id,5,0)||' 
                    starting from '||load_id||' 
                    ending at '||load_id v_alt 
    from (
    select load_id,'Table_01' tb_nm from Table_01 
     union  
    select load_id ,'Table_02'from Table_02
     union
    ....
    /*I have generated this union statements for whole set of tables*/)
do 
   execute immediate v_alt;
end for;
end

而且,我尝试了一些更优雅的(我认为)变体,但没有成功:

BEGIN

DECLARE v_stmnt VARCHAR(1000); 
DECLARE v_check_val int;  
DECLARE v_prep_stmnt STATEMENT; 

for i as (select table_name 
            from sysibm.tables 
           where TABLE_SCHEMA ='shema_name'
         )
do 
    SET v_stmnt = 'set ? = (SELECT distinct(load_id) FROM '||table_name||')';
    PREPARE v_prep_stmnt FROM v_stmnt;
    /*and here I stuck. I assume there must be possibility to run next execute as well in loop, but 
    all my attempts were not succsesfull*/
    --EXECUTE v_prep_stmnt into v_check_val ;
end for;
END

非常感谢任何提示。

首先,我是否有一种在将数据插入DB2的分区表中时自动生成分区的方法(例如Oracle中用于范围分区的间隔?在...

loops db2 prepared-statement partitioning
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.