DATEPROC(FLAG) コンパイラー・オプションが有効である場合、日付フィールドを定義または参照しているすべてのステートメントについて、コンパイラーは診断メッセージを作成します。
コンパイラー生成のすべてのメッセージと同じく、日付関連の各メッセージも以下の重大度レベルの 1 つを持っています。
- 通知レベル。これは、日付フィールドの定義または使用に注意を喚起するためのものです。
- 警告レベル。プログラムにコーディングされている情報が不十分なために、日付フィールドまたは非日付に関してコンパイラーがなんらかの仮定を設定したことを示すため、または正しいことを手作業で検査しなければならない日付ロジックの場所を示すためのものです。コンパイルは続行し、仮定は適用されます。
- エラー・レベル。日付フィールドの使い方が誤っていることを表します。
コンパイルは継続されますが、ランタイムの結果は予測不能です。
- 重大レベル。日付フィールドの使い方が誤っていることを表します。このエラーが生成される原因となったステートメントは、コンパイルから廃棄されます。
MLE メッセージを最も簡単に使用するには、FLAG オプション設定を使用してコンパイルします。これによって、ソース・リストの中でメッセージの参照する行の直後にメッセージが出力されるようになります。すべての MLE メッセージを表示したり、重大度によって選択したりできます。
すべての MLE メッセージを表示するには、FLAG(I,I) および DATEPROC(FLAG) コンパイラー・オプションを指定します。自分のプログラム内の日付フィールドが MLE でどのように処理されるかを理解するため、最初はすべてのメッセージを表示することをお勧めします。例えば、コンパイル・リストを使用してプログラム内のデータ使用の静的分析をしたい場合は、FLAG (I,I) を使用してください。
しかし、MLE 固有のコンパイルでは FLAG(W,W) を指定することをお勧めします。重大レベル (S レベル) エラー・メッセージとエラー・レベル (E レベル) メッセージはすべて訂正する必要があります。警告レベル (W レベル) のメッセージについては、各メッセージを調べ、以下の指針に従って、メッセージを除去するか、または回避不能なメッセージの場合はコンパイラーが正しい仮定を行うようにしなければなりません。
- 診断メッセージが、DATE FORMAT 節を持っていなければならない日付データ項目を示すことがあります。これらの項目に DATE FORMAT 節を追加するか、またはこれらの項目への参照で DATEVAL 組み込み関数を使用してください。
- 日付フィールドを対象にする比較条件の中、または日付フィールドを含む算術式の中でリテラルを使用する場合には、特別な注意が必要です。リテラル (および非日付データ項目) に DATEVAL 関数を使用して、使用する DATE FORMAT パターンを指定することができます。UNDATE 関数は、最後の手段として、日付中心の動作を望まないコンテキストで使用される日付フィールドを使用可能にするために使用することができます。
- REDEFINES および RENAMES 節が指定されている場合、日付フィールドと非日付が同じ保管場所を占有していると、コンパイラーは警告レベルの診断メッセージを出すことがあります。このような場合には注意深く調べて、種々の別名の付いたデータ項目のすべての使い方が正しいこと、および非日付と認識された再定義が実際にどれも日付でないこと、またはプログラム内の日付ロジックに悪影響を与えていないことを確認してください。
W レベル・メッセージが出ても気にしなければいいのですが、コードを変更して戻りコード = 0 のコンパイルを達成するのも良い方法です。
警告レベルの診断メッセージを回避するには、以下の簡単な指針に従ってください。
- 日付が入るデータ項目には DATE FORMAT 節を追加してください。その項目が比較で使用されない場合でもそのようにします。ただし、日付フィールドの使用上の制約事項に関しては、以下の関連参照を参照してください。
例えば、暗黙的または明示的に USAGE NATIONAL として記述されているデータ項目では DATE FORMAT 節を使用できません。
- 日付フィールドが意味をなさないコンテキスト、例えば FILE STATUS、PASSWORD、ASSIGN USING、LABEL RECORD、または LINAGE 項目などでは、日付フィールドを指定しない。指定すると、警告レベルのメッセージが出されて、日付フィールドが非日付として扱われます。
- 日付フィールドの暗黙の別名または明示された別名が、日付フィールドだけからなるグループ項目などの中で互換性があることを確認する。
- 日付フィールドが VALUE 節を定義されている場合、その値が日付フィールド定義と互換性があることを確認する。
- 非日付を日付フィールドとして扱いたい場合 (例えば、非日付を日付フィールドに移動する場合や、ウィンドウ表示日付を非日付と比較する場合など) で、ウィンドウ表示日付比較を行う場合は、DATEVAL 組み込み関数を使用する。DATEVAL を使わないと、コンパイラーは非日付の使用に関してある仮定を行い、警告レベルの診断メッセージを作成します。その仮定が正しくても、DATEVAL を使用すればメッセージを排除できます。
- 日付フィールドが非日付として処理されるようにしたい場合は、UNDATE 組み込み関数を使用してください。
例えば、日付フィールドを非日付へ移動させる場合や、ウィンドウ表示比較を行いたくないときに非日付とウィンドウ表示日付フィールドを比較する場合などです。