VARCHAR2 および NVARCHAR2 データ・タイプ
VARCHAR2 および NVARCHAR2 データ・タイプは、Oracle VARCHAR2 および NVARCHAR2 データ・タイプを使用するアプリケーションをサポートします。
有効化
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 です。
- カタログ・ビューのストリング列情報が関連する比較では、データベース照合に関わらず、常に空白埋め比較セマンティクスによる IDENTITY 照合を使用します。
- FOR BIT DATA 属性を持つデータ・タイプが関連するストリング比較では、常に空白埋め比較セマンティクスによる IDENTITY 照合が使用されます。
一方のオペランド | 他方のオペランド | 結果のデータ・タイプ |
---|---|---|
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 値が生成されます。
- 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-exp が from-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 進数のゼロです。
- 可視データ・パーティションの場合、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 の長さ属性修飾子の CHAR は、Unicode データベース内でのみ CODEUNITS32 の同義語として受け入れられます。
- varchar2_compat データベース構成パラメーターを ON に設定した場合には、LONG VARCHAR および LONG VARGRAPHIC データ・タイプはサポートされません (ただし、明示的にはブロックされません)。
- VARCHAR2 パラメーターの最大長を指定しない場合、デフォルトは 4000 バイトになります。
- TIS620-1 (コード・ページ 874) タイ語データベースの文字のソートに使用される NLSCHAR 照合は、DB2_COMPATIBILITY_VECTOR=ORA の設定時にはサポートされません。