DBC.COLUMNS
DBC.COLUMNS视图是一个表,包含有关表和视图列、存储过程、或宏参数的信息。其中包括以下列:DatabaseName、TableName、ColumnName、ColumnFormat、ColumnTitle、ColumnType、DefaultValue。在GaussDB(DWS)中,这个表等效于information_schema.columns表。
迁移工具将以下dbc.columns列迁移为对应的information_schema列:
dbc.columns |
information_schema.columns |
---|---|
ColumnName |
Column_Name |
ColumnType |
mig_fn_get_datatype_short_name (data_Type) |
ColumnLength |
character_maximum_length |
DecimalTotalDigits |
numeric_precision |
DecimalFractionalDigits |
numeric_scale |
databasename |
table_schema |
tablename |
table_name |
ColumnId |
ordinal_position |
迁移dbc.columns时,假设以下条件成立:
- FROM子句仅包含dbc.columns的TABLE NAME。
- COLUMN NAME为以下任一格式:column_name或schema_name.table_name.column_name。
以下场景不支持dbc.columns迁移:
- FROM子句包含dbc.columns表名的别名(dbc.columns别名)。
- dbc.columns与其他表组合(FROM dbc.columns alias1,table1 alias2 OR dbc.columns alias1 join table1 alias2)。
- 如果输入的SELECT语句直接包含dbc.columns的列名,则该工具会将输入的列名称迁移为别名。例如,输入列名称DecimalFractionalDigits会迁移为numeric_scale,其别名为DecimalFractionalDigits。
输入:
1 2 3 4 5 6
SEL columnid ,DecimalFractionalDigits FROM dbc.columns ;
输出:
1 2 3 4 5 6
SELECT ordinal_position columnid ,numeric_scale DecimalFractionalDigits FROM information_schema.columns ;
- 关于表名和模式名称,迁移工具会将所有字符串值转换为小写。如果要区分大小写,使用双引号表示表/模式名称。在以下输入示例中,“Test”不会转换为小写。
1 2 3 4 5 6
SELECT TableName FROM dbc . columns WHERE dbc.columns.databasename = '"Test"';
输入:dbc.columns table,指定所有支持列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
SELECT '$AUTO_DB_IP' ,objectdatabasename ,objecttablename ,'$TX_DATE_10' ,'' ,'0' ,FirstStepTime ,FirstRespTime ,RowCount ,cast(RowCount*sum(case when T2.ColumnType ='CV' then T2.ColumnLength/3 else T2.ColumnLength end) as decimal(38,0)) ,'3' ,'' ,'BAK_CLR_DATA' ,'2' ,'' FROM TMP_clr_information T1 inner join dbc.columns T2 on T1.objectdatabasename =T2.DatabaseName and T1.objecttablename =T2.TableName where T2.DatabaseName not in ( sel child from dbc.children where parent='$FCRM_DB' ) group by 1,2,3,4,5,6,7,8,9,11,12,13,14,15; |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
SELECT '$AUTO_DB_IP' ,objectdatabasename ,objecttablename ,'$TX_DATE_10' ,'' ,'0' ,FirstStepTime ,FirstRespTime ,RowCount ,CAST( RowCount * SUM ( CASE WHEN mig_fn_get_datatype_short_name ( T2.data_Type ) = 'CV' THEN T2.character_maximum_length / 3 ELSE T2.character_maximum_length END ) AS DECIMAL( 38 ,0 ) ) ,'3' ,'' ,'BAK_CLR_DATA' ,'2' ,'' FROM TMP_clr_information T1 INNER JOIN information_schema.columns T2 ON T1.objectdatabasename = T2.table_schema AND T1.objecttablename = T2.table_name WHERE NOT EXISTS ( SELECT child FROM dbc.children WHERE child = T2.table_schema AND( parent = '$FCRM_DB' ) ) GROUP BY 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,11 ,12 ,13 ,14 ,15 ; |
输入:dbc.columns table,指定表名
1 2 3 4 5 6 7 8 9 10 |
SELECT TRIM( ColumnName ) ,UPPER( dbc.columns.ColumnType ) FROM dbc . columns WHERE dbc.columns.databasename = '"Test"' ORDER BY dbc.columns.ColumnId ; |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SELECT TRIM( Column_Name ) ,UPPER( mig_fn_get_datatype_short_name ( information_schema.columns.data_Type ) ) FROM information_schema.columns WHERE information_schema.columns.table_schema = CASE WHEN TRIM( '"Test"' ) LIKE '"%' THEN REPLACE( SUBSTR( '"Test"' ,2 ,LENGTH( '"Test"' ) - 2 ) ,'""' ,'"' ) ELSE LOWER( '"Test"' ) END ORDER BY information_schema.columns.ordinal_position ; |