演算の実行に使用されるコード・ページは、 その演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。
これらの規則は以下に適用されます。
それぞれの場合で結果コード・ページはバインド実行時に決定されます。演算の実行時に、 ストリングがそのコード・ページで識別されるコード・ページに変換されることがあります。 有効な変換がなされていない文字は、置換文字にマップされ、 文字セットと SQLWARN10 が SQLCA で 'W' に設定されます。
結果コード・ページは、オペランドのコード・ページによって決定されます。 初めの 2 つのオペランドのコード・ページが中間結果コード・ページを決定し、 (該当する場合には) そのコード・ページと次のオペランドのコード・ページが新たな中間結果コード・ページを決定します。 以下、同様になります。 最後の中間結果コード・ページと最後のオペランドのコード・ページが、 最終結果のストリングまたは列のコード・ページを決定します。 コード・ページのそれぞれの対では、 以下の規則を順次適用することにより結果が決定されます。
第 1 オペランド | 第 2 オペランド | ||||
---|---|---|---|---|---|
列の値 | 派生値 | 定数 | 特殊 レジスター | ホスト変数 | |
列の値 | 第 1 | 第 1 | 第 1 | 第 1 | 第 1 |
派生値 | 第 2 | 第 1 | 第 1 | 第 1 | 第 1 |
定数 | 第 2 | 第 2 | 第 1 | 第 1 | 第 1 |
特殊レジスター | 第 2 | 第 2 | 第 1 | 第 1 | 第 1 |
ホスト変数 | 第 2 | 第 2 | 第 2 | 第 2 | 第 1 |
中間結果は、派生値オペランドとみなされます。 単一の列値、定数、特殊レジスター、またはホスト変数以外の式も、 派生値オペランドであるとみなされます。 式が CAST 指定の場合 (またはそれに相当する関数への呼び出しの場合) は、 この規則に例外があります。 この場合、第 1 オペランドの種別 は、 CAST 指定の第 1 引き数に基づいて決められます。
視点の列は、その最初の源となっているオブジェクトのオペランド・タイプをもつとみなされます。 たとえば、表列に基づいて定義された視点列は列値とみなされますが、 ストリング式 (A CONCAT B など) に基づく視点列は派生値とみなされます。
以下については、必要なら結果のコード・ページへの変換が行われます。
文字変換は、次の条件のすべてに該当する場合に必要になります。
例
例 1:
以下の条件がある場合は、次のようになります。
式 | タイプ | コード・ページ |
---|---|---|
COL_1 | 列 | 850 |
HV_2 | ホスト変数 | 437 |
ここで、以下の述部を評価すると、
COL_1 CONCAT :HV_2
優先されるオペランドは COL_1 列であるため、 2 つのオペランドの結果コード・ページは 850 になります。
例 2: 上記の例からの情報を使用して、 述部を評価すると、
COALESCE(COL_1, :HV_2:NULLIND,)
結果のコード・ページは 850 になります。 したがって、スカラー関数 COALESCE の結果のコード・ページは、 コード・ページ 850 になります。