ストリング変換の規則
演算の実行に使用されるコード・ページは、 その演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。
これらの規則は以下に適用されます。
- セット演算 (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 上の UCS-2 (つまり、文字データ・タイプ上の GRAPHIC データ・タイプ) になります。 (非 Unicode データベースでは、異なるコード化スキーム間での変換はサポートされません。)
- ホスト変数であるオペランド (コード・ページは BIT DATA ではない) の場合、 結果コード・ページはデータベース・コード・ページになります。 そのようなホスト変数からの入力データは、 使用前に、アプリケーション・コード・ページからデータベース・コード・ページに変換されます。
以下については、必要なら結果のコード・ページへの変換が行われます。
- 連結演算子のオペランド
- スカラー関数 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 になります。