isSQLNullable
isSQLNullable プロパティーは、そのフィールドを NULL 値に設定できるかどうかを示します。 このプロパティーは、SQL レコード内のフィールドでのみ使用することができます。 有効な値は NO (デフォルト) と YES です。
EGL では、以前のバージョンとの互換性を保つことを目的として、このプロパティーを維持しています。新規のコードでは、「?」型拡張文字を使用することで、NULL 可能変数であることを示します。 詳しくは、『型拡張文字』および『NULL 値および NULL 型』を参照してください。
「?」を使用して NULL 可能にした変数は、{isSqlNullable =
YES} を使用して NULL 可能にした変数とわずかに異なります。その NULL 可能変数
が NULL 値であり、複数のオペランドを持つ式で使用された場合、その変数は次の値を持つことになります。
- 「?」で宣言された変数の場合は、NULL。EGL は NULL フラグに従います。
- {isSqlNullable = YES} で宣言された場合は、非 NULL。この場合、EGL は NULL フラグを無視し、値は、ゼロ、ブランク、現在日付、または現在時刻になります。この動作により、前のバージョンとの互換性が保たれます。
以下に例を示します。
Record mySQLRecord type SQLRecord
anInt INT {isSQLNullable = YES};
end
...
myRec mySQLRecord;
result, anotherInt INT?;
myRec.anINT = NULL;
result = myRec.anInt + 1;
EGL は式を評価する際に NULL フラグを無視するため、結果は 1 になります。
anotherInt INT? = NULL;
result = anotherInt + 1;
EGL は NULL フラグを考慮する
(いずれかのオペランドが NULL 値を持つ場合、
数値式の結果が NULL になる) ので、結果は NULL 値になります。SQL レコードの任意のフィールドが NULL 可能な場合、以下の機能が使用可能です。
- フィールドは、SQL データベース表から NULL 値を受け入れることができます。
- 代入によってフィールドを NULL 化できます。 データの初期化で説明しているとおり、このアクションにはフィールドが初期化されるという副次作用があります。
- すべての論理式で、フィールドが NULL に設定されているかどうか、またはデータベースから受け取ったデータが切り捨てられているかどうかをテストできます。