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

VARCHAR2 および NVARCHAR2 データ・タイプは、Oracle VARCHAR2 および NVARCHAR2 データ・タイプを使用するアプリケーションをサポートします。

有効化

VARCHAR2 と NVARCHAR2 (以降共に VARCHAR2 と呼びます) のサポートを、データベースを作成前にデータベース・レベルで使用可能にします。 このサポートを有効にするには、DB2_COMPATIBILITY_VECTOR レジストリー変数を 16 進値 0x20 (ビット位置 6) に設定してから、インスタンスを停止し再始動して、新しい設定を有効にします。 CREATE DATABASE コマンドを発行して、 Db2® データベースを作成します。 デフォルトで、データベースは Unicode データベースとして作成されます。 例えば、DB という名前のデータベースを作成するには、次のコマンドを実行します。
db2set DB2_COMPATIBILITY_VECTOR=20
db2stop
db2start
Oracle アプリケーション用の Db2 互換フィーチャーを最大限に活用するために推奨される DB2_COMPATIBILITY_VECTOR の設定は ORAです。これにより、すべての互換性ビットが設定されます。

VARCHAR2 サポートを有効にしてデータベースを作成すると、varchar2_compat データベース構成パラメーターは ON に設定されます。

VARCHAR2 サポートを有効にしてデータベースを作成した場合は、DB2_COMPATIBILITY_VECTOR レジストリー変数をリセットしても、そのデータベースの VARCHAR2 サポートを無効にすることはできません。 同様に、VARCHAR2 サポートを無効にしてデータベースを作成した場合は、DB2_COMPATIBILITY_VECTOR レジストリー変数を設定しても、そのデータベースについて VARCHAR2 サポートを後から有効にすることはできません。

NVARCHAR2 データ・タイプを使用するには、データベースが Unicode データベースでなければなりません。

効果

varchar2_compat データベース構成パラメーターを ON に設定すると、次のような効果があります。

SQL ステートメント内で VARCHAR2 データ・タイプが明示的に指定されていた場合は、VARCHAR データ・タイプに暗黙的にマップされます。 VARCHAR2 の最大長は 32672 BYTE または 8168 CHAR です。これは、VARCHAR の 32672 OCTETS または 8168 CODEUNITS32の最大長と同じです。 同様に、 NVARCHAR2 データ・タイプが SQL ステートメントで明示的に検出されると、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 になる可能性があります。 varchar2_compat データベース構成パラメーターが ON に設定されている場合、一部の関数には以下のような特別な考慮事項が適用されます。
  • 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 (最小 (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. 上の表内のイタリック体の変数には、以下の値が保持されている
    変数 オペランドが次のストリング単位でない場合
    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 進浮動小数点にキャストされます。 この動作は、バージョン 10.5 フィックスパック 3 以降のフィックスパックに適用されます。
  • TO_NCHAR 関数。 2 個の引数が指定され、最初の引数がストリングの場合、最初の引数は 10 進浮動小数点にキャストされます。 この動作は、バージョン 10.5 フィックスパック 3 以降のフィックスパックに適用されます。
  • 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 進浮動小数点にキャストされます。 この動作は、バージョン 10.5 フィックスパック 3 以降のフィックスパックに適用されます。

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

データベース構成パラメーター varchar2_compat が ON に設定されている場合、カタログ・ビュー列の空ストリングはブランク文字に変換されます。 以下に例を示します。
  • 可視データ・パーティションの場合、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 の同義語として受け入れられます。
  • varchar2_compat データベース構成パラメーターを ON に設定した場合には、LONG VARCHAR および LONG VARGRAPHIC データ・タイプはサポートされません (ただし、明示的にはブロックされません)。
  • VARCHAR2 パラメーターの最大長を指定しない場合、デフォルトは 4000 バイトになります。
  • TIS620-1 (コード・ページ 874) タイ語データベースの文字のソートに使用される NLSCHAR 照合は、DB2_COMPATIBILITY_VECTOR=ORA の設定時にはサポートされません。