データベース ロード変換の問題

16 進値を指定する DBD 文は、Load 関数を使用して IMS データベースをロードする際に問題が生じる原因になるため、特に注意してください。

問題

一部の文には 16 進値に依存する条件が含まれますが、データベースをロードする際にその 16 進値は EBCDIC から ASCII に変換されます。

この例では、XDFLD 文にある NULLVAL パラメーターは 16 進値を使用して 2 次索引を定義し、索引キーの値に 16 進値が含まれる場合に 2 次索引の作成を抑制します。次に例を示します。

XDFLD NAME=STREX013, SEGMENT=, NULLVAL=X'40',

データベースをロードしてデータを EBCDIC から ASCII に変換する際、x'40' を含んでいるフィールドは x'20' に変換されます。これにより、Load 関数はキー値 x'20' を持つ複数のセグメントを挿入し、重複キー値が生じて挿入が失敗することになります。しかし、ここでの文の目的は索引セグメントの生成を抑制することです。

解決方法

この問題を解決するには、16 進値を ASCII に変換された同等の値に変更します。次に例を示します。

XDFLD NAME=STREX013, SEGMENT=, NULLVAL=X'20',

次に、DBD ソースをコンパイルして Load 関数を使用しデータベースをロードします。