как обновить таблицу из файла с десятичным полем? - PullRequest
0 голосов
/ 16 декабря 2010

Я пишу программу cobol для чтения файла PS и обновления таблицы DB2 на основе флага, установленного в файле PS.Одно из полей в файле объявлено как десятичное поле в программе cobol.Но когда я пытаюсь обновить это поле в таблице, отображается ошибка.Что я должен объявить в таблице то же поле и как мне написать оператор обновления для поля?

Имя поля - это зарплата, которая имеет десятичную точку.

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Было бы гораздо полезнее, если бы вы разместили предложения PICTURE / USAGE для элемента данных в записи входного файла, а также для определения столбца DB / 2.

Однако это выглядит многокак проблема преобразования данных.Вот что нужно проверить:

  • Имеет ли запись входного файла PICTURE / USAGE что-то вроде PIC 9(5).99.Ключевым моментом является то, что в объявлении есть явная десятичная точка.Если вы посмотрите на входной файл с помощью текстового редактора (например, редактора ISPF), вы увидите число, похожее на 12345.67.Эти числа в формате дисплея.Думайте о них как о тексте.

  • Определение столбца DB / 2.Десятичные числа в DB / 2 обычно объявляются примерно так: DECIMAL(7,2).Числа, объявленные таким образом, хранятся в DB / 2 в упакованном десятичном формате.

Номера форматов отображения, которые, вероятно, существуют во входном файле, не совместимы с упакованными десятичными числами (яблоки иапельсины).

Чтобы проиллюстрировать этот момент, рассмотрим следующую небольшую программу на языке COBOL:

IDENTIFICATION DIVISION.                          
PROGRAM-ID. EXAMPLE.                              
DATA DIVISION.                                    
WORKING-STORAGE SECTION.                          
01  A                  PIC 9(6).99.               
01  B                  PIC 9(6)V99 PACKED-DECIMAL.
PROCEDURE DIVISION.                               
    MOVE 123456.78 TO A                           
    DISPLAY 'A=' A                                
    MOVE A TO B                                   
    ADD 1 TO B                                    
    DISPLAY 'B=' B                                
    MOVE B TO A                                   
    DISPLAY 'A=' A                                
    GOBACK.                                       

Переменная A имеет формат отображения с явной десятичной точкой.Все, что вы можете сделать, это присвоить ему значение для отображения.Попытка сделать что-то вроде ADD 1 TO A приведет к ошибке компиляции.

Хитрость заключается в том, чтобы преобразовать числа в формате отображения в нечто, совместимое с DB / 2 (например, Packed Decimal).Глагол COBOL MOVE делает эту работу.Объявите новую переменную с типом данных, совместимым с тем, который используется DB / 2.Переменная B выше является такой переменной.Переместите отформатированную переменную отображения в переменную Packed Decimal, как в: MOVE A TO B.Среда выполнения COBOL выполняет это преобразование.

Обратите внимание, что теперь вы можете добавить что-то к B.Дисплей B (исчезает десятичная точка - я дам вам понять, почему).Затем верните его обратно в формат отображения, эй, вернулась десятичная точка.

DB / 2 принимает переменные хоста, которые приходят без преобразования.Если эта переменная хоста не имеет правильный формат данных, вы получите сообщение об ошибке.

Возможно, вам нужно сделать что-то вроде:

  Read Record
  MOVE record display data (eg. `A`) to a DB/2 compatible field (eg. `B`)
  EXEC SQL
     INSERT INTO table (
         ...
         SALARY,
         ...)
       VALUES (
         ...
         :B,
         ...)
  END-EXEC.
0 голосов
/ 16 декабря 2010

Тип десятичного поля содержит значение в формате, который не совместим с DB2 и должен быть преобразован перед выпуском нового значения в базу данных (при условии, что у вас есть права на запись или обновление для записи).Возможно, вам придется переместить его в поле PIC 9 (6) V.99 или аналогичное, а затем обновить запись DB2.COBOL - это язык программирования с различными представлениями данных для манипулирования, в то время как база данных предназначена для хранения данных в записи и может иметь меньше доступных форматов.

...