関数テンプレートの作成

フェデレーテッド・サーバーがデータ・ソース関数を認識するのは、データ・ソース関数とフェデレーテッド・データベースの対応する関数のマッピングがある場合です。 関数テンプレートを作成することによって、対応するものがないときにその代わりにすることができます。

始める前に

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかが含まれていなければなりません。
  • SYSADM または DBADM 権限
  • データベースに対する IMPICIT_SCHEMA 権限 (関数の暗黙的または明示的スキーマ名が存在しない場合)
  • 関数のスキーマ名が存在する場合は、スキーマに対する CREATEIN 特権

このタスクについて

制約事項

データ・ソース関数が入力パラメーターを持つ場合は、以下の制約事項があります。
  • 対応するデータベース関数が持つ入力パラメーターの数は、データ・ソース関数と同じでなければなりません。
  • 対応するデータベース関数の入力パラメーターのデータ・タイプは、データ・ソース関数の入力パラメーターの該当データ・タイプと互換性がなければなりません。 LONG VARCHAR、LONG VARGRAPHIC、またはユーザー定義タイプは、データ・タイプとして使用できません。

データ・ソース関数が入力パラメーターを持たない場合、対応するデータベース関数は入力パラメーターを持つことができません。

プロシージャー

  1. CREATE FUNCTION ステートメントを AS TEMPLATE パラメーターを指定して使用します。
    以下に例を示します。
    CREATE FUNCTION BONUS ()   
      RETURNS DECIMAL(8,2)   
      AS TEMPLATE   
      DETERMINISTIC   
      NO EXTERNAL ACTION 
    ボーナス()
    関数テンプレートに付ける名前。
    小数点以下8桁、2桁を返します
    出力のデータ・タイプ。
    AS TEMPLATE
    これが関数ではなく関数テンプレートであることを指示します。
    DETERMINISTIC
    関数は、ある特定の引数値セットに対して常に同じ結果を戻すことを指定します。
    NO EXTERNAL ACTION
    関数は、データベース・マネージャーが管理しないオブジェクトに外的影響を与えないことを指定します。

    DETERMINISTIC および NO EXTERNAL ACTION 文節は、この関数自体が deterministic 関数であるかどうか、および外部アクションにつながるかどうかによって指定する必要があります。 そうしないと、この関数テンプレートでサポートされる SQL 操作に制限が出てきます。

  2. 関数テンプレートを作成したら、次にテンプレートとデータ・ソース関数の間の関数マッピングを作成する必要があります。 関数マッピングは CREATE FUNCTION MAPPING ステートメントを使用して作成されます。
    以下に例を示します。
    CREATE FUNCTION MAPPING MY_INFORMIX_FUN FOR BONUS()   
      SERVER TYPE INFORMIX OPTIONS (REMOTE_NAME 'BONUS()') 
    MY_INFORMIX_FUN
    関数マッピングに付ける名前。 フェデレーテッド・データベースのグローバル・カタログにすでに記述されている関数マッピング名と重複する名前は使用できません。 これは固有でなければなりません。
    FOR BONUS ()
    ローカルの Db2® 関数テンプレート名。 データ・タイプ入力パラメーターを括弧で囲みます。
    サーバタイプ INFORMIX
    マップ先の関数が含まれるデータ・ソースのタイプを特定します。
    OPTIONS (REMOTE_NAME 'BONUS() ')
    ローカル・データベース関数テンプレートにマップするリモート・データ・ソース関数の名前を特定するためのオプション。