【问题标题】:SQLRPGLE Cannot insert record - Cast error trying to insert packed decimal into integer fieldSQLRPGLE 无法插入记录 - 尝试将压缩十进制插入整数字段的转换错误
【发布时间】:2019-11-06 19:25:42
【问题描述】:

我遇到了一个必须在表中插入记录的 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代码? SQLSTATE?
  • 我没有看到插入,哪个语句导致了错误?
  • 我还想查看 BICOBRANZA 的相关字段,因为这是您尝试插入数据结构的内容。

标签: sql db2 ibm-midrange rpgle


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2017-01-13
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多