首页 > 解决方案 > 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

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

提前致谢。

标签: sqldb2ibm-midrangerpgle

解决方案


没有小数位的六位数字 (6P 0) 的取值范围为 -999999 到 999999。

一个小整数列的取值范围是 -32768 到 32767..

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

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


推荐阅读