Вставка смешанного поля DB2 с помощью альфа-строк и упакованные десятилетия

StackOverflow https://stackoverflow.com//questions/21003167

Вопрос

Ниже представляет собой расположение таблицы / файла для «SH.PROM», таблицы DB2 в AS / 400, которая отвечает за рендурирование ежемесячно Advention предметов на протяжении всей нашей системы. Любой, кто не знаком с типичными макетами стола, должен знать, что обычно есть три столбца: F00001, K00001 и F00002. Иногда в наше появляется четвертый (K00002). В нашей системе F00002 обычно содержит несколько подполей, которые я имел предоставил имя, позицию, длину и типы данных. Что-нибудь в столбце Notes, помеченные «пушистым» означает обнуление или «разнесенные» на символах EBCDIC, так что не важно с точки зрения данных, но все равно должно быть там правильно.

        Field   Pos.  Len.  Name      Type     Notes
        ---------------------------------------------
        F00001    1     2   MACT      Alpha    Activity Code, Always 1 or 9 (active/inactive)
        K00001    1    20   MITEM     Alpha    Item Number
        K00001   21     2   MP        Alpha    Unknown title, Always 'P'
        K00001   23     2   MPITCL    Alpha    Unknown title, Always 'P' or 'I'
        F00002    1     8   MSTDAT    Integer  Promotion Start Date, MMDDYY0F
        F00002    9     8   MEXDAT    Integer  Promotion End Date, MMDDYY0F
        F00002   17     8   MLIST     Decimal  Amount to be subtracted from original price
        F00002   25     8   MRETAL    Decimal  Fluff, 0000000f
        F00002   33     8   MCOST     Decimal  Fluff, 0000000f
        F00002   41    10   MQTY      Decimal  Fluff, 000000000f
        F00002   51     6   MPCHNG    Integer  Fluff, 00000f
        F00002   57    12   MNPEFT    Alpha    Fluff, 404040404040
        F00002   69     8   MNSTDT    Integer  Fluff, 0000000f
        F00002   77     8   MNEXDT    Integer  Fluff, 0000000f
        F00002   85     8   MNLST     Decimal  Fluff, 0000000f
        F00002   93     8   MPNRTL    Integer  Fluff, 0000000f
        F00002  101     8   MNCOST    Decimal  Fluff, 0000000f
        F00002  109     8   ZZ14      Alpha    Fluff, 40404040
        F00002  117     8   MALPHA    Alpha    Fluff, 40404040
        F00002  125   170   ZZ64      Alpha    Fluff, 40404040404040...
.

У меня есть проблемы, вставляющие эти даты начала / конца продвижения.

Если я вставку данные в столбец F00002 в виде строки, она автоматически преобразует на номера EBCDIC:

    INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP','0201140F0228140F...')
.

(*** Трейлинг точек на данных F00002 вставки означает, что остальные следует за макетом файла / таблицы выше.)

и f00002 как целое число, просто чтобы попробовать:

    INSERT INTO "SH.PROM" (F00001,K00001,F00002) VALUES ('1','0000620311PP',0201140...)
.

Столбец опускает левый накладной нулю и снова преобразует его на символы EBCDIC.

Вот пример существующего поля F00002, а также два полезных Squirrelleshots :) «> Первый второй :

  08  01  13  0f  01  31  14  0f  00  00  38  0f  00  00  00  0f  00  00  00  0f  00  00  06  80  0f  00  00  0f  f0  f0  f0  f0  f0  f0  00  00  00  0f  00  00  00  0f  00  00  00  0f  00  00  00  0f  00  00  00  0f  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  
.

Как вставить это поле F00002, чтобы данные хранилищ правильно?

Это было полезно?

Решение

Правильное решение было бы снаружи описывать файл, используя Описание данных Технические характеристики (DDS) .

Наследие программы не будут проблем с доступом к файлу описанного извне.

После того, как он будет описан извне, вы можете получить доступ к полям нормально и дать конвертацию типа обрабатываемой базы данных.

Вот образец для начала.Без фактических спецификаций ввода от источника программы я догадался в десятичных местах для цифровых полей.

A          R PROM
A            MACT           2A
A            MITEM         20A
A            MP             2A
A            MPITCL         2A
A            MSTDAT         8S 0
A            MEXDAT         8S 0
A            MLIST          8S 2
A            MRETAL         8S 2
A            MCOST          8S 2
A            MQTY          10S 0
A            MPCHNG         6S 0
A            MNPEFT        12A
A            MNSTDT         8S 0
A            MNEXDT         8S 0
A            MNLST          8S 2
A            MPNRTL         8S 2
A            MNCOST         8S 2
A            ZZ14           8A
A            MALPHA         8A
A            ZZ64         170A
A          K MITEM
A          K MP
A          K MPITCL
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top