为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm V8 (小版本是2026年1月份)
【操作系统】:
【CPU】:
【问题描述】*:
需要支持,业务需要,如果转换成其他类型,修改较多
检查一下 当前版本是否支持 DECIMAL_ENHANCED参数
确定一下是jdbc链接入库会有问题,使用的jar版本是DmJdbcDriver18-8.1.1.193.jar,报错信息如下:发生错误: 数字溢出
dm.jdbc.driver.DMException: 数字溢出
at dm.jdbc.driver.DBError.throwException(DBError.java:710)
at dm.jdbc.driver.DmdbNumeric.checkPrec(DmdbNumeric.java:416)
at dm.jdbc.driver.DmdbNumeric.parse(DmdbNumeric.java:161)
at dm.jdbc.driver.DmdbNumeric.valueOf(DmdbNumeric.java:86)
at dm.jdbc.convert.J2DB.fromBigDecimal(J2DB.java:325)
at dm.jdbc.driver.DmdbPreparedStatement.do_setBigDecimal(DmdbPreparedStatement.java:759)
at dm.jdbc.driver.DmdbPreparedStatement.setBigDecimal(DmdbPreparedStatement.java:1651)
at com.ums.amr.webapi.internetApply.controller.AmInternetApplyController.main(AmInternetApplyController.java:537);
看着jar里面的代码确实不能超过38位,

在不同的达梦版本里分别作一下试验,可靠是不是高一些的版本里NUMBER类型能支持39位长的十进制数字。
我在手头测试环境试了下,20221020的版本不行,但20231226及之后版本的貌似正常。
你可以用下面这个脚本测试下看看
DROP TABLE IF EXISTS T_IPV6TST; CREATE TABLE T_IPV6TST ( IP VARCHAR2(64), IPDEC NUMBER ); INSERT INTO T_IPV6TST VALUES('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',340282366920938463463374607431768211455) ,('fe80::1',338288524927261089654018896841347694593); COMMIT; SELECT ID_CODE,* FROM T_IPV6TST下面图里是我这的测试结果
