VARCHAR2 および NVARCHAR2 データ・タイプ

VARCHAR2 および NVARCHAR2 データ・タイプは、Oracle VARCHAR2 および NVARCHAR2 データ・タイプを使用するアプリケーションをサポートします。この機能は、Db2® Warehouse on Cloud 管理対象サービスのエントリー・プランには適用されません。

効果

SQL ステートメント内で VARCHAR2 データ・タイプが明示的に指定されていた場合は、VARCHAR データ・タイプに暗黙的にマップされます。VARCHAR2 の最大長は、32672 BYTE または 8168 CHAR です。これは、VARCHAR の最大長 32672 OCTETS または 8168 CODEUNITS32 と同じです。 同様に、SQL ステートメント内で NVARCHAR2 データ・タイプが明示的に出現する場合は、NVARCHAR データ・タイプと同じ規則に従って 暗黙的にマップされます。

文字ストリング・リテラルのデータ・タイプは、長さと環境ごとのストリング単位に基づいた CHAR または VARCHAR です。 環境ごとのストリング単位での CHAR の最大長 (255 OCTETS または 63 CODEUNITS32) までの文字ストリング・リテラルのデータ・タイプは、CHAR です。 環境ごとのストリング単位での CHAR の最大長よりも長い文字ストリング・リテラルのデータ・タイプは、VARCHAR です。

可変長ストリング・タイプが関係する比較では非空白埋め比較セマンティクスが使用され、固定長ストリング・タイプのみの比較では、引き続き空白埋め比較セマンティクスが使用されます。 ただし、以下の 2 つの例外があります。
  • カタログ・ビューのストリング列情報が関連する比較では、データベース照合に関わらず、常に空白埋め比較セマンティクスによる IDENTITY 照合を使用します。
  • FOR BIT DATA 属性を持つデータ・タイプが関連するストリング比較では、常に空白埋め比較セマンティクスによる IDENTITY 照合が使用されます。
結果データ・タイプの規則は以下のように変更されています。
表 1. 文字ストリングに関連する結果データ・タイプの規則変更
一方のオペランド 他方のオペランド 結果のデータ・タイプ
CHAR(x) CHAR(x) CHAR(x)
CHAR(x) CHAR(y) VARCHAR(z)、ただし x != y、z = max(x,y)
GRAPHIC(x) GRAPHIC(x) GRAPHIC(x)
GRAPHIC(x) GRAPHIC(y) VARGRAPHIC(z)、ただし x != y、z = max(x,y)
GRAPHIC(x) CHAR(y) VARGRAPHIC(z)、ただし z = max(x,y)

IN 述部の IN リストに対する結果タイプが固定長ストリング・データ・タイプとして解決され、IN 述部の左オペランドが可変長ストリング・データ・タイプである場合、IN リスト式は可変長ストリング・データ・タイプがあるものとして処理されます。

長さがゼロである文字ストリング値およびバイナリー・ストリング値 (LOB 値以外) は通常、NULL 値として処理されます。 CHAR、NCHAR、VARCHAR、NVARCHAR、BINARY、または VARBINARY に空ストリング値を割り当てるかキャストすると、NULL 値が生成されます。

文字ストリング引数またはバイナリー・ストリング引数を返す関数、あるいは文字ストリング・データ・タイプまたはバイナリー・ストリング・データ・タイプのパラメーターに基づく関数も、CHAR、NCHAR、VARCHAR、NVARCHAR、BINARY、または VARBINARY の空ストリング値を NULL 値として扱います。 このため、文字ストリングまたはグラフィック・ストリングを返す組み込み関数およびキャストの結果は、引数すべてが NULL ではない場合でも NULL になることがあります。 次のように一部の関数について特別な考慮事項が適用されます。
  • CONCAT 関数と連結演算子。 NULL または空ストリングの値は、連結結果では無視されます。 以下の表に、連結結果のタイプを示します。
    表 2. 連結されたオペランドのデータ・タイプおよび長さ
    オペランド 長さ属性の組み合わせ1 結果1
    CHAR(A) CHAR(B) <=S CHAR(A+B)
    CHAR(A) CHAR(B) >S VARCHAR(A+B)
    CHAR(A) VARCHAR(B) - VARCHAR(MIN(A+B, W))
    VARCHAR(A) VARCHAR(B) - VARCHAR(MIN(A+B, W))
    CLOB(A) CHAR(B) - CLOB(MIN(A+B, X))
    CLOB(A) VARCHAR(B) - CLOB(MIN(A+B X))
    CLOB(A) CLOB(B)   CLOB(MIN(A+B, X))
    GRAPHIC(A) GRAPHIC(B) <=T GRAPHIC(A+B)
    GRAPHIC(A) GRAPHIC(B) >T VARGRAPHIC(A+B)
    GRAPHIC(A) VARGRAPHIC(B) - VARGRAPHIC(MIN(A+B, Y))
    VARGRAPHIC(A) VARGRAPHIC(B) - VARGRAPHIC(MIN(A+B, Y))
    DBCLOB(A) CHAR(B) - DBCLOB(MIN(A+B, Z))
    DBCLOB(A) VARCHAR(B) - DBCLOB(MIN(A+B, Z))
    DBCLOB(A) DCLOB(B)   DBCLOB(MIN(A+B, Z))
    1. イタリック体の変数の値に関する次の表を参照してください。
    表 3. 上の表内のイタリック体の変数には、以下の値が保持されている
    Variable オペランドが次のストリング単位でない場合
    CHAR (または CODEUNITS32)
    いずれかのオペランドが次のストリング単位の場合
    CHAR (または CODEUNITS32
    S 255 63
    T 127 63
    W 32672 8168
    X 2G 536870911
    Y 16336 8168
    Z 1G 536870911
  • DECODE 関数。 最初の結果式が型なし NULL の場合、VARCHAR(0) とみなされます。最初の結果式が CHAR または GRAPHIC の場合、VARCHAR もしくは VARGRAPHICにプロモートされます。
  • GREATEST 関数。 最初の式が CHAR、BINARY または GRAPHIC の場合、VARCHAR、VARBINARY もしくは VARGRAPHIC にプロモートされます。
  • INSERT 関数。 4 番目の引数で NULL 値または空ストリングを指定すると、1 番目の引数から、2 番目の引数で示されたバイト位置から 3 番目の引数で示されたバイト数分が削除されます。
  • LEAST 関数。 最初の式が CHAR、BINARY または GRAPHIC の場合、VARCHAR、VARBINARY もしくは VARGRAPHIC にプロモートされます。
  • LENGTH 関数。 LENGTH 関数によって戻される値は、文字ストリング内のバイト数です。 空ストリング値の場合は、NULL 値が戻ります。
  • NVL 関数。 最初の式が CHAR、BINARY または GRAPHIC の場合、VARCHAR、VARBINARY、もしくは VARGRAPHIC にプロモートされます。
  • NVL2 関数。 結果式が型なし NULL の場合、VARCHAR(0) とみなされます。結果式が CHAR、BINARY、または GRAPHIC の場合、VARCHAR、VARBINARY、もしくは VARGRAPHIC にプロモートされます。
  • REGEXP_REPLACE 関数。NULL 値または空ストリングである 3 番目の引数は空ストリングとみなされます。他の引数で指定された一致ストリングに基づいてソース・ストリングから削除されるストリングは、何にも置き換えられません。
  • REPLACE 関数。 すべての引数の値のデータ・タイプが CHAR、VARCHAR、BINARY、VARBINARY、GRAPHIC、VARGRAPHIC のいずれかである場合は、以下のようになります。
    • NULL 値または空ストリングである 2 番目の引数は空ストリングとみなされ、1 番目の引数が結果として戻されます。
    • NULL 値または空ストリングである 3 番目の引数は空ストリングとみなされ、2 番目の引数によってソース・ストリングから削除されます。

    値のデータ・タイプが CLOB または BLOB である引数があり、いずれかの引数が NULL 値である場合、結果は NULL 値になります。 REPLACE 関数の 3 つの引数すべてを指定する必要があります。

  • SUBSTR 関数。 SUBSTR への参照は、1 番目の引数に基づく次の関数呼び出しで置換されます。
    • SUBSTRB - 1 番目の引数が、ストリング単位が OCTETS で定義されているバイナリー・ストリングまたは文字ストリングの場合。
    • SUBSTR2 - 1 番目の引数が、ストリング単位が CODEUNITS16 で定義されている GRAPHIC ストリングの場合。
    • SUBSTR4 - 1 番目の引数が、ストリング単位が CODEUNITS32 で定義されている文字ストリングまたは GRAPHIC ストリングの場合。
  • TO_CHAR 関数。 2 個の引数が指定され、最初の引数がストリングの場合、最初の引数は 10 進浮動小数点にキャストされます。
  • TO_NCHAR 関数。 2 個の引数が指定され、最初の引数がストリングの場合、最初の引数は 10 進浮動小数点にキャストされます。
  • TRANSLATE 関数。 from-string-exp は 2 番目の引数、to-string-exp は 3 番目の引数です。 to-string-expfrom-string-exp より短い場合は、char-string-exp (1 番目の引数) にある from-string-exp の余分な文字が削除されます。つまり、異なる埋め込み文字が 4 番目の引数で指定されない限り、デフォルトの pad-char 引数が実質的に空ストリングになります。
  • TRIM 関数。 TRIM 関数呼び出しのトリム文字引数が NULL 値または空ストリングである場合は、NULL 値が戻されます。
  • VARCHAR_FORMAT 関数。 2 個の引数が指定され、最初の引数がストリングの場合、最初の引数は 10 進浮動小数点にキャストされます。

ALTER TABLE ステートメントまたは CREATE TABLE ステートメントで、VARCHAR または VARGRAPHIC データ・タイプで定義された列に、明示的な値がなく DEFAULT 節が指定された場合、デフォルト値はブランク文字になります。列が VARBINARY データ・タイプとして定義されている場合、デフォルト値は 16 進数のゼロです。

カタログ・ビュー列の空ストリングはブランク文字に変換されます。 以下に例を示します。
  • 可視データ・パーティションの場合、SYSCAT.DATAPARTITIONS.STATUS にはブランク文字が 1 つ含まれます
  • パッケージ・バージョンが明示的に設定されていない場合、SYSCAT.PACKAGES.PKGVERSION にはブランク文字が 1 つ含まれます
  • コンパイル・オプションが設定されていない場合、SYSCAT.ROUTINES.COMPILE_OPTIONS には NULL 値が 1 つ含まれます

SQL ステートメントでパラメーター・マーカーを使用すると、VARCHAR2 の使用に影響するデータ・タイプ変換が行われる場合があります。 例えば、入力値が長さゼロの VARCHAR で、LOB に変換された場合、結果は NULL 値になります。 ただし、入力値が長さゼロの LOB で、LOB に変換された場合には、結果は長さゼロの LOB になります。 入力値のデータ・タイプは、据え置き準備に影響される場合があります。

データ・タイプを定義する際、CHAR を CODEUNITS32 の同義語として使用でき、また BYTE を OCTETS の同義語として使用できます。

制約事項

VARCHAR2 データ・タイプおよび関連する文字ストリングの処理のサポートには、以下の制約事項があります。
  • VARCHAR2 の長さ属性修飾子の CHAR は、Unicode データベース内でのみ CODEUNITS32 の同義語として受け入れられます。
  • LONG VARCHAR および LONG VARGRAPHIC データ・タイプはサポートされません (ただし明示的にはブロックされません)。
  • VARCHAR2 パラメーターの最大長を指定しない場合、デフォルトは 4000 バイトになります。
  • TIS620-1 (コード・ページ 874) タイ語データベースの文字のソートに使用される NLSCHAR 照合は、DB2_COMPATIBILITY_VECTOR=ORA の設定時にはサポートされません。