SQLRPGLE无法插入记录-尝试将压缩的十进制插入整数字段时发生转换错误

问题描述 投票:0回答:1

我的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

这是我第一次看到这样的错误。有人遇到过这个问题吗?我什至不知道从哪里开始。

提前感谢。

sql db2 ibm-midrange rpg
1个回答
0
投票

不带小数位的6位数字(6P 0)的值范围为-999999至999999。

小整数列的值范围为-32768到32767。

只要您打包的字段值合适,铸造就可以正常工作。

您需要使DB列为大(4字节(10位数字))或大(8字节(20位数字))整数。

© www.soinside.com 2019 - 2024. All rights reserved.