結果のデータ・タイプは、 演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。
これらの規則は以下に適用されます。
これらの規則は、さまざまな演算での長ストリングに関するその他の制限にも従って、適用されます。
さまざまなデータ・タイプに関係する規則を以下に示します。 一部については、考えられる結果データ・タイプを表に示します。
それらの表では、適用される長さまたは精度と位取りも含めて、結果データ・タイプを示します。 結果タイプは、オペランドを考慮して決定されます。 オペランドの対が複数の場合は、まず最初の対から検討します。 それによる結果タイプとその次のオペランドとの組み合わせが検討されて、 次の結果タイプが決定される、というようになります。 最後の中間結果タイプと最後のオペランドによって、その演算の最終的な結果タイプが決定されます。 演算処理は左から右へ行われます。 このため、演算が繰り返されるときは、中間結果タイプが重要になります。 たとえば、以下のような演算を考えてみます。
CHAR(2) UNION CHAR(4) UNION VARCHAR(3)
最初の対の結果のタイプは CHAR(4) です。 この結果の値は常に 4 文字になります。 最終的な結果タイプは VARCHAR(4) です。 最初の UNION 演算の結果の値は、常に長さが 4 になります。
文字ストリングは他の文字ストリングと互換性があります。 文字ストリングには、CHAR、VARCHAR、LONG 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) |
LONG VARCHAR | CHAR(y)、VARCHAR(y)、または LONG VARCHAR | LONG VARCHAR |
CLOB(x) | CHAR(y)、VARCHAR(y)、または CLOB(y) | CLOB(z)、ただし z = max(x,y) |
CLOB(x) | LONG VARCHAR | CLOB(z)、ただし z = max(x,32700) |
結果の文字ストリングのコード・ページは、 ストリング変換に関する規則に基づいて導き出されます。
漢字ストリングは他の漢字ストリングと互換性があります。 漢字ストリングには、GRAPHIC、VARGRAPHIC、LONG VARGRAPHIC、および DBCLOB データ・タイプが含まれます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
GRAPHIC(x) | GRAPHIC(y) | GRAPHIC(z)、ただし z = max(x,y) |
VARGRAPHIC(x) | GRAPHIC(y) または VARGRAPHIC(y) | VARGRAPHIC(z)、ただし z = max(x,y) |
LONG VARGRAPHIC | GRAPHIC(y)、VARGRAPHIC(y)、または LONG VARGRAPHIC | LONG VARGRAPHIC |
DBCLOB(x) | GRAPHIC(y)、VARGRAPHIC(y)、または DBCLOB(y) | DBCLOB(z)、ただし z = max(x,y) |
DBCLOB(x) | LONG VARGRAPHIC | DBCLOB(z)、ただし z = max(x,16350) |
結果の漢字ストリングのコード・ページは、ストリング変換に関する規則に基づいて導き出されます。
BLOB は別の BLOB とのみ互換であり、結果は BLOB になります。 BLOB タイプとして扱う必要がある場合 (BLOBを参照)、 BLOB スカラー関数を使用して他のタイプからキャストしなければなりません。 結果の BLOB の長さは、すべてのデータ・タイプの中で最大の長さです。
数値タイプは他の数値タイプと互換性があります。 数値タイプには、 SMALLINT、INTEGER、BIGINT、DECIMAL、REAL および DOUBLE が含まれます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ | ||
---|---|---|---|---|
SMALLINT | SMALLINT | SMALLINT | ||
INTEGER | INTEGER | INTEGER | ||
INTEGER | SMALLINT | INTEGER | ||
BIGINT | BIGINT | BIGINT | ||
BIGINT | INTEGER | BIGINT | ||
BIGINT | SMALLINT | BIGINT | ||
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)1s = max(x,z) | ||
REAL | REAL | REAL | ||
REAL | DECIMAL、BIGINT、 INTEGER、またはSMALLINT | DOUBLE | ||
DOUBLE | 任意の数値 | DOUBLE | ||
|
日付は、別の日付、 または日付の有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 結果のデータ・タイプは DATE です。
時刻は、別の時刻、 または時刻の有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 結果のデータ・タイプは TIME です。
タイム・スタンプは、別のタイム・スタンプ、 またはタイム・スタンプの有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 結果のデータ・タイプは TIMESTAMP です。
データ・リンクはほかのデータ・リンクと互換性があります。 結果のデータ・タイプは DATALINK です。 結果の DATALINK の長さは、すべてのデータ・タイプの中で最大の長さです。
ユーザー定義特殊タイプは同じユーザー定義特殊タイプとしか互換性がありません。 結果のデータ・タイプはそのユーザー定義特殊タイプです。
参照タイプは、ほかの参照タイプと互換性がありますが、 それは両方のターゲット・タイプが共通のスーパータイプを持っている場合に限ります。 結果のデータ・タイプは、 共通のスーパータイプをターゲット・タイプとして持っている参照タイプです。 すべてのオペランドに同じ効力範囲の表がある場合、 結果は効力範囲の表になります。 それ以外の場合、結果では効力範囲は指定されません。
構造タイプは、ほかの構造タイプと互換性がありますが、 それは両方が共通のスーパータイプを持っている場合に限ります。 結果の構造タイプ列の静的データ・タイプは、 いずれかの列の最小限の共通スーパータイプである構造タイプです。
たとえば、以下の構造タイプ階層について考えてみます。
A / \ B C / \ D E / \ F G
静的タイプ E と F の構造タイプは、結果の静的タイプ B と互換性があります。 ただし、E および F の最小限の共通スーパータイプです。
INTERSECT と EXCEPT を除き、 2 つのオペランドの両方ともヌル値が使用できないのでない限り、 結果でヌル値が可能です。