FILLERの扱い方(数値、文字)
FILLERで設定した部分は、元のDBは保証されるのでしょうか?
具体的にどの様な設定をすればよいか教えて下さい。
例:受注DB (Oracleの例)
受注番号 NUMBER(6)
受注年月日 VARCHAR2(8)
契約先名 VARCHAR2(30)
品目コード VARCHAR2(9)
台数 NUMBER(5)
受注金額 NUMBER(9)
受注担当者 VARCHAR2(7)
COBOL記述(このCOBOLは、受注担当者のみ利用)
01 JREC.
02 FILLER PIC X(67).
02 TANTOU PIC X(07).
この定義でREAD/WRITE/REWRITE命令を実行したときにFILLER部は保証されるのでしょうか。
READ/WRITE/REWRITEについて、以下の通りとなります。
・READについては、表定義(の列名規則)に従ったCOBOLデータ型へ変換されます。
つまり、それなりの形で変換されます。
・WRITE/REWRITEについては、FILLER項目についても、表定義(の列名規則)に
従ったCOBOLデータ型が指定されているものとしてDBデータ型への変換が
行われ、不正なデータが格納されていると命令が失敗します。
つまり、FILLERだからといって、放置していると、予期せぬ結果になります。
SPACEを格納しておけば、NUMBER列についても 0 に変換してDBに格納しますの
で、エラーは発生しません。しかしこの場合は、当該データをREADした場合
にはSPACEではなくゼロで取得してしまいます。この点に問題がある場合は、
やはりFILLERではなく、基本項目を定義して、INITIALIZEで初期化すべきです。
もちろん、READ後に「受注担当者」のみを更新しREWRITE CURRENTした場合は、
FILLERのデータは更新しない(もしくは同じデータをREWRITEしようとする)ので、
異なる値になることはありません。