CAST 指定は、data-type によって指定されたタイプにキャストされたキャスト・オペランド (第 1 オペランド) を戻します。 キャストがサポートされていない場合、エラー (SQLSTATE 42846) が戻されます。
cast-specification |--CAST--(--+---+-expression-------+----AS--| data-type |--+---------------------------------+-+--> | +-NULL-------------+ | (1) | | | '-parameter-marker-' '-SCOPE------+-typed-table-name-+-' | | '-typed-view-name--' | +-cursor-cast-specification--------------------------------------------------------+ '-row-cast-specification-----------------------------------------------------------' >--)------------------------------------------------------------| cursor-cast-specification |--parameter-marker--AS--+-CURSOR-----------+-------------------| '-cursor-type-name-' row-cast-specification |--+-row-expression---+--AS----row-type-name--------------------| +-NULL-------------+ '-parameter-marker-' data-type |--+-| built-in-type |----+-------------------------------------| +-array-type-name------+ +-distinct-type-name---+ +-structured-type-name-+ '-REF--(type-name2)----' built-in-type |--+-+-SMALLINT----+---------------------------------------------------+--| | +-+-INTEGER-+-+ | | | '-INT-----' | | | '-BIGINT------' | | .-(5,0)-------------------. | +-+-+-DECIMAL-+-+--+-------------------------+----------------------+ | | '-DEC-----' | | .-,0-------. | | | '-+-NUMERIC-+-' '-(integer-+----------+-)-' | | '-NUM-----' '-,integer-' | | .-(53)------. | +-+-FLOAT--+-----------+--+-----------------------------------------+ | | '-(integer)-' | | | +-REAL------------------+ | | | .-PRECISION-. | | | '-DOUBLE--+-----------+-' | | .-(34)-. | +-DECFLOAT--+------+------------------------------------------------+ | '-(16)-' | | .-(1)-------. | +-+-+-+-CHARACTER-+--+-----------+----------+--+----------------+-+-+ | | | '-CHAR------' '-(integer)-' | +-FOR BIT DATA---+ | | | | '-+-VARCHAR----------------+--(integer)-' +-FOR SBCS DATA--+ | | | | '-+-CHARACTER-+--VARYING-' '-FOR MIXED DATA-' | | | | '-CHAR------' | | | | .-(1M)-------------. | | | '-+-CLOB------------------------+--+------------------+---------' | | '-+-CHARACTER-+--LARGE OBJECT-' '-(integer-+---+-)-' | | '-CHAR------' +-K-+ | | +-M-+ | | '-G-' | | .-(1)-------. | +-+-GRAPHIC--+-----------+-------+----------------------------------+ | | '-(integer)-' | | | +-VARGRAPHIC--(integer)--------+ | | | .-(1M)-------------. | | | '-DBCLOB--+------------------+-' | | '-(integer-+---+-)-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(1M)-------------. | +-+-BLOB----------------+--+------------------+---------------------+ | '-BINARY LARGE OBJECT-' '-(integer-+---+-)-' | | +-K-+ | | +-M-+ | | '-G-' | +-+-DATE---------------------+--------------------------------------+ | +-TIME---------------------+ | | | .-(6)-------. | | | '-TIMESTAMP--+-----------+-' | | '-(integer)-' | +-BOOLEAN-----------------------------------------------------------+ +-XML---------------------------------------------------------------+ | .-SYSPROC.-. | '-+----------+--DB2SECURITYLABEL------------------------------------'
文字ストリング (CLOB 以外) を長さの異なる文字ストリングにキャストするとき、後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。 GRAPHIC ストリング (DBCLOB 以外) を長さの異なる GRAPHIC ストリングにキャストするとき、後続ブランク以外の文字が切り捨てられると、警告 (SQLSTATE 01004) が戻されます。 キャスト・オペランドが BLOB、CLOB、および DBCLOB の場合、何らかの文字が切り捨てられると警告が発行されます。
配列をキャストするとき、 ターゲット・データ・タイプはユーザー定義の配列データ・タイプでなければなりません (SQLSTATE 42821)。 配列の要素のデータ・タイプは、ターゲット配列データ・タイプの要素のデータ・タイプと同じでなければなりません (SQLSTATE 42846)。 配列のカーディナリティーは、ターゲット配列データ・タイプの最大カーディナリティー以下でなければなりません (SQLSTATE 2202F)。
数値データを文字データにキャストする場合、結果のデータ・タイプは固定長文字ストリングです。 文字データを数値データにキャストする場合、結果のデータ・タイプは指定した数値のタイプによって異なります。 例えば整数へのキャストの場合、 結果のデータ・タイプは長精度整数になります。
SELECT EMPNO, CAST(SALARY AS INTEGER) FROM EMPLOYEE
UPDATE PERSONNEL SET RETIRE_YEAR =?
WHERE AGE = CAST( ? AS T_AGE)
第 1 パラメーターは、データ・タイプ R_YEAR のタイプなしパラメーター・マーカーです。 一方、アプリケーションはこのパラメーター・マーカーの整数部を使用します。 この場合、これは割り当てなので、明示的な CAST 指定をする必要はありません。
2 番目のパラメーター・マーカーは、特殊タイプ T_AGE としてキャストされる型付きパラメーター・マーカーです。 これにより、比較は互換データ・タイプとの間でなければならない、という要件が満たされます。 アプリケーションは、ソース・データ・タイプ (SMALLINT) を使用してこのパラメーター・マーカーを処理します。
このステートメントの正常な処理では、SQL パスには、2 つの特殊タイプを定義した 1 つ以上のスキーマのスキーマ名が入っていることを前提としています。
CAST( ? AS VARCHAR(10000) FOR BIT DATA)
CREATE TYPE PHONELIST AS DECIMAL(10, 0) ARRAY[5]
CREATE TABLE EMP_PHONES
(ID INTEGER,
PHONENUMBER DECIMAL(10,0) )
以下のプロシージャーは、
ID が 1775 の従業員の電話番号を含む配列を戻します。
この従業員に 5 より多い電話番号がある場合、
エラーが戻されます (SQLSTATE 2202F)。
CREATE PROCEDURE GET_PHONES(OUT EPHONES PHONELIST)
BEGIN
SELECT CAST(ARRAY_AGG(PHONENUMBER) AS PHONELIST)
INTO EPHONES
FROM EMP_PHONES
WHERE ID = 1775;
END