CREATE FUNCTION MAPPING ステートメント
CREATE FUNCTION MAPPING ステートメントは、フェデレーテッド・データベース関数 (または関数テンプレート) と、データ・ソース関数との間でマッピングを定義したり、フェデレーテッド・データベース関数とデータ・ソース関数との間でのデフォルトのマッピングを使用不可にしたりできます。
- 指定したデータ・ソース
- データ・ソースの範囲。例えば、特定のタイプおよびバージョンのすべてのデータ・ソース
1 つの関数に対して複数の関数マッピングが適用可能である場合、最新のマッピングが適用されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
このステートメントの 許可 ID が持つ特権には、DBADM 権限が含まれている必要があります。
構文
説明
- function-mapping-name
- 関数マッピングを指定します。
この名前は、カタログで既に記述されている関数マッピングを指定するものであってはなりません (SQLSTATE 42710)。
function-mapping-name を省略すると、システムが生成したユニークな名前が割り当てられます。
- function-name
- マップ元となるフェデレーテッド・データベース関数 またはフェデレーテッド・データベース関数テンプレートの修飾名または非修飾名を指定します。
- data-type
- 入力パラメーターのある関数または関数テンプレートの場合、
data-type にそれらのパラメーターのデータ・タイプを指定します。
data-type を XML またはユーザー定義タイプにすることはできません。
パラメーター化データ・タイプに長さ、精度、または位取りを指定する代わりに、 空の括弧を使用できます。 パラメーター化データ・タイプには空の括弧を使用することが推奨されています。 例えば、CHAR() のようにします。 特定の長さ、位取り、または精度を指定して定義可能なデータ・タイプのことを、 パラメーター化データ・タイプといいます。 パラメーター化データ・タイプは、ストリング・データ・タイプと 10 進データ・タイプです。 指定する長さ、精度、または位取りは、関数テンプレートのものと同じでなければなりません。 括弧をすべて省略した場合は、 データ・タイプのデフォルト長が使用されます (CREATE TABLE ステートメントの説明を参照)。
- SPECIFIC specific-name
- マップ元の関数または関数テンプレートを指定します。 specific-name を指定して、便利な関数名を作成します。
- SERVER server-name
- マップ元の関数を含むデータ・ソースを指定します。
- SERVER TYPE server-type
- マップ元の関数を含むデータ・ソースのタイプを指定します。
- VERSION
- server-type に示されたデータ・ソースのバージョンを指定します。
- version
- バージョン番号を指定します。 値は整数でなければなりません。
- release
- version で示されたバージョンのリリース番号を指定します。 値は整数でなければなりません。
- mod
- release で示されたリリースのモディフィケーション番号を指定します。 値は整数でなければなりません。
- version-string-constant
- バージョンの正式名称を指定します。 version-string-constant は単一値 (例えば、'8i') にすることができます。あるいは、version、release、そして該当する場合は mod を連結した値にすることができます (例えば、'8.0.3')。
- WRAPPER wrapper-name
- server-type および server-version に示されたタイプおよびバージョンのデータ・ソースと対話するために、フェデレーテッド・サーバーが使用するラッパーの名前を指定します。
- OPTIONS
- 作成する関数マッピングの構成オプションを指定します。 指定可能なオプションは、関数マッピングの作成対象オブジェクトのデータ・ソースによって異なります。 データ・ソースとそれぞれに当てはまる関数マッピング・オプションのリストについては、データ・ソース・オプションを参照してください。 各オプション値は文字ストリング定数で、単一引用符で囲む必要があります。
- WITH INFIX
- データ・ソース関数が infix 形式で生成されることを指定します。 フェデレーテッド・データベース・システムは接頭表記法を リモート・データ・ソースが使用する中置表記法に変換します。
注
- フェデレーテッド・データベースの関数または関数テンプレートは、
以下の場合に、データ・ソース関数へマッピングすることができます。
- フェデレーテッド・データベース関数またはテンプレートに、 データ・ソース関数と同じ数の入力パラメーターがある場合。
- フェデレーテッド・データベース関数またはテンプレートに定義されたデータ・タイプと、 データ・ソース関数に定義された対応するデータ・タイプとが互換性のある場合。
- 分散要求が、データ・ソース関数へマップされる組み込みデータベース関数を参照する場合、 オプティマイザーは、要求の処理時にいずれかの関数を呼び出すための戦略を開発します。組み込みデータベース関数を呼び出すときのオーバーヘッドが、 データ・ソース関数を呼び出す場合より少なければ、Db2 関数が呼び出されます。しかし、組み込みデータベース関数の方がオーバーヘッドが大きいのであれば、 データ・ソース関数が呼び出されます。
- 分散要求が、データ・ソース関数へマップされる組み込みデータベース関数テンプレートを参照する場合、 要求の処理時には、データ・ソース関数だけを呼び出せます。テンプレートには実行可能コードがないので呼び出せません。
- デフォルトの関数マッピングを使用不可にして、 操作できないよう設定することができます (ドロップすることはできません)。 デフォルトの関数マッピングを使用不可にするには、CREATE FUNCTION MAPPING ステートメントをコーディングし、マッピング内に組み込みデータベース関数の名前を指定して DISABLE オプションを 'Y' に設定します。
- SYSIBM スキーマ内の関数には特定の名前はありません。 SYSIBM スキーマの関数のデフォルト関数マッピングをオーバーライドするには、明示修飾子 SYSIBM (SYSIBM.LENGTH() など) を使用して function-name を指定します。
- 所定の作業単位 (UOW) 内の CREATE FUNCTION MAPPING ステートメントは、
以下のいずれかの条件の下では処理できません (SQLSTATE 55007)。
- ステートメントが 1 つのデータ・ソースを参照していて、
次のいずれかが既に UOW に含まれている。
- このデータ・ソース内の表またはビューのニックネームを参照する SELECT ステートメント。
- このデータ・ソース内の表またはビューのニックネーム上のオープン・カーソル。
- このデータ・ソース内の表またはビューのニックネームに対して発行された INSERT、DELETE、または UPDATE ステートメント。
- ステートメントがデータ・ソースのカテゴリー (例えば、
特定のタイプおよびバージョンのすべてのデータ・ソースなど) を参照しており、
次のいずれかが既に UOW に含まれている。
- それらのデータ・ソースのいずれかの中の表またはビューのニックネームを参照する SELECT ステートメント。
- それらのデータ・ソースのいずれかの中の表またはビューのニックネーム上のオープン・カーソル。
- それらのデータ・ソースのいずれかの中の表またはビューのニックネームに対して 発行された INSERT、DELETE、または UPDATE ステートメント。
- ステートメントが 1 つのデータ・ソースを参照していて、
次のいずれかが既に UOW に含まれている。
- 表関数または行関数に対する関数マッピングの作成: 表または行を戻すリモート関数への関数マッピングの作成は、フェデレーテッド・データベースではサポートされていません。
例
- 例 1: 関数テンプレートを、
すべての Oracle データ・ソースでアクセスできる UDF にマップします。
このテンプレートは STATS といい、NOVA というスキーマに属するものです。
Oracle UDF は STATISTICS といい、STAR というスキーマに属しています。
CREATE FUNCTION MAPPING MY_ORACLE_FUN1 FOR NOVA.STATS (DOUBLE, DOUBLE) SERVER TYPE ORACLE OPTIONS (REMOTE_NAME 'STAR.STATISTICS') - 例 2: BONUS という関数テンプレートを、
ORACLE1 という Oracle データ・ソースで使われている UDF (これも BONUS という) へマップします。
CREATE FUNCTION MAPPING MY_ORACLE_FUN2 FOR BONUS() SERVER ORACLE1 OPTIONS (REMOTE_NAME 'BONUS') - 例 3: フェデレーテッド・データベースに対して定義されている WEEK システム関数と、
Oracle データ・ソースに対して定義されている同様の関数との間で、
デフォルトの関数マッピングが行われているとします。
Oracle データを要求し、WEEK を参照する照会が処理されると、
オプティマイザーによるオーバーヘッドを少なくするための見積もりに応じて、
WEEK 関数またはその Oracle 側の対となる関数のいずれかが呼び出されます。
DBA は、そのときの照会で WEEK だけが呼び出された場合に、
パフォーマンスがどの程度影響を受けるかを確認するようにしてください。
WEEK が毎回確実に呼び出されるようにするには、
DBA はマッピングを使用不可にしなければなりません。
CREATE FUNCTION MAPPING FOR SYSFUN.WEEK(INT) SERVER TYPE ORACLE OPTIONS (DISABLE 'Y') - 例 4: フェデレーテッド関数 UCASE(CHAR) を、ORACLE2 という Oracle データ・ソースで使っている UDF へマップします。
Oracle UDF の呼び出しごとの見積命令数を組み込みます。
CREATE FUNCTION MAPPING MY_ORACLE_FUN4 FOR SYSFUN.UCASE(CHAR) SERVER ORACLE2 OPTIONS (REMOTE_NAME 'UPPERCASE', INSTS_PER_INVOC '1000')
