ストリング変換の規則

演算の実行に使用されるコード・ページは、 その演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。

これらの規則は以下に適用されます。
  • セット演算 (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 になります。