データ・タイプのプロモーション

データ・タイプは、 関連するいくつかのデータ・タイプからなるグループに分類されます。 そのようなグループの中では、 あるデータ・タイプを他のデータ・タイプより優先すると見なす優先順位が存在します。 この優先順位を使用すると、あるデータ・タイプを、 優先順位がそれより上のデータ・タイプにプロモートすること (プロモーション) が可能になります。

例えば、CHAR データ・タイプは VARCHAR に、 INTEGER は DOUBLE-PRECISION にプロモートできますが、 CLOB を VARCHAR にプロモートすることはできません。

データ・タイプのプロモーションは、以下の場合に使用されます。
  • 関数解決を実行する場合
  • ユーザー定義タイプをキャストする場合
  • ユーザー定義タイプを組み込みデータ・タイプに割り当てる場合
表 1 は、各データ・タイプの優先順位リスト (順序) を示しており、特定のデータ・タイプをプロモートできるデータ・タイプを決定するために使用できます。 この表に示されているとおり、最適の選択は、 別のデータ・タイプへプロモートすることではなく、 常に同じデータ・タイプです。
表 1. データ・タイプの優先順位表
データ・タイプ データ・タイプ優先順位リスト (高いものから順に)
SMALLINT SMALLINT、 INTEGER、 BIGINT、 decimal、 real、 double、 DECFLOAT
整数 INTEGER、 BIGINT、 decimal、 real、 double、 DECFLOAT
BIGINT BIGINT、 decimal、 real、 double、 DECFLOAT
10 進 decimal、 real、 double、 DECFLOAT
real real、 double、 DECFLOAT
double double、DECFLOAT
DECFLOAT DECFLOAT
CHAR CHAR, VARCHAR, CLOB
VARCHAR VARCHAR, CLOB
CLOB CLOB
GRAPHIC GRAPHIC, VARGRAPHIC, DBCLOB
VARGRAPHIC VARGRAPHIC, DBCLOB
DBCLOB DBCLOB
BINARY BINARY、VARBINARY、BLOB
VARBINARY VARBINARY、BLOB
BLOB BLOB
日数 DATE、TIMESTAMP
時刻 時刻
TIMESTAMP TIMESTAMP
ブール値 BOOLEAN
CURSOR CURSOR
ARRAY ARRAY
udt udt (同じ名前) または udt のスーパータイプ
REF(T) REF(S) (S が T のスーパータイプの場合)
行 (Row) 行 (Row)
注:
  1. 上記の表に小文字で示したタイプは、以下のように定義されます。
    • decimal = DECIMAL(p,s) または NUMERIC(p,s)
    • real = REAL または FLOAT(n)。ここで、n は 24 を超えない値。
    • double = DOUBLE、DOUBLE-PRECISION、FLOAT、または FLOAT(n)。 ここで、n は 25 以上。
    • udt = ユーザー定義タイプ (ソース・タイプを使用してデータ・タイプの優先順位を判別する、緩やかに型付けされた特殊タイプを除く)

    リストの中のデータ・タイプの短形式および長形式の同義語は、 リストの中の同義語と同じであると見なされます。

  2. Unicode データベースの場合、 以下のデータ・タイプは等価と見なされます。
    • CHAR および GRAPHIC
    • VARCHAR および VARGRAPHIC
    • CLOB および DBCLOB

    Unicode データベース内の関数を解決する場合、ある関数呼び出しでユーザー定義関数と組み込み関数の両方が利用可能であれば、通常は組み込み関数が呼び出されます。 UDF が呼び出されるのは、CURRENT PATH 特殊レジスターで SYSIBM の前にそのスキーマが置かれている場合、および Unicode データ・タイプが一致するかどうかにかかわらず、引数データ・タイプがすべての関数呼び出し引数データ・タイプと一致する場合に限られます。