sql - SQLRPGLE 无法插入记录 - 尝试将压缩十进制插入整数字段的转换错误
问题描述
我遇到了一个必须在表中插入记录的 SQLRPGLE 程序的问题。
我一直在使用 strdbg 命令调试我的程序,当我尝试将该值插入整数字段时,我发现问题是由我的数据结构中名为 Mes 的压缩十进制字段引起的。
源数据结构定义(DS中的第一个字段是假设需要转换的字段):
D DataDS DS QUALIFIED TEMPLATE
D Mes 6P 0
D Unidad 2P 0
D Subunidad 3P 0
D Grupopas 8P 0
D Productor 8P 0
D Asegurado 9P 0
. . .
. . .
. . .
目标字段是一个整数。
P Exportar...
P B
D PI
D data DS LIKEDS(DataDS)
/free
ClrBI();
CLEAR data;
EXEC SQL DECLARE B1 CURSOR FOR
SELECT MES,UNIDAD, SUBUNIDAD, GRUPOPAS,
PRODUCTOR, ASEGURADO, RAMA, TIPO_MOVIM,
SUCURSAL,IFNULL(FACULTATIV,' '), CONDIC_IVA,
UNIDAD_FC, SUBUNID_FC, GRUPOPR_FC,
MATRICULA, CANALCOBRO, IFNULL(CANALCOBRX,' '),
PRIMACOB, PREMIOCOB, DEREMICOB,
RECADMCOB, RECFINCOB, IVACOB,
PER_IVACOB, ACR_IVACOB, ISSCOB,
INTERNOCOB, PER_IBRCOB, COMISICOBR,
COMISIAGEN,COMISIORGA,COMISIOTRS
COMISITOT
FROM BICOBRANZA
WHERE MES = :mes;
EXEC SQL OPEN B1;
EXEC SQL FETCH NEXT FROM B1 INTO :data;
DOW SQLCOD = 0;
SetBI(data);
CLEAR data;
EXEC SQL FETCH NEXT FROM B1 INTO :data;
ENDDO;
EXEC SQL CLOSE B1;
/end-free
P E
这是我第一次看到这样的错误。以前有人遇到过这个问题吗?我什至不知道从哪里开始。
提前致谢。
解决方案
没有小数位的六位数字 (6P 0) 的取值范围为 -999999 到 999999。
一个小整数列的取值范围是 -32768 到 32767..
只要您的打包字段值适合,铸造就可以正常工作。
您需要将 DB 列设为大(4 字节(10 位))或大(8 字节(20 位))整数。
推荐阅读
- c# - 使用一般矩阵向量乘法的最小二乘,而不是稀疏矩阵
- docker - 如何为单个服务同步重新创建 docker 容器?
- jenkins - Jenkins 管道无法在本地执行 kubectl(使用 minikube)
- angular - 在 API PUT 调用和 API GET 调用之后,组件没有获取更新的数据
- vue.js - 迁移“插槽”不推荐使用的语法
- gcc - 如果单独调用链接器,GCC 交叉编译结果会抛出错误
- html - 如何更改导航栏位置?
- laravel - 干预图像 - 无法打开输入文件:composer.phar
- in-app-billing - 如何区分可消费产品和非消费产品?
- azure - 限制 Azure WebJobs 在周末和节假日运行