この節では、以下の事柄を実行する方法を説明します。
DB2 が認識しないデータ・ソース関数を呼び出すようにしたいと思うかもしれません。そのような関数は、ユーザー定義関数か、または DB2 が認識しない新規の組み込み関数である可能性があります。
DB2 が認識しないデータ・ソース関数にアクセスできるようにするには、その前に、この関数と連合データベースに保管されている関数の間にマッピングを作成しておく必要があります。マッピングを作成するには、連合データベース関数を選択し、マッピングを作成するための DDL ステートメントへ実行依頼します。このステートメントは CREATE FUNCTION MAPPING と呼ばれます。
連合データベース関数は、既存の関数または関数テンプレート、あるいはユーザーが作成する関数または関数テンプレートでも構いません。 (関数テンプレート とは、実行可能コードがない部分関数です。) CREATE FUNCTION ステートメントを使用すると、関数または関数テンプレートを作成できます。
データ・ソース関数とその連合データベース関数は、以下の点で対応していなければなりません。
CREATE FUNCTION MAPPING および CREATE FUNCTION ステートメントについての資料は、 SQL 解説書 を参照してください。
連合サーバー関数からデータ・ソース関数へのマッピングのための DDL (CREATE FUNCTION MAPPING ステートメント) には、データ・ソース関数が呼び出される際に消費されると思われるオーバーヘッドの見積統計が含まれます。たとえば、データ・ソース関数を呼び出すのに必要な命令の数の見積もり、およびこの関数に渡される引き数のバイトごとに拡張される入出力の数の見積もりを指定できます。これらの見積もりはグローバル・カタログに保管されており、 SYSCAT.FUNCMAPOPTIONS 視点で参照できます。
さらに、 DB2 関数 (関数テンプレートではない) がマッピングに参加する場合、この関数が呼び出される際に消費されるオーバーヘッドの見積もりがカタログに含まれます。この見積もりは、SYSCAT.FUNCTIONS 視点で参照できます。
マッピングが作成された後は、 DB2 関数を参照する分散要求を実行依頼できます。たとえば、DOLLAR という DB2 ユーザー定義関数を US_DOLLAR という Oracle ユーザー定義関数にマップした場合、要求は US_DOLLAR ではなく DOLLAR を指定することになります。要求を処理する際に、最適化プログラムは複数のアクセス戦略を評価します。この中には、DB2 関数の呼び出しのオーバーヘッドの見積もりを反映するものもあれば、データ・ソース関数の呼び出しのオーバーヘッドの見積もりを反映するものもあります。予想されるオーバーヘッドの量が最も少ない戦略が、使用される戦略となります。
消費されるオーバーヘッドの見積もりが変更される場合、グローバル・カタログにこの変更を記録できます。データ・ソース関数の新しい見積もりを記録するには、まず、関数マッピングを除去または使用不可にします (この方法については、 関数マッピングの中断を参照してください)。次に、 CREATE FUNCTION MAPPING ステートメントで新しい見積もりを指定し、そのステートメントでマッピングを再作成します。ステートメントを実行する際に、新しい見積もりが SYSCAT.FUNCTIONS カタログ視点に追加されます。 DB2 関数の見積もりの変更を記録するには、 SYSSTAT.FUNCTIONS カタログ視点を直接更新してください。
統計の見積もりは CREATE FUNCTION MAPPING ステートメントに指定します。それには、関数マッピング・オプション と呼ばれるパラメーターに、これらの見積もりを値として割り当てます。
表 29 では、これらのオプションと値について説明します。
オプション | 有効な設定 | 省略時設定 |
---|---|---|
ios_per_invoc | データ・ソース関数の呼び出しごとの入出力数の見積もり | '0' |
insts_per_invoc | データ・ソース関数の呼び出しごとに処理される命令の数の見積もり | '450' |
ios_per_argbyte | データ・ソース関数に渡される引き数セットのバイトごとに拡張される入出力の数の見積もり | '0' |
insts_per_argbyte | データ・ソース関数に渡される引き数セットのバイトごとに処理される命令の数の見積もり | '0' |
percent_argbytes | データ・ソース関数が実際に読み取る入力引き数バイトの平均パーセントの見積もり | '100' |
initial_ios | データ・ソース関数が呼び出される最初と最後に実行される入出力の数の見積もり | '0' |
initial_insts | データ・ソース関数が呼び出される最初と最後に処理される命令の数の見積もり | '0' |
DROP FUNCTION MAPPING ステートメント、 SYSCAT.FUNCTIONS および SYSSTAT.FUNCTIONS 視点、さらに SYSCAT.FUNCMAPOPTIONS 視点の詳細については、 SQL 解説書 を参照してください。
CREATE FUNCTION MAPPING ステートメントの符号化の方法は、マップするオブジェクトの名前が同じか違うかによって異なります。同じ名前の 2 つの関数 (または関数テンプレートと関数) の間でマッピングを作成する場合、この名前を function-name パラメーターに割り当てる必要があります。
一方、名前が異なる場合は次のようにします。
関数マッピングの使用を中断したい場合には、以下のガイドラインに従ってください。