アプリケーション開発の手引き

データ・タイプ・マッピングの処理

データ・ソース表に通称を作成すると、 DB2 はその表についての情報をグローバル・カタログに含めます。この情報には、通称、表の名前、すべての列の名前が含まれますが、これに限られるわけではありません。列ごとに以下の情報が含まれます。

この節では、DB2 がデータ・タイプ・マッピングを使用して、データ・ソース表の列に、DB2 がサポートするどのデータ・タイプを定義すべきかを判別する方法を説明します。次に、データ・タイプ・マッピング (略して"タイプ・マッピング"と呼ばれることもある) について、 2 つの節に分けて説明します。まず、省略時マッピングについて説明し、次に省略時マッピングを上書きして新しいマッピングを作成する方法を説明します。

ローカルに定義するデータ・タイプを DB2 が判別する方法

DB2 はリモート列に使用するローカル・タイプをどのように判別するのでしょうか。 DB2 は、データ・ソースの列のタイプと、対応するローカル・タイプとの間のマッピングを調べ、後者を選択します。たとえば、DB2 が提供する省略時マッピングでは、 DB2 (VSE および VM 版) のデータ・タイプ CHAR は 254 バイトまでサポートし、 DB2 データ・タイプ CHAR を示しています。したがって、DB2 (VSE および VM 版) 表に通称を作成する際に、表の列 C1 に最大長 200 バイトのデータ・タイプ CHAR がある場合、この省略時値を上書きしないかぎり、 C1 には DB2 タイプ CHAR がローカルに定義されます。

省略時のデータ・タイプ・マッピング

RDBMS 間の相違により、データ・ソースのデータ・タイプと連合サーバーのデータ・タイプの間の省略時マッピングは、 1 対 1 とは限りません。しかし、要求されたすべての値が戻されたことを確認するには、このマッピングで十分です。

たとえば、次の 2 つの間に省略時のタイプ・マッピングがあるとします。

タイプ NUMBER(9,0) の列 C2 がある Oracle 表に通称を付けたとします。省略時マッピングを変更しない場合は、 C2 のタイプはローカルに INTEGER と定義されます。さらに、4 バイトの INTEGER は最大精度 10 をサポートするため、連合サーバーから C2 が照会される際には、必ず C2 のすべての値が戻されます。

省略時のデータ・タイプ・マッピングのリストについては、 SQL 解説書 を参照してください。

省略時タイプ・マッピングを上書きして新しいタイプ・マッピングを作成する方法

前述の例が示すように、省略時マッピングではローカル・タイプとリモート・タイプが類似しているために、リモート・タイプが定義されているリモート列を参照する際に、ローカルとリモートの両方のタイプに適合するすべての値が戻されます。しかし、代替マッピングが必要な場合もあります。その場合のシナリオを考慮します。

1 つまたは複数のデータ・ソースに適用されるタイプ・マッピングの定義

Oracle データ・タイプの 3 つの表の特定の列には、タイム・スタンプを表すデータ・タイプ DATE があります。省略時マッピングでは、このタイプはローカル DB2 タイプ TIMESTAMP になります。省略時値を変更しないで 3 つのテーブルの通称を作成する場合、 TIMESTAMP はこれらの列にローカルに定義され、列の DB2 照会でタイム・スタンプが生成されます。しかし、このような照会で時刻だけを生成したいと思っているとします。この場合、Oracle DATE を DB2 タイプ TIME にマップしてから、省略時値を上書きします。こうすると、通称を作成するときに、 TIMESTAMP ではなく TIME が列にローカルに定義されます。結果として、これらを照会する際、タイム・スタンプの時刻の部分だけが戻されることになります。省略時タイプ・マッピングを上書きするには、 CREATE TYPE MAPPING ステートメントを使用できます。

CREATE TYPE MAPPING ステートメントでは、新しいマッピングを特定のデータ・ソースに適用するか (たとえば、組織の 1 部門が使用するデータ・ソース)、特定のタイプのすべてのデータ・ソースに適用するか (たとえば、すべての Oracle データ・ソース)、あるいはあるタイプの特定のバージョンのすべてのデータ・ソースに適用するか (たとえば、すべての Oracle 8.0.3 のデータ・ソース) のいずれかを指定できます。

特定の表のタイプ・マッピングの変更

特定のテーブルのタイプ・マッピングのローカル・タイプを変更できます。たとえば、Oracle データ・タイプ NUMBER(32,3) は、省略時値では DB2 データ・タイプ DOUBLE という浮動小数点データ・タイプにマップします。従業員情報についての Oracle 表で、列 BONUS がデータ・タイプ NUMBER(32,3) で定義されているとします。マッピングにより、BONUS の照会では以下のような値を戻します。

5.0000000000000E+002
1.0000000000000E+003

ここで、+002 は、小数点を右に 2 桁分移動させなければならないことを意味し、 +003 は、小数点を右に 3 桁分移動させなければならないことを意味します。

BONUS の照会でドル単位のような値を戻すようにするには、この表について、実際のボーナスの形式を反映するような精度と位取りで NUMBER(32,3) を DB2 DECIMAL タイプに再マップします。たとえば、ボーナスのドル部分が 6 桁を超えることがないとわかっている場合には、 NUMBER(32,3) を DECIMAL(8,2) に再マップできます。この新しいマッピングの制約の下では、 BONUS の照会で戻される値は以下のようになります。

 500.00
1000.00

特定の表の列のタイプ・マッピングを変更するには、 ALTER NICKNAME ステートメントを使用します。このステートメントを使用すると、通称が定義されている表の列にローカルに定義されているタイプを変更できます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]