7.12.1 CHANGE のパラメータ

FIELD

PRECISION

ROUND_UP

TO

FIELD

変更するフィールド、リスト、または拡張可能なグループ式の名前を指定します。

TO

FIELD パラメータで指定したフィールドに設定する新しい値を指定します。指定する新しい値として、別のフィールド名、英数字リテラル、数値リテラル、システム変数、プロセス・パラメータ、またはこれらを組み合わせた式を使用できます。

RDML フィールドを使用する場合、VALUE パラメータに以下のいずれかの「特別な」値を指定することもできます。

*NULL

すべての英数字フィールドがブランクに、またすべての数値フィールドが 0 に設定されます。

*NAVAIL

すべての数値フィールドが 0 に、また 3 文字未満のすべての英数字フィールドがブランクに設定されます。3 文字以上の英数字フィールドは、そのフィールドに収まる分の "N/AVAIL" に設定されます。

*DEFAULT

すべてのフィールドが、そのデータ・ディクショナリまたはプログラムで定義されているデフォルト値に設定されます。

*HIVAL

すべてのフィールドがそのフィールドの最大値に設定されます。すなわち、英数字フィールドの場合は、すべてのバイトが 16 進数 X'FF' に設定され、数値フィールドの場合は、すべての桁が 9 に設定され、符号がプラス (+) になります。

*LOVAL

すべてのフィールドがそのフィールドの最小値に設定されます。すなわち、英数字フィールドの場合は、すべてのバイトが 16 進数 X'00' に設定され、数値フィールドの場合は、すべての桁が 9 に設定され、符号がマイナス (-) に設定されます。

Visual LANSA アプリケーションでは、以下の特別なオプションを使用できます。

Change コマンドの特別なオプション

意味

*REMEMBERED_VALUE_FOR_USER

現行のフォームまたはファンクションにおいて、現行ユーザーの指定フィールドの値を記憶します。

*REMEMBERED_VALUE_FOR_USER_IN_SYSTEM

(現在のPCシステム内の) あらゆる状況において、現行ユーザーの指定フィールドの値を記憶します。

*REMEMBERED_VALUE_FOR_FUNCTION

現行のフォームまたはファンクションにおいて、すべてのユーザーの指定フィールドの値を記憶します。

*REMEMBERED_VALUE_FOR_SYSTEM

(現在の PC システム内の) あらゆる状況において、すべてのユーザーの指定フィールドの値を記憶します。

 

以下の表に、特別な値が指定された場合の RDMLX フィールドの動作について説明します (RDMLX のPacked および Signed フィールドの動作は、同じタイプの RDML フィールドと同じです)。

特殊値

FIELDのタイプ

*NULL

Integer、Float、または Boolean

Signed/Packed、すなわち *ZERO として扱われます (Boolean の場合、*ZERO は Off/False を意味します)。

*NULL

Date または Datetime

1900-01-01

*NULL

Time

午前零時 (00:00:00)

*NULL

Char、String、Binary、VarBinary、CLOB、BLOB

空の文字列。比較の場合は、*BLANKS と同じと見なされます。

BLOB および CLOB: ファイル名は空です。

*NAVAIL

Integer、Float、Time、またはBoolean

Signed/Packed、すなわち *ZERO として扱われます。

*NAVAIL

Date、Datetime、Binary、VarBinary

これらのフィールドには文字列を設定できないため、FFC エラーです。

*NAVAIL

Char、String、CLOB、BLOB

Alpha として扱われます。

BLOB および CLOB: ファイル名は"N/AVAILABLE" です。

*DEFAULT

指定しない

フィールドのデフォルト値

*SQLNULL

指定しない

フィールドに ASQN 属性が割り当てられていない場合は、FFC エラーです。それ以外の場合は OK です。

*HIVAL
*LOVAL

Integer

整数の最大値 (+符号) に設定されます。
整数の最小値 (-符号) に設定されます。フィールドに SUNS 属性が割り当てられている場合、最小値は *ZERO です。

*HIVAL
*LOVAL

Boolean

On/True に設定されます。
Off/False に設定されます。

*HIVAL

*LOVAL

Float、Date、Time

論理的な最小値または最大値が存在せず、特に Date については、データベースによってサポートされる値が異なるため、FFC エラーです。

*HIVAL

*LOVAL

Datetime

*TIMESTAMP_HIVAL

*TIMESTAMP_LOVAL

*REMEMBERED_VALUE*

CLOB、BLOB、Date、Time、Datetime、Integer、Float、Boolean

現行フィールドに従ってレジストリに文字列として保管されます。

*REMEMBERED_VALUE*

Char、String

保管できる文字列のサイズに制限がある場合があります (Char/String は最大64Kb)。制限があり、フィールド・サイズがその制限を超えた場合は、FFCエラーです。制限がないか、フィールド・サイズが制限内の場合は、現行フィールドに従ってレジストリに Stringとして保管されます。

*REMEMBERED_VALUE*

Binary、VarBinary

保管できる文字列のサイズに制限がある場合があります (Binary/VarBinary は最大32Kb)。制限があり、フィールド・サイズがその制限を超えた場合は、FFC エラーです。制限がないか、フィールド・サイズが制限未満の場合は、レジストリに Binary として保管されます。

 

PRECISION

数式に対してのみ使用し、RDML コンパイラーによって生成される中間作業フィールドに使用する精度を指定します。

数式の評価時に、RDML コンパイラーはデフォルトで、中間作業フィールドの精度を計算しようとします。この処理は、このパラメータが指定されなかった場合や、デフォルト値が指定された場合に実行されます。

このロジックでは、先頭 (または有効) 桁の精度が優先されるため、場合によっては、小数部の精度が失われることがあります。PRECISION パラメータは、中間作業フィールドで必要な精度を手作業で指定するために用意されています。

例えば、数値 9,2 と数値 15,9 を掛け合わせる場合、このロジックでは、一方の数値 (9,2) の先頭桁が 7桁であると判断されます。そのため、中間計算では、同じく先頭桁が 7 である 15,8 の作業フィールドが使用され、これによって小数部の精度が失われる可能性があります。

この問題を解決し、中間作業フィールドで強制的に定義済みの精度が使用されるようにするには、PRECISION パラメータを使用します。

このパラメータでは、2 つの値を指定します。最初の値では、すべての中間作業フィールドに保持する合計桁数(小数部を含む) を指定し、2 番目の値では、その合計桁数のうち小数点以下桁数は何桁かを指定します。PRECISION パラメータを指定するときは、合計桁数と小数点以下桁数の両方を指定してください。

例えば、PRECISION(15 6) は、合計桁数が 15 桁で、そのうち 6 桁が小数点以下であることを示します。すなわち、作業フィールドの先頭桁 は9 桁、小数点以下は 6 桁です。

通常、必要な小数点以下桁数が、式に含まれるどのフィールドの小数点以下桁数よりも小さい場合に、PRECISION パラメータをコード化することは稀です。

参照

フィールド・タイプ

ROUND_UP

数式および datetime 式に対してのみ使用し、FIELD パラメータで指定された結果フィールドに保管する前に、式の結果を「切り上げる」かどうかを指定します。

このパラメータを指定しないか、値 *NO を指定すると、結果フィールドに収まらない小数部は切り捨てられます。

例えば、整数値 3 を整数値 2 で割り、その結果を整数フィールドに保管すると、結果は 1 になります。

ただし、ROUND_UP パラメータと適切な PRECISION パラメータを使用すれば、結果は整数値 2 になります。

PRECISION パラメータは、必ず ROUND_UP パラメータと組み合わせて使用してください。こうすることで、式の評価に使用されるすべての中間作業フィールドの小数点以下桁数が、FIELD パラメータで指定されたフィールドよりも 1 桁以上大きくなります。

関連する中間作業フィールドの小数点以下桁数が、FIELD パラメータで指定されたフィールドより 1 桁以上大きくない場合、ROUND_UP パラメータは無視され、ROUND_UP(*NO) が指定されたかのように扱われます。

Datetime フィールドの秒の小数部 は0~9 です。長い Datetime を短い Datetime に割り当てる場合、デフォルトでは、秒の小数部が切り捨てられます。ROUND_UP を指定すると、適切な場合に、秒の小数部が切り上げられます。

ROUND_UP パラメータを使用した場合、RPG の「四捨五入」機能を使用した場合と同じ結果になります。実際、ROUND_UP パラメータを使用すると、中間作業フィールドから (変換されたRPG内の) 結果フィールドに最終的にマッピングするときに、(中間作業フィールドの小数点以下桁数が結果フィールドより大きい場合は) RPG の「四捨五入」オプションが使用されます。

「四捨五入」機能の仕組みの詳細については、適切な RPG マニュアルで参照できます。

移植性に関する考慮事項

この値として *YES を指定する場合、プラットフォーム間で一貫性のある結果を得るために、適切な PRECISION 値を指定してください。この規則に従わないと、コードを複数のプラットフォームに移植したときに、丸めた値にばらつきが生じる可能性があります。