7.107.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)に割り当てる場合がこれに該当します。