SELECT SCH.NAME AS SCHEMA_NAME
,TAB.NAME AS TABLE_NAME
,PAR.NAME AS PARTITION_NAME
,BITAND(TAB.INFO1,0xFF000000) >>24AS TABLE_FILLFACTOR
,BITAND(PAR.INFO1,0xFF000000) >>24AS PART_FILLFACTOR
FROM SYSOBJECTS TAB
,SYSOBJECTS SCH
,SYSOBJECTS PAR
WHERE TAB.SCHID = SCH.ID
AND PAR.PID = TAB.ID
AND PAR.SUBTYPE$ ='UTAB'AND SCH.NAME ='LDM_TEST'AND TAB.NAME ='ADM$INVESTOR_H'
达梦的 TABLEDEF 函数我估摸着对FILLFACTOR值的拼入只使用了分区主表的设置值,没有取各分区本身的设置值。
所以分区主表不设置FILLFACTOR,而对各分区设置的结果就是生成的DDL里缺少FILLFACTOR信息
你可以做个试验,在建表语句最后,加个 STORAGE(FILLFACTOR 90,ON ....)
也就是给分区主表设置FILLFACTOR参数,再查询表DDL,就能看到各分区都给设置了相同的FILLFACTOR值了。
不过呢,如果各分区设置的FILLFACTOR与主表不同,结果生成的DDL里都是跟随分区主表走了,我觉得这个好像有点问题。
比如,我用下面DDL创建的测试表
DROP TABLE IF EXISTS T_FTST; CREATE TABLE T_FTST ( TX_DT CHAR(10) NOT NULL, INVESTOR_ID VARCHAR2(20) NOT NULL, INVESTOR_STS VARCHAR2(4) ) PARTITION BY RANGE(TX_DT) ( PARTITION PART_14 VALUES LESS THAN ('2015-01-01') STORAGE(FILLFACTOR 10,ON MAIN,CLUSTERBTR) ,PARTITION PART_15 VALUES LESS THAN ('2016-01-01') STORAGE(FILLFACTOR 20,ON MAIN,CLUSTERBTR) ,PARTITION PART_16 VALUES LESS THAN ('2017-01-01') STORAGE(FILLFACTOR 30,ON MAIN,CLUSTERBTR) ,PARTITION PART_17 VALUES LESS THAN ('2018-01-01') STORAGE(FILLFACTOR 40,ON MAIN,CLUSTERBTR) ,PARTITION PART_18 VALUES LESS THAN ('2019-01-01') STORAGE(FILLFACTOR 50,ON MAIN,CLUSTERBTR) ,PARTITION PART_19 VALUES LESS THAN ('2020-01-01') STORAGE(FILLFACTOR 60,ON MAIN,CLUSTERBTR) ,PARTITION PART_20 VALUES LESS THAN ('2021-01-01') STORAGE(FILLFACTOR 70,ON MAIN,CLUSTERBTR) ,PARTITION PART_ELSE VALUES LESS THAN (MAXVALUE) STORAGE(FILLFACTOR 80,ON MAIN,CLUSTERBTR) ) STORAGE(FILLFACTOR 90,ON MAIN,CLUSTERBTR);通过TABLEDEF得到的ddl语句是


而实际上,我从系统字典表查询得到的各分区FILLFACTOR值是建表时用的设置值
你可以用下面这个SQL查一下看看
SELECT SCH.NAME AS SCHEMA_NAME ,TAB.NAME AS TABLE_NAME ,PAR.NAME AS PARTITION_NAME ,BITAND(TAB.INFO1,0xFF000000) >> 24 AS TABLE_FILLFACTOR ,BITAND(PAR.INFO1,0xFF000000) >> 24 AS PART_FILLFACTOR FROM SYSOBJECTS TAB ,SYSOBJECTS SCH ,SYSOBJECTS PAR WHERE TAB.SCHID = SCH.ID AND PAR.PID = TAB.ID AND PAR.SUBTYPE$ = 'UTAB' AND SCH.NAME = 'LDM_TEST' AND TAB.NAME = 'ADM$INVESTOR_H'