特殊タイプの割り当て

特殊タイプの変数への割り当てに適用される規則は、特殊タイプが関係する他のどの割り当てについての規則とも異なります。

変数への割り当て

特殊タイプの変数への割り当ては、特殊タイプのソース・データ・タイプに基づいています。 したがって、特殊タイプのソース・データ・タイプを変数へ割り当て可能な場合にのみ、特殊タイプの値は変数に割り当てることができます。

例:

特殊タイプ 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
表 1. いろいろな割り当ての評価 (例えば、INSERT で)
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 にキャスト不可能