特殊タイプの割り当て
特殊タイプの変数への割り当てに適用される規則は、特殊タイプが関係する他のどの割り当てについての規則とも異なります。
変数への割り当て
特殊タイプの変数への割り当ては、特殊タイプのソース・データ・タイプに基づいています。 したがって、特殊タイプのソース・データ・タイプを変数へ割り当て可能な場合にのみ、特殊タイプの値は変数に割り当てることができます。
例:
特殊タイプ AGE が以下の SQL ステートメントを 使用して作成されたとします。
CREATE TYPE AGE AS SMALLINT WITH COMPARISONS
このステートメントを実行すると、次のキャスト関数も生成されます。
AGE (SMALLINT) RETURNS AGE
AGE (INTEGER) RETURNS AGE
SMALLINT (AGE) RETURNS SMALLINT
次に、表 STUDENTS の STU_AGE 列に特殊タイプ AGE が定義されていると想定します。 生徒の年齢を、INTEGER データ・タイプを持つホスト変数 HV_AGE に次のように有効に割り当てます。
SELECT STU_AGE INTO :HV_AGE FROM STUDENTS WHERE STU_NUMBER = 200
特殊タイプ (SMALLINT) のソース・データ・タイプがホスト変数 (INTEGER) に割り当て可能なため、特殊タイプの値はホスト変数 HV_AGE に割り当てることができます。
変数以外への割り当て
特殊タイプは、割り当てのソースあるいはターゲットのいずれにもなり得ます。割り当ては、割り当てられる値のデータ・タイプが、ターゲットのデータ・タイプにキャスト可能であるかどうかに基づいています。 データ・タイプ間のキャストは、特殊タイプが含まれる場合にサポートされるキャストを示しています。 そのため、特殊タイプの値は、以下の場合に変数以外のいずれのターゲットにも割り当てることができます。
- 割り当てのターゲットが同じ特殊タイプを持っている、あるいは
- 特殊タイプはターゲットのデータ・タイプにキャスト可能である。
以下の場合には、いずれの値も特殊タイプに割り当てることができます。
- 割り当てられる値がターゲットと同じ特殊タイプを持っている、あるいは
- 割り当てられる値のデータ・タイプは、ターゲットの特殊タイプにキャスト可能である。
例:
特殊タイプ AGE のソース・データ・タイプが SMALLINT であるとします。
CREATE TYPE AGE AS SMALLINT WITH COMPARISONS
次に、2 つの表 TABLE1 および TABLE2 が 4 つの同一の列記述で作成されたとします。
AGECOL AGE
SMINTCOL SMALLINT
INTCOL INTEGER
DECCOL DEC(6,2)
次の SQL ステートメントを使用し、X と Y にいろいろな値を代入して、TABLE1 のいろいろな列に TABLE2 から値を挿入する場合、表 1 はその割り当てが有効であるかどうかを示しています。
INSERT INTO TABLE1 (Y) SELECT X FROM TABLE2
TABLE2.X | TABLE1.Y | 有効 | 理由 |
---|---|---|---|
AGECOL | AGECOL | はい | ソースとターゲットが同じ特殊タイプである |
SMINTCOL | AGECOL | はい | SMALLINT は AGE にキャスト可能 (AGE のソース・タイプは SMALLINT のため) |
INTCOL | AGECOL | はい | INTEGER を AGE にキャストできる (AGE のソース・タイプは SMALLINT であるため) |
DECCOL | AGECOL | いいえ | DECIMAL は AGE にキャスト不可能 |
AGECOL | SMINTCOL | はい | AGE はそのソース・タイプである SMALLINT にキャスト可能 |
AGECOL | INTCOL | いいえ | AGE は INTEGER にキャスト不可能 |
AGECOL | DECCOL | いいえ | AGE は DECIMAL にキャスト不可能 |