SQL 解説書
cast-specification
|--CAST--(--+-expression-------+--AS--data-type----------------->
+-NULL-------------+
'-parameter-marker-'
>----+-----------------------------------+---)------------------|
| (1) |
'-SCOPE-------+-typed-table-name-+--'
'-typed-view-name--'
注:
- SCOPE 文節が適用されるのは、REF データ・タイプだけです。
CAST 指定は、データ・タイプ によって指定されたタイプにキャストされたキャスト・オペランド (第 1 オペランド) を戻します。
- expression
- キャスト・オペランドが式 (パラメーター・マーカーまたは NULL ではなく) である場合、
結果は、指定された目的データ・タイプ に変換された引き数値です。
サポートされるキャストについては 表 6 に記載されています。
この表では、第 1 列がキャスト・オペランドのデータ・タイプ (ソース・データ・タイプ) を表し、
上部に横方向に示したデータ・タイプが CAST 指定の目的データ・タイプを表します。
サポートされていないキャストを実行すると、エラー (SQLSTATE 42846) になります。
文字ストリング (CLOB 以外) を長さの異なる文字ストリングにキャストするとき、
後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。
漢字ストリング (DBCLOB 以外) を長さの異なる漢字ストリングにキャストするとき、
後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。
キャスト・オペランドが BLOB、CLOB、および DBCLOB の場合、
何らかの文字が切り捨てられると警告が発行されます。
- NULL
- キャスト・オペランドがキーワード NULL である場合、結果は、
指定されたデータ・タイプ のヌル値です。
- parameter-marker
- パラメーター・マーカー (疑問符で指定されるもの) は通常は式としてみなされますが、
ここでは特別な意味をもつため別個に説明します。
キャスト・オペランドがパラメーター・マーカー である場合、
指定されたデータ・タイプ は、
指定されたデータ・タイプに置き換えが割り当て可能である (ストリングの記憶割り当てを使用して) ことを示す合意であるとみなされます。
このようなパラメーター・マーカーは、
タイプ付きパラメーター・マーカー とみなされます。
タイプ付きパラメーター・マーカーは、関数解決、選択リストの DESCRIBE、
または列割り当てを行う目的で、他のタイプ付き値と同じように扱われます。
- data type
- 既存のデータ・タイプの名前。
このタイプ名が修飾されていない場合は、
SQL パスを使用してデータ・タイプが解決されます。
長さ、精度、および位取りなどの関連する属性を伴うデータ・タイプには、
データ・タイプ の指定時にこのような属性を組み込む必要があります (指定されていない場合、
CHAR は長さ 1 にデフォルト解釈され、
DECIMAL は精度 5 および位取り 0 にデフォルト解釈されます)。
サポートされるデータ・タイプに関する制限は、
指定したキャスト・オペランドに基づいて適用されます。
- キャスト・オペランドが式 の場合、
キャスト・オペランドのデータ・タイプ (ソース・データ・タイプ) に応じてサポートされる目的データ・タイプについては、
データ・タイプ間のキャストを参照してください。
- キャスト・オペランドがキーワード NULL の場合、
既存のどのデータ・タイプでも指定できます。
- キャスト・オペランドがパラメーター・マーカーの場合、
ターゲット・データ・タイプは、既存の任意のデータ・タイプとすることができます。
データ・タイプがユーザー定義特殊タイプの場合、
パラメーター・マーカーを使用するアプリケーションは、
そのユーザー定義特殊タイプのソース・データ・タイプを使用します。
データ・タイプがユーザー定義構造タイプの場合、
パラメーター・マーカーを使用するアプリケーションは、
そのユーザー定義構造タイプの TO SQL 変形関数の入力パラメーター・タイプを使用します。
- SCOPE
- データ・タイプが参照タイプの場合、
効力範囲は参照のターゲット表またはターゲット視点を識別するように定義することができます。
- typed-table-name
- タイプ付き表の名前。
表名はすでに指定されていなければなりません (SQLSTATE 42704)。
キャストは data-type REF(S) にするものでなければなりません。
ここでの S は typed-table-name (SQLSTATE 428DM) のタイプを表しています。
- typed-view-name
- タイプ付き視点の名前。
その視点は存在しているか、
あるいは視点定義の一部としてキャストを含むように作成されている視点と同じ名前でなければなりません。
キャストは data-type REF(S) にするものでなければなりません。
ここでの S は typed-view-name (SQLSTATE 428DM) のタイプを表しています。
数値データを文字にキャストする場合、
結果のデータ・タイプは固定長文字ストリングです (CHARを参照)。
文字データを数値にキャストする場合、
結果のデータ・タイプは指定した数値のタイプによって異なります。
たとえば整数へのキャストの場合、
結果のデータ・タイプは長精度整数になります (INTEGERを参照)。
- アプリケーションが、
EMPLOYEE 表の SALARY (decimal(9,2) として定義) の整数部だけを使用するとします。
社員番号や SALARY の整数値を含んだ、以下のような照会が考えられます。
SELECT EMPNO, CAST(SALARY AS INTEGER) FROM EMPLOYEE
- SMALLINT に基づいて定義された T_AGE という名前の特殊タイプがあり、
PERSONNEL 表に AGE 列を作成するために使用されるとします。
さらに INTEGER に基づいて定義された R_YEAR という名前の特殊タイプがあり、
PERSONNEL 表に RETIRE_YEAR 列を作成するために使用されるとします。
以下のような更新ステートメントが考えられます。
UPDATE PERSONNEL SET RETIRE_YEAR =?
WHERE AGE = CAST( ? AS T_AGE)
第 1 パラメーターは、データ・タイプ R_YEAR のタイプなしパラメーター・マーカーです。
一方、アプリケーションはこのパラメーター・マーカーの整数部を使用します。
この場合、これは割り当てなので、明示的な CAST 指定をする必要はありません。
2 番目のパラメーター・マーカーは、
特殊タイプ T_AGE としてキャストされるタイプ付きパラメーター・マーカーです。
これにより、比較は互換データ・タイプとの間でなければならない、
という要件が満たされます。
アプリケーションは、
ソース・データ・タイプ (SMALLINT) を使用してこのパラメーター・マーカーを処理します。
このステートメントの正常な処理は、関数パスには、
2 つの特殊タイプが定義されているスキーマ (複数の場合あり) のスキーマ名が含まれていることを前提としています。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]