Alpha文字列とパックされた小数点を両方のアルファ文字列を含む混合DB2フィールドの挿入

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

質問

下記は、システム全体の毎月 Progision>項目をレンダリングする責任があるAS / 400のDB2テーブルの表/ファイルレイアウトです。典型的な表レイアウトに慣れていない人は、通常3列の列があることを知っておく必要があります.F00001、K00001、F00002。時々4分の1が私たちの中に現れる(K00002)。私たちのシステムでは、F00002は通常、私が指定した名前、位置、長さ、およびデータ型を提供している複数のサブフィールドを保持します。 Notes列のラベルの付いた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フィールドと2つの役立つリスホットの例です。 ">最初の second

  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