CAST 指定
CAST 指定は、data-type によって指定されたタイプにキャストされたキャスト・オペランド (第 1 オペランド) を戻します。 キャストがサポートされていない場合、エラー (SQLSTATE 42846) が戻されます。
- 1 互換性のために、
::を型キャスト演算子として使用できます。 例えば、ステートメントC1::INTEGERとcast(C1 as INTEGER)は同等です。 - 2 SCOPE 節が適用されるのは、REF データ・タイプのみです。
- 3 FOR BIT DATA 節とその後に続く他の列制約とは、任意の順序で指定できます。FOR BIT DATA 節をストリング単位 CODEUNITS32 とともに指定することはできません (SQLSTATE 42613)。
- expression
- キャスト・オペランドが式 (パラメーター・マーカーまたは NULL ではなく) である場合、結果は、指定されたターゲット data-type に変換された引数値です。
文字ストリング (CLOB 以外) を長さの異なる文字ストリングにキャストするとき、後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。 GRAPHIC ストリング (DBCLOB 以外) を長さの異なる GRAPHIC ストリングにキャストするとき、後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。 キャスト・オペランドが BLOB、CLOB、および DBCLOB の場合、何らかの文字が切り捨てられると警告が発行されます。
配列をキャストするとき、 ターゲット・データ・タイプはユーザー定義の配列データ・タイプでなければなりません (SQLSTATE 42821)。 配列の要素のデータ・タイプは、ターゲット配列データ・タイプの要素のデータ・タイプと同じでなければなりません (SQLSTATE 42846)。 配列のカーディナリティーは、ターゲット配列データ・タイプの最大カーディナリティー以下でなければなりません (SQLSTATE 2202F)。
- NULL
- キャスト・オペランドがキーワード NULL である場合、結果は、指定された data-type の NULL 値です。
- parameter-marker
- パラメーター・マーカーは通常は式と見なされますが、ここでは特別な意味を持つため別個に説明します。 キャスト・オペランドが parameter-marker である場合、指定された data-type は、指定されたデータ・タイプに置き換えが割り当て可能である (ストリングの記憶割り当てを使用して) ことを示す合意であると見なされます。 このようなパラメーター・マーカーは、型付きパラメーター・マーカー と見なされます。 型付きパラメーター・マーカーは、関数解決、選択リストの DESCRIBE、または列割り当てを行う目的で、他の型付き値と同じように扱われます。
- cursor-cast-specification
- パラメーター・マーカーがカーソル・タイプと予想されることを表す場合に使用される CAST 指定。
カーソル・タイプを許可するコンテキスト内の、式がサポートされている任意の場所で使用できます。
- parameter-marker
- キャスト・オペランドはパラメーター・マーカーの一種で、指定されたカーソル・タイプに対して置き換えが割り当て可能であることを示す合意と見なされます。
- CURSOR
- 組み込みデータ・タイプ CURSOR を指定します。
- cursor-type-name
- ユーザー定義のカーソル・タイプの名前を指定します。
- row-cast-specification
- 入力が行の値で、結果がユーザー定義の行タイプである CAST 指定。
row-cast-specification は、row-expression が許可されている場合のみ有効です。
- row-expression
- row-expression のデータ・タイプは、表またはビューの定義に固定されている行タイプの変数でなければなりません。row-expression のデータ・タイプを、ユーザー定義の行タイプにすることはできません (SQLSTATE 42846)。
- NULL
- キャスト・オペランドが NULL 値になるように指定します。その結果、 指定したデータ・タイプのすべてのフィールドに NULL 値が入る行ができます。
- parameter-marker
- キャスト・オペランドはパラメーター・マーカーの一種で、指定された row-type-name に対して置き換えが割り当て可能であることを示す合意と見なされます。
- row-type-name
- ユーザー定義の行タイプの名前を指定します。row-expression は、row-type-name にキャスト可能でなければなりません (SQLSTATE 42846)。
- interval-cast-specification
- 入力が間隔の文字ストリング表現で、結果が 10 進数の期間である CAST 指定。次のステートメントは等価です。
使用可能な string-constant 値について詳しくは、INTERVAL スカラー関数を参照してください。CAST (string-constant as INTERVAL) INTERVAL string-constant - data-type
- 既存のデータ・タイプの名前。
このタイプ名が修飾されていない場合は、SQL パスを使用してデータ・タイプ解決が行われます。
data-type を指定するとき、長さや精度と位取りのような属性が関連付けられているデータ・タイプは、これらの属性を組み込む必要があります。
- CHAR のデフォルトの長さは 1 です
- BINARY は、デフォルトの長さ 1 になります
- DECIMAL のデフォルトの精度は 5、スケールは 0 です
- DECFLOAT のデフォルトの精度は 34 です (指定しない場合)
- キャスト・オペランドが式 の場合にサポートされるターゲット・データ・タイプは、キャスト・オペランドのデータ・タイプ (ソース・データ・タイプ) によって異なります。 VARCHAR、VARGRAPHIC、NVARCHAR、または VARBINARY データ・タイプの長さ属性を指定しなかった場合、長さ属性は、最初の引数のデータ・タイプに応じて決まります。このとき、対応する組み込みキャスト関数の、長さ引数が指定されなかった場合の規則が使用されます。
- キャスト・オペランドがキーワード NULL の場合、既存のどのデータ・タイプでも指定できます。VARCHAR、VARGRAPHIC、NVARCHAR、または VARBINARY データ・タイプの長さ属性を指定しなかった場合、長さ属性として 1 が使用されます。
- キャスト・オペランドがパラメーター・マーカーの場合、ターゲット・データ・タイプは、既存の任意のデータ・タイプとすることができます。 データ・タイプがユーザー定義特殊タイプの場合、パラメーター・マーカーを使用するアプリケーションは、そのユーザー定義特殊タイプのソース・データ・タイプを使用します。 データ・タイプがユーザー定義構造化タイプの場合、パラメーター・マーカーを使用するアプリケーションは、そのユーザー定義構造化タイプの TO SQL トランスフォーム関数の入力パラメーター・タイプを使用します。VARCHAR、VARGRAPHIC、NVARCHAR、または VARBINARY データ・タイプの長さ属性を指定しなかった場合、長さ属性として 254 が使用されます。
- built-in-type
- 組み込みデータ・タイプの説明については、『CREATE TABLE』を参照してください。
- SCOPE
- データ・タイプが参照タイプの場合、有効範囲は参照のターゲット表またはターゲット・ビューを識別するように定義することができます。
- typed-table-name
- 型付き表の名前。 表名は既に指定されていなければなりません (SQLSTATE 42704)。 キャストは data-type REF(S) にするものでなければなりません。 ここでの S は typed-table-name (SQLSTATE 428DM) のタイプを表しています。
- typed-view-name
- 型付きビューの名前。 そのビューは存在しているか、あるいはビュー定義の一部としてキャストを組み込むように作成されているビューと同じ名前でなければなりません (SQLSTATE 42704)。 キャストは data-type REF(S) にするものでなければなりません。 ここでの S は typed-view-name (SQLSTATE 428DM) のタイプを表しています。
数値データを文字データにキャストする場合、結果のデータ・タイプは固定長文字ストリングです。 文字データを数値データにキャストする場合、結果のデータ・タイプは指定した数値のタイプによって異なります。 例えば整数へのキャストの場合、 結果のデータ・タイプは長精度整数になります。
例
- アプリケーションが、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) を使用してこのパラメーター・マーカーを処理します。
このステートメントの正常な処理では、SQL パスには、2 つの特殊タイプを定義した 1 つ以上のスキーマのスキーマ名が入っていることを前提としています。
- アプリケーションは、例えばオーディオ・ストリームのような一つながりの値を提供しますが、その値は SQL ステートメントで使用される前にコード・ページの変換を経由してはなりません。アプリケーションは、次のような CAST を使用することができます。
CAST( ? AS VARCHAR(10000) FOR BIT DATA) - 配列タイプおよび表が以下のように作成されたと想定します。
以下のプロシージャーは、 ID が 1775 の従業員の電話番号を含む配列を戻します。この従業員に 5 より多い電話番号がある場合、 エラーが戻されます (SQLSTATE 2202F)。CREATE TYPE PHONELIST AS DECIMAL(10, 0) ARRAY[5] CREATE TABLE EMP_PHONES (ID INTEGER, PHONENUMBER DECIMAL(10,0) )CREATE PROCEDURE GET_PHONES(OUT EPHONES PHONELIST) BEGIN SELECT CAST(ARRAY_AGG(PHONENUMBER) AS PHONELIST) INTO EPHONES FROM EMP_PHONES WHERE ID = 1775; END
