ストリング変換の規則
演算の実行に使用されるコード・ページは、 その演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。
これらの規則は以下に適用されます。
- セット演算 (UNION、INTERSECT、および EXCEPT) の全選択における対応するストリング列
- 連結のオペランド
- 述部のオペランド (LIKE を除く)
- CASE 式の結果式および DECODE スカラー関数
- スカラー関数 COALESCE (また NVL および VALUE) の引数
- スカラー関数 GREATEST、LEAST、MAX、および MIN の引数
- スカラー関数 OVERLAY (および INSERT) の source-string および insert-string 引数
- IN 述部の IN リストの式値
- 複数行の VALUES 節の対応する式
それぞれの場合で結果コード・ページはバインド時に決定されます。 演算の実行時に、 ストリングがそのコード・ページで識別されるコード・ページに変換されることがあります。 有効な変換がなされていない文字は、置換文字にマップされ、 文字セットと SQLWARN10 が SQLCA で 'W' に設定されます。
結果コード・ページは、オペランドのコード・ページによって決定されます。 初めの 2 つのオペランドのコード・ページが中間結果コード・ページを決定し、
(該当する場合には) そのコード・ページと次のオペランドのコード・ページが新たな中間結果コード・ページを決定します。
以下、同様になります。 最後の中間結果コード・ページと最後のオペランドのコード・ページが、
最終結果のストリングまたは列のコード・ページを決定します。 コード・ページの各ペアについて、次の規則を順番に適用することで結果が決定されます。
- コード・ページが等しい場合、結果はそのコード・ページになります。
- コード・ページが BIT DATA (コード・ページ 0) 結果のコード・ページは BIT DATA になります。
- 両方のコード・ページが Unicode であり、一方のコード・ページがもう一方のコード・ページとは異なるコード化スキームのデータが示されている場合、結果では UTF-8 より UTF-16 BE が優先されます (つまり、文字データ・タイプより GRAPHIC データ・タイプ)。
- 一方のコード・ページが Unicode で、もう一方のページが Unicode でも BIT DATA でもない場合、結果は Unicode オペランドと同じエンコードの Unicode (UTF-16 BE または UTF-8) になります。
- ホスト変数であるオペランド (コード・ページは BIT DATA ではない) の場合、 結果コード・ページはデータベース・コード・ページになります。 そのようなホスト変数からの入力データは、 使用前に、アプリケーション・コード・ページからデータベース・コード・ページに変換されます。
非 Unicode データベースでは、結果のコード・ページが Unicode の場合、結果の照合は ALT_COLLATE データベース構成パラメーターで定義されている代替照合シーケンスになります。
以下については、必要なら結果のコード・ページへの変換が行われます。
- 連結演算子のオペランド
- スカラー関数 COALESCE (また NVL および VALUE) から選択された引数
- スカラー関数 GREATEST、LEAST、MAX、および MIN の選択された引数
- スカラー関数 OVERLAY (および INSERT) の source-string および insert-string 引数
- CASE 式の選択された結果式および DECODE スカラー関数
- IN 述部のリストの式
- 複数行の VALUES 節の対応する式
- セット演算に関係した対応する列
文字変換は、次の条件のすべてに該当する場合に必要になります。
- コード・ページが異なる
- いずれのストリングも BIT DATA ではない
- ストリングが NULL でも空でもない
例
例 1: コード・ページ 850 で作成されたデータベースで、 以下の条件がある場合は、次のようになります。
| 式 | タイプ | コード・ページ |
|---|---|---|
| COL_1 | 列 | 850 |
| HV_2 | ホスト変数 | 437 |
ここで、次のような述部を評価します。
COL_1 CONCAT :HV_2ホスト変数データは、使用前に、データベース・コード・ページに変換されるため、
2 つのオペランドの結果コード・ページは 850 になります。例 2: 上記の例からの情報を使用して、
述部を評価すると、
COALESCE(COL_1, :HV_2:NULLIND,)結果コード・ページは 850 になります。したがって、
COALESCE スカラー関数の結果コード・ページはコード・ページ 850 になります。