注册

某些类型元信息获取到列长度有误,如何解决?

哈库纳 2023/07/14 1045 3

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: v8 最新版
【操作系统】:任意
【CPU】: 任意
【问题描述】*:数据库源信息数据有问题

目标测试表结构

create table tb_dm_types_for_v8_2 ( c_id bigint primary key, c_character_varying character varying(24), c_character_varying_b character varying(24 byte), c_character_varying_c character varying(24 char), c_char_varying char varying(24), c_char_varying_b char varying(24 byte), c_char_varying_c char varying(24 char) );

查询元信息所使用的 SQL 语句

select TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_ID,DATA_LENGTH,CHAR_LENGTH,DATA_PRECISION,DATA_SCALE from SYS.DBA_TAB_COLS COLS where TABLE_NAME in ('TB_DM_TYPES_FOR_V8_2') order by COLUMN_ID asc

查询结果
image.png

其中列 c_character_varying_c 和 c_char_varying_c 说能存 48个字符,试了不行仍然只能存 24个字符。 CHAR_LENGTH 字段在这种情况下没有数据。

-- 补充一下 character/varchar/varchar2/nvarchar 上述情况可以使用 CHAR_LENGTH 字段获取到真实值。

数据库运行结果符合预期,但是程序这边需要基于这个元信息中的长度数据。导致程序在这个情况下就无法正常工作了。

请问如何才能得到列可以存储数据的真实长度? 那个 48 是如何得来的?

搜了达梦 DBA 手册开发手册中没有找到 DBA_COL_COMMENTS、DBA_TAB_COLS 这两个 oracle 兼容表的数据字典描述。

回答 0
暂无回答
扫一扫
联系客服