変更の始まり

VALIDATE(*NODATETIME)

VALIDATE キーワードは、日付データ、時刻データ、およびタイム・スタンプ・データ が、使用される前に検証される必要があるかどうかを指定します。

このキーワードが指定されていない場合、日付データ、時刻データ、およびタイム・スタンプ・データは、 使用される前に検証されます。

*NODATETIME が指定されている場合、コンパイラーは、 日付データ、時刻データ、およびタイム・スタンプ・データの検証の実行を省略します。

このキーワードを指定することによって RPG プログラムのパフォーマンスが向上する可能性があります。 場合によっては、コンパイラーは、日付データ、時刻データ、およびタイム・スタンプ・データ を英数字データであるかのように扱って、実際の日付データ、時刻データ、およびタイム・スタンプ・データを処理する高コストの操作を 回避できます。

VALIDATE(*NODATETIME) で検証が省略されるいくつかの例を以下に示します。
  • タイム・スタンプ・フィールドが、比較、ソート、または検索操作で使用される場合、 比較中にはタイム・スタンプ・フィールドの検証は行われません。
  • 日付形式 *ISO または *JIS の日付フィールド が、比較、ソート、または検索操作で使用される場合、比較中には日付フィールドの検証は行われません。
  • 時刻形式が *USA 以外である時刻フィールドが、比較、ソート、 または検索操作で使用される場合、比較中には時刻フィールドの検証は行われません。
  • 日付データ、時刻データ、またはタイム・スタンプ・データの代入が行われ、 ソースとターゲットの形式および区切り記号が同じである場合、 代入の前にソースの検証は行われません。 これは、代入演算、定数参照で渡されるパラメーターおよび値参照で 渡されるパラメーターの一時的な値への代入、RETURN 命令、 入力仕様のためのフィールド移動、および出力仕様のためのフィールド移動にも当てはまります。
  • 日付データ、時刻データ、またはタイム・スタンプ・データがフィールド突き合わせ処理または制御レベル 処理のために比較される場合、データが *ISO 形式の場合はデータの検証は行われません。
注意:

検証が行われないと、不正データは検出されません。

このキーワードは、すべての日付フィールド、時刻フィールド、およびタイム・スタンプ・フィールドに含まれているデータが 常に有効であると確信できる場合にのみ使用してください。 例えば、デフォルトの初期設定がブランクであるデータ構造の場合、 日付サブフィールド、時刻サブフィールド、およびタイム・スタンプ・サブフィールドは、 無効な値であるブランクで初期化されます。 VALIDATE(*NODATETIME) を指定して、これらのサブフィールドのいずれかを 使用した場合、無効なデータが操作で使用されることになります。さらに、代入を介してプログラム内の他のフィールドに 無効データが伝搬されたり、比較操作で無意味な結果になったりする可能性があります。

この注意事項は、省略される検証のリストに入っていない、日付、時刻、およびタイム・スタンプの操作 にも当てはまります。 将来、VALIDATE(*NODATETIME) が指定された場合に省略される検証が追加 される可能性があります。

推奨事項:
  • 使用する日付データ、時刻データ、およびタイム・スタンプ・データが常に有効であると確信がある場合は、 次のようにします。
    • 可能な場所では、日付フィールドに *ISO または *JIS 形式を使用し、 時刻フィールドに *USA 以外の形式を使用します。 これによって、比較および代入を伴う操作が、データが英数字であるかのように実行されることが可能になります。
    • それ以外の場合、可能な場所ではすべての日付フィールドおよび時刻フィールドに同じ形式を使用します。 これによって、代入を伴う操作が、データが英数字であるかのように実行されることが可能になります。
  • 使用する日付データ、時刻データ、およびタイム・スタンプ・データが常に有効であるとの確信がない場合は、 VALIDATE(*NODATETIME) キーワードを指定しないでください。 このキーワードは、不必要な検証を除去することのみを目的としています。 正しくない日付データ、時刻データ、またはタイム・スタンプ・データをエラーなしで使用できるようにするという目的ではありません。
変更の終わり