物理ファイルでNull(ヌル)データを生成するには
Question
IBM i(AS/400)の物理ファイル(PF)でNULL(ヌル)を扱う方法を教えてください。
対象のフィールドのキーワードにALWNULL(ヌル値の許容)を指定して物理ファイル(PF)を作成し、RPGⅢでそのフィールド以外にデータをセットしてレコードを追加(ADD)しました。
ALWNULL (ヌル値の許容)を指定したフィールドを16進で見るとブランクのX'40が入っていました。
ブランクのX'40とNULL(ヌル)を分けてデータを作る必要があります。
フィールドに入っているデータをNULL(ヌル)で作成したいのですが、どのようにすると生成されますでしょうか。
Answer
残念ながら、RPGⅢでNULL(ヌル)の含んだPFにレコードを追加することはできないようです。
ILE-RPG(RPGⅣ)であれば、可能です。
まず、物理ファイル(PF)にはALWNULLとDFTを指定しておきます。
例)
A FAT003 10O DFT(*NULL)
A ALWNULL
そしてILE-RPG(RPGⅣ)で以下のようにコーデイングします。
例)
C EVAL %NULLIND(FAT003) = *ON
フリーフォームの場合は以下のようにコーデイングします。
例)
/FREE
%nullind(FAT003) = *ON;
/END-FREE
どちらでも構いませんので使いやすい方でコーデイングしてみてください。
そして、コンパイル時のパラメタで「ヌル値可能(ALWNULL)」を「*USRCTL」にしてください。
NULL(ヌル)データができると、WRKDBM(TOOLBOX)やDSPF、QUERYコマンドでは正しく見ることができなくなります。
DFUで該当のレコードを見てみると、以下のようになります。
DFU0849:フィールド FAT003 がヌル値である。ヌル値フィールドが見つかりました。
いかがでしょうか。宜しければ是非お試しください。
【参考情報】
%NULLIND (ヌル標識の照会または設定) https://www.ibm.com/docs/ja/i/7.4?topic=functions-nullind-query-set-null-indicator
ALWNULL (ヌル値の許容) キーワード - 物理ファイルのみ
https://www.ibm.com/docs/ja/i/7.4?topic=80-alwnull-allow-null-value-keywordphysical-files-only
by けやきのじぃじ