SQLRPGLE Невозможно вставить запись - Ошибка преобразования при попытке вставить упакованный десятичный знак в поле целого числа - PullRequest
1 голос
/ 06 ноября 2019

У меня проблема с программой 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

Это первый раз, когда я вижу такую ​​ошибку. Кто-нибудь сталкивался с этой проблемой раньше? Я даже не знаю с чего начать.

Заранее спасибо.

1 Ответ

2 голосов
/ 06 ноября 2019

Шестизначное число без десятичных цифр (6P 0) имеет диапазон значений от -999999 до 999999.

Небольшой целочисленный столбец имеет диапазон значений от -32768 до 32767 ..

Приведение будет работать нормально, если соответствует значение вашего упакованного поля.

Вам потребуется, чтобы столбец DB был большим (4 байта (10 цифр)) или большим (8 байтов (20 цифрами)) целым числом.

...