結果データ・タイプの規則
結果のデータ・タイプは、 演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。
- セット演算 (UNION、INTERSECT、および EXCEPT) の全選択における対応する列
- CASE 式 および DECODE スカラー関数と NVL2 スカラー関数 の結果式
- スカラー関数 COALESCE (また NVL および VALUE) の引数
- スカラー関数 GREATEST、LEAST、MAX、および MIN の引数
- IN 述部の IN リストの式値
- 複数行の VALUES 節の対応する式
- 配列コンストラクター内の要素のための式の値
- BETWEEN 述部の引数 (すべてのオペランドのデータ・タイプが数値である場合を除く)
- OLAP 仕様での集約グループの範囲用の引数
これらの規則は、さまざまな演算での長ストリングに関するその他の制限にも従って、適用されます。
さまざまなデータ・タイプに関係する規則を以下に示します。 一部については、考えられる結果データ・タイプを表に示します。 データ・タイプ LONG VARCHAR と LONG VARGRAPHIC は、引き続きサポートされていますが、非推奨になっています。
CHAR(2) UNION CHAR(4) UNION VARCHAR(3)
最初の対の結果のタイプは CHAR(4) です。 この結果の値は常に 4 バイトになります。 最終的な結果タイプは VARCHAR(4) です。 最初の UNION 演算の結果の値は、常に長さが 4 になります。文字ストリング
文字ストリング値は、別の文字ストリング値と互換性があります。 文字ストリングには、データ・タイプ CHAR、VARCHAR、CLOB が含まれます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
CHAR(x) | CHAR(y) | CHAR(z) (z = max(x,y)) |
CHAR(x) | VARCHAR(y) | VARCHAR(z) (z = max(x,y)) |
VARCHAR(x) | CHAR(y) または VARCHAR(y) | VARCHAR(z) (z = max(x,y)) |
CLOB(x) | CHAR(y)、VARCHAR(y)、または CLOB(y) | CLOB(z) (z = max(x,y)) |
結果の文字ストリングのコード・ページは、 ストリング変換の規則に基づいて導き出されます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
CHAR(x OCTETS) (x>63) | CHAR(y CODEUNITS32) | VARCHAR(z CODEUNITS32) (z = max(x,y)) |
VARCHAR(x OCTETS) (x>8168) | CHAR(y CODEUNITS32) または VARCHAR(y CODEUNITS32) | エラー |
CLOB(x OCTETS) (x>536870911) | CHAR(y CODEUNITS32)、VARCHAR(y CODEUNITS32)、 または CLOB(y CODEUNITS32) | CLOB(536870911 CODEUNITS32) |
GRAPHIC ストリング
GRAPHIC ストリング値は、別の GRAPHIC ストリング値と互換性があります。 GRAPHIC ストリングには、データ・タイプ GRAPHIC、VARGRAPHIC、DBCLOB が含まれます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
GRAPHIC(x) | GRAPHIC(y) | GRAPHIC(z) (z = max(x,y)) |
VARGRAPHIC(x) | GRAPHIC(y) または VARGRAPHIC(y) | VARGRAPHIC(z) (z = max(x,y)) |
DBCLOB(x) | GRAPHIC(y)、VARGRAPHIC(y)、または DBCLOB(y) | DBCLOB(z) (z = max(x,y)) |
結果の GRAPHIC ストリングのコード・ページは、 ストリング変換の規則に基づいて導き出されます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
GRAPHIC(x CODEUNITS16) (x>63) | GRAPHIC(y CODEUNITS32) | VARGRAPHIC(z CODEUNITS32) (z = max(x,y)) |
VARGRAPHIC(x CODEUNITS16) (x>8168) | GRAPHIC(y CODEUNITS32) または VARGRAPHIC(y CODEUNITS32) | エラー |
DBCLOB(x CODEUNITS16) (x>536870911) | GRAPHIC(y CODEUNITS32)、VARGRAPHIC(y CODEUNITS32) または DBCLOB(y CODEUNITS32) | DBCLOB(536870911 CODEUNITS32) |
Unicode データベース内の文字ストリングおよび GRAPHIC ストリング
Unicode データベースでは、文字ストリング値と GRAPHIC ストリング値の間に互換性があります。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
GRAPHIC(x) | CHAR(y) または GRAPHIC(y) | GRAPHIC(z) (z = max(x,y)) |
VARGRAPHIC(x) | CHAR(y) または VARCHAR(y) | VARGRAPHIC(z) (z = max(x,y)) |
VARCHAR(x) | GRAPHIC(y) または VARGRAPHIC | VARGRAPHIC(z) (z = max(x,y)) |
DBCLOB(x) | CHAR(y)、VARCHAR(y)、または CLOB(y) | DBCLOB(z) (z = max(x,y)) |
CLOB(x) | GRAPHIC(y) または VARGRAPHIC(y) | DBCLOB(z) (z = max(x,y)) |
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
CHAR(x OCTETS) (x>63) | GRAPHIC(y CODEUNITS32) | VARGRAPHIC(z CODEUNITS32) (z = max(x,y)) |
GRAPHIC(x CODEUNITS16) (x>63) | CHAR(y CODEUNITS32) | VARGRAPHIC(z CODEUNITS32) (z = max(x,y)) |
VARCHAR(x OCTETS) (x>8168) | GRAPHIC(y CODEUNITS32) または VARGRAPHIC(y CODEUNITS32) | エラー |
VARGRAPHIC(x CODEUNITS16) (x>8168) | CHAR(y CODEUNITS32) または VARCHAR(y CODEUNITS32) | エラー |
CLOB(x OCTETS) (x>536870911) | GRAPHIC(y CODEUNITS32)、VARGRAPHIC(y CODEUNITS32)、 または DBCLOB(y CODEUNITS32) | DBCLOB(536870911 CODEUNITS32) |
DBCLOB(x CODEUNITS16) (x>536870911) | CHAR(y CODEUNITS32)、VARCHAR(y CODEUNITS32)、 または CLOB(y CODEUNITS32) | DBCLOB(536 870 911 CODEUNITS32) |
バイナリー・ストリング
バイナリー・ストリングは他のバイナリー・ストリングや FOR BIT DATA 文字ストリングと互換性があります。 バイナリー・ストリングには、BINARY、VARBINARY、および BLOB が含まれます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
BINARY(x) | BINARY(y) または CHAR(y) FOR BIT DATA | BINARY(z)。z=max(x,y) |
VARBINARY(x) | BINARY(y)、VARBINARY(y)、CHAR(y) FOR BIT DATA、または VARCHAR(y) FOR BIT DATA | VARBINARY(z)。z=max(x,y) |
VARCHAR(x) FOR BIT DATA | BINARY(y) または VARBINARY(y) | VARBINARY(z)。z=max(x,y) |
BLOB(x) | BINARY(y)、VARBINARY(y)、BLOB(y)、CHAR(y) FOR BIT DATA、または VARCHAR(y) FOR BIT DATA | BLOB(z)。z=max(x,y) |
Numeric
数値タイプは、他の数値データ・タイプ、文字ストリング・データ・タイプ (CLOB を除く) と互換性があり、Unicode データベースでは、GRAPHIC ストリング・データ・タイプ (DBCLOB を除く) とも互換性があります。 数値タイプには、SMALLINT、 INTEGER、 BIGINT、 DECIMAL、 REAL、 DOUBLE、および DECFLOAT が入ります。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
SMALLINT | SMALLINT | SMALLINT |
SMALLINT | ストリング | DECFLOAT(34) |
INTEGER | SMALLINT または INTEGER | INTEGER |
INTEGER | ストリング | DECFLOAT(34) |
BIGINT | SMALLINT、INTEGER、または BIGINT | BIGINT |
BIGINT | ストリング | DECFLOAT(34) |
DECIMAL(w,x) | SMALLINT | DECIMAL (p, x)、ただし p = x + max (w-x,5)1 |
DECIMAL(w,x) | INTEGER | DECIMAL(p,x)、ただし p = x+max(w-x,11)1 |
DECIMAL(w,x) | BIGINT | DECIMAL (p, x)、ただし p = x + max (w-x,19)1 |
DECIMAL(w,x) | DECIMAL(y,z) | DECIMAL (p, s)、ただし p = max (x, z) + max (w-x, y-z))1 s = max(x, z) |
DECIMAL(w,x) | ストリング | DECFLOAT(34) |
REAL | REAL | REAL |
REAL | SMALLINT、 INTEGER、 BIGINT、 または DECIMAL | DOUBLE |
REAL | ストリング | DECFLOAT(34) |
DOUBLE | SMALLINT、 INTEGER、 BIGINT、 DECIMAL、 REAL、 または DOUBLE | DOUBLE |
DOUBLE | ストリング | DECFLOAT(34) |
DECFLOAT(n) | SMALLINT、INTEGER、DECIMAL (<=16,s)、REAL、または DOUBLE | DECFLOAT(n) |
DECFLOAT(n) | BIGINT または DECIMAL (>16,s) | DECFLOAT(34) |
DECFLOAT(n) | DECFLOAT(m) | DECFLOAT(max(n,m)) |
DECFLOAT(n) | ストリング | DECFLOAT(34) |
1 精度は 31 以下でなければなりません。 |
Datetime
日時データ・タイプは、同じデータ・タイプのその他のオペランド、または同じデータ・タイプの有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 また、DATE は TIMESTAMP と互換性があり、 TIMESTAMP の他方のオペランドはタイム・スタンプまたは日付のストリング表記にできます。 Unicode データベースでは、文字ストリングと GRAPHIC ストリングは互換性があります。 これは、日時値の GRAPHIC または VARGRAPHIC ストリング表記がその他の日時オペランドと互換性があることを意味します。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
日数 | DATE、CHAR(y)、または VARCHAR(y) | 日数 |
時刻 | TIME、CHAR(y)、または VARCHAR(y) | 時刻 |
TIMESTAMP (x) | TIMESTAMP (y) | TIMESTAMP (最大 (x, y)) |
TIMESTAMP (x) | DATE、CHAR(y)、または VARCHAR(y) | TIMESTAMP (x) |
XML
XML 値は、別の XML 値と互換性があります。 結果のデータ・タイプは XML です。
Boolean
ブール値は、別のブール値と互換性があります。 結果のデータ・タイプは BOOLEAN です。
ユーザー定義タイプ
- 特殊タイプ
- 厳密に型付けされた特殊タイプ値は、同じ特殊タイプの別の値のみと互換性があります。 結果のデータ・タイプは特殊タイプです。
両方のオペランドとも同一の緩やかに型付けされた特殊タイプである場合は、結果は特殊タイプになります。 それ以外の場合で、いずれかのオペランドが緩やかに型付けされた特殊タイプであれば、そのオペランドのデータ・タイプがソース・データ・タイプと見なされ、結果のデータ・タイプは組み込みデータ・タイプのオペランドの組み合わせに基づいて決まります。
- 配列データ・タイプ
- ユーザー定義の配列データ・タイプ値は、同じユーザー定義の配列データ・タイプの別の値とのみ互換性があります。 結果のデータ・タイプはそのユーザー定義の配列データ・タイプです。
- カーソル・データ・タイプ
- CURSOR 値は、別の CURSOR 値と互換性があります。 結果のデータ・タイプは CURSOR です。 ユーザー定義のカーソル・データ・タイプ値は、同じユーザー定義のカーソル・データ・タイプの別の値とのみ互換性があります。 結果のデータ・タイプはそのユーザー定義のカーソル・データ・タイプです。
- 行データ・タイプ
- ユーザー定義の行データ・タイプ値は、同じユーザー定義の行データ・タイプの別の値とのみ互換性があります。 結果のデータ・タイプはそのユーザー定義の行データ・タイプです。
参照タイプ
参照タイプ値は、同じ参照タイプの別の値と互換性がありますが、それは両方のターゲット・タイプが共通のスーパータイプを持っている場合に限ります。 結果のデータ・タイプは、 共通のスーパータイプをターゲット・タイプとして持っている参照タイプです。 すべてのオペランドに同じ有効範囲の表がある場合、 結果は有効範囲の表になります。 それ以外の場合、結果では効力範囲は指定されません。
構造化タイプ
構造化タイプ値は、同じ構造化タイプの別の値と互換性がありますが、それは両方が共通のスーパータイプを持っている場合に限ります。 結果の構造化タイプ列の静的データ・タイプは、 いずれかの列の最小限の共通スーパータイプである構造化タイプです。
A
/ \
B C
/ \
D E
/ \
F G
静的タイプ E と F の構造化タイプは、結果の静的タイプ B と互換性があります。
ただし、E および F の最小限の共通スーパータイプです。結果の NULL 可能属性
- INTERSECT で、どちらかのオペランドで NULL 値を使えない場合、 結果での NULL 値の使用は認められません (論理積が NULL 値になることはありません)。
- EXCEPT では、最初のオペランドで NULL 値を使えない場合、 結果での NULL 値の使用は認められません (結果は最初のオペランドの値しか取れないためです)。