これらの事例の詳細については、『EGL での参照の互換性』を参照してください。
数値型 (NUMC および PACF を含む) の値は、任意の数値型とサイズのフィールドに代入できます。 EGL では、値をターゲットの形式で保持するために必要な変換が行われます。
必要な場合、有意でないゼロが追加または切り捨てられます。 (値の整数部分の先頭からのゼロは有意ではありません。 同様に、値の小数部分の末尾桁のゼロも有意ではありません。)
いずれの数値型の場合でも、システム変数 sysVar.overflowIndicator を使用すると、代入または算術計算によって算術オーバーフローが発生したかどうかをテストできます。また、システム変数 VGVar.handleOverflow を設定すると、そうしたオーバーフローの結果を指定できます。
算術オーバーフローが発生した場合、ターゲット・フィールドの値は変更されません。 算術オーバーフローが発生しない場合、ターゲット・フィールドに代入される値は、ターゲット・フィールドの宣言に従って桁合わせされます。
固定小数点型に浮動小数点値 (FLOAT 型または SMALLFLOAT 型) を代入すると、ターゲットの値は必要に応じて切り捨てられます。 例えば、ソース値が 108.357 で、固定小数点のターゲットの小数点以下の桁が 1 つの場合、ターゲットは 108.3 を受け取ります。
負の NUM 型の値が CHAR 型の値に代入される場合、フィールドにコピーされる最後のバイトは印刷不能文字となります。
この操作は、NUM から NUM への代入と同等です。
NUMC 型のターゲットの値が負の場合、CHAR 型のターゲットにコピーされる最後のバイトは、印刷不能文字となります。
// 2 月 30 日は有効な日付でないので無効 myTS timestamp("yyyyMMdd"); myTS = "20050230";
// 2 月に実行された場合は無効 myTS timestamp("dd"); myTS = "30";
ソース値を格納するためのスペースが文字型のターゲットで不足している場合は、EGL によって右側の値が切り捨てられます。通知されるエラーはありません。
このような場合、EGL は、MBCHAR 型の有効なストリングがターゲット項目に格納されるように文字を切り捨て、必要があれば、終端に単一バイトのブランクを付加します。
sourceTimeStamp timestamp ("MMdd"); targetTimeStamp timestamp ("yyyyMMdd"); sourceTimeStamp = "1201"; // このコードが 2004 年に実行された場合、次の文が // targetTimeStamp に 20041201 を代入する targetTimeStamp = sourceTimeStamp;
sourceTimeStamp02 timestamp ("ssff"); targetTimeStamp02 timestamp ("mmssff"); sourceTimeStamp02 = "3201"; // 次の代入は、分を含んでいる // それは、assignment 文が実行されたときの現行の分である targetTimeStamp02 = sourceTimeStamp02;
sourceTimeStamp timestamp ("yyyyMM"); targetTimeStamp timestamp ("yyyyMMdd"); sourceTimeStamp = "200412"; // 日に関係なく、次の文は // targetTimeStamp に 20041201 を代入する targetTimeStamp = sourceTimeStamp;
sourceTimeStamp02 timestamp ("hh"); targetTimeStamp02 timestamp ("hhmm"); sourceTimeStamp02 = "11"; // 分に関係なく、次の文は // targetTimeStamp02 に 1100 を代入する targetTimeStamp02 = sourceTimeStamp02;
副構造のあるフィールドを副構造のないフィールドに代入したり、その逆を行うことができます。 また、2 つの副構造フィールドの間で値を代入できます。 例えば、myNum および myRecord という名前の変数が、次のパーツに基づいているものとします。
DataItem myNumPart NUM(12) end Record ExampleRecordPart type basicRecord 10 topMost CHAR(4); 20 next01 HEX(4); 20 next02 HEX(4); end
数学システム変数の外側では、HEX 型の値を NUM 型の項目へ代入するのことは無効です。 しかし、myNum = topMost という書式の代入は、topMost が CHAR 型であるため有効です。 一般に、代入は、assignment 文内のフィールドのプリミティブ型に基づいて実行され、従属項目のプリミティブ型は考慮されません。
副構造のある項目のプリミティブ型は、デフォルトで CHAR に設定されています。副構造のあるフィールド にデータを代入したり、副構造のあるフィールドからデータを代入したりする場合、宣言時に別のプリミティブ型を指定しないと、 CHAR 型のフィールドに対する前述の規則が代入時に適用されます。
固定レコードから別の固定レコードへの代入は、CHAR 型の副構造の項目から別の CHAR 型の副構造の項目への代入と同等です。 長さの不一致があると、受け取った値の右端に単一バイトのブランクが付加されたり、受け取った値の右端から 1 バイトの文字が除去されたりします。 代入では、従属構造体フィールドのプリミティブ型は考慮されません。
最後に、SQL レコードと、異なる型のレコードとの間で代入を行う場合は、各構造体フィールドの前にある 4 バイトの領域のためのスペースを非 SQL レコードに確保する必要があります。