7.109.5 SELECT-SQL の強制変換
以下の表は、列のフィールド・タイプとLANSAフィールド・タイプが同じでない状況でSELECT_SQLを使用したときに予測される結果の例です。このような場合、強制変換が必要になります。
検査値はすべて数値です。Alpha/Stringフィールドに数値以外のデータが含まれる場合、数値への強制変換は定義されていません。結果が0になる場合と、数値以外の文字が無視され、残りが変換される場合と、異常終了する場合があります。
値のオーバーフローについては定義されていないことに注意してください。例えば、数値がフィールドに収まらない場合、値の左または右が切り捨てられるか、または不確定の値になる可能性があります。IBM iでは、通常、致命的エラーになります。
表中「NO」と記載されている場合、強制変換は実行されますが、形式設定要件により、有効な強制変換が実行されることは稀です。
ターゲット・フィールド・タイプ | WindowsPacked (63,0) | RDMLX IBM i Packed (63,0) | WindowsAlpha | RDMLX IBM i Alpha | Windows Signed (63,0) | RDMLX IBM i Signed (63,0) | WindowsChar (300) | RDMLX IBM i Char(300) | WindowsDate | RDMLX IBM i Date | WindowsInt 4 | RDMLX IBM i Int 4 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Char (65535) | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 異常終了 | 異常終了 |
Signed (63,0) | 可 | 不可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 |
Time | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 不可 | 異常終了 | 異常終了 |
Date | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 異常終了 | 可 | 可 | 異常終了 | 異常終了 |
Binary | 可 | 可 | 可 | 異常終了 | 可 | 可 | 可 | 異常終了 | 不可 | 不可 | 異常終了 | 異常終了 |
Alpha | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 異常終了 | 異常終了 |
Signed (63,63) | 可 | 不可 | 可 | 可 | 可 | 可 | 可 | 可 | 不可 | 不可 | 可 | 可 |
DateTime | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 異常終了 | 不可 | 不可 | 異常終了 | 異常終了 |
Packed (63,0) | 可 | 可 | 可 | 可 | 可 | 不可 | 可 | 可 | 可 | 可 | 可 | 可 |
Char (300) | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 異常終了 | 異常終了 |
Packed (63,63) | 可 | 可 | 可 | 可 | 可 | 不可 | 可 | 可 | 不可 | 不可 | 可 | 可 |
Integer (4) | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 |
Float(8) | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 |
強制変換:一方のタイプの値を、もう一方のタイプで意味を持たせるための最善の試行。例えば、Packedタイプの値1234は、フォームで表示したときにAlphaタイプの値"1234"になります。この場合、基となるPackedデータが文字列に変換され、Alphaフィールドに割り当てられます。これは、変換が実行されず、AlphaフィールドにPackedフィールドと同じバイナリー・データが保管されるLANSAのオーバーレイとは対照的です。この場合、フォーム上に表示したときに、Alphaフィールドに数値は表示されません。アプリケーションを実行するすべてのデータベースで予期される全ソース値について、強制変換への依存を十分に検査する必要があります。
RDMLファンクション内のRDMLフィールド・タイプは、すべて相互に強制変換可能です。プラットフォームによる唯一の違いは、オーバーフローまたはアンダーフローが生じた場合、Visual LANSAプラットフォームではフィールド値が0に設定されることです。IBM iの場合は、異常終了になります。例えば、123をPacked(7,7)に割り当てる場合がこれに該当します。