首先,我的问题是,在向DB2的分区表中插入数据时,是否有一种自动生成分区的方式(例如Oracle中用于区间分区的间隔?)>
目前,我有一个包含数百个表的架构,这些表尚未分区。我想对它们进行分区。我的步骤将是:
...从这里开始。(当然,该过程必须是自动的,并且我不知道哪些值包含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中用于范围分区的间隔?在...