Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


3.10.2 CREATE PUBLIC FUNCTION(パブリック関数定義)

〈この項の構成〉

(1) 機能

すべてのユーザから,認可識別子でルーチン識別子を修飾しなくても使用できる関数(パブリック関数)を定義します。

(2) 使用権限

スキーマを所有するユーザ

自分が所有するパブリック関数を定義できます。

(3) 形式

 CREATE PUBLIC 関数本体

(4) オペランド

(a) PUBLIC

関数をパブリック関数として定義する場合に指定します。

パブリック関数にすると,同じ内容の関数をユーザごとに定義しなくても,一つの関数をルーチン識別子だけを指定して複数のユーザで使用できます。

(b) 関数本体

「〔認可識別子.〕ルーチン識別子」以外の説明については,「CREATE FUNCTION(関数定義)」と同じです。

〔認可識別子.〕ルーチン識別子
認可識別子

パブリック関数のため,認可識別子は指定できません。

ルーチン識別子

定義するパブリック関数のルーチン識別子を指定します。ルーチン識別子は,パブリック関数中で同じルーチン識別子を使用できます。

(5) 共通規則

  1. 関数本体の「〔認可識別子.〕ルーチン識別子」の認可識別子は指定できません。

  2. 関数本体中に指定した関数呼出しの関数名がPUBLICで修飾されている場合,現在定義しようとしているパブリック関数と,ルーチン識別子,引数の数が一致するパブリック関数は指定できません。

    関数本体中に指定した関数呼出しの関数名が認可識別子で修飾されていない場合,現在定義しようとしているパブリック関数と,ルーチン識別子,引数の数が一致する関数は指定できません。

  3. 次の条件をすべて満たすパブリック関数が定義されている場合,CREATE PUBLIC FUNCTIONは実行できません。

    • ルーチン識別子(関数名)が同じ

    • パラメタの数が同じ

    • パラメタのデータ型が同じ

    注※

    固定長文字データ型又は可変長文字データ型の文字集合指定が異なる場合は,異なるデータ型として扱います。

  4. ALTER ROUTINEでSQLコンパイルオプションを指定する場合,再作成する関数の元のCREATE PUBLIC FUNCTIONにSQLコンパイルオプションを反映してできるSQL文は,SQL文の最大長を超えないようにしてください。

  5. 実行中のSQLオブジェクトが無効になる場合,外部Java手続き中からCREATE PUBLIC FUNCTIONは実行できません。

  6. その他の規則は,「CREATE FUNCTION(関数定義)」と同じです。

(6) 留意事項

  1. CREATE PUBLIC FUNCTIONは,OLTP下のX/Openに従ったUAPから指定できません。

  2. パブリック関数定義に伴うSQLオブジェクトの無効化について,次に示します。

    • 定義するパブリック関数と,ルーチン識別子及びSQLパラメタ数が同じパブリック関数が既にある場合,既にあるパブリック関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクトがあれば,そのSQLオブジェクトは無効となります。

    • 定義するパブリック関数と,ルーチン識別子及びSQLパラメタ数が同じで,かつ認可識別子が'MASTER'の関数がある場合,認可識別子'MASTER'の関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクトがあれば,そのSQLオブジェクトは無効となります。

    ストアドファンクションを定義,又は削除するときの注意事項については,マニュアル「HiRDB UAP開発ガイド」を参照してください。

  3. 2に示した無効になる関数のうち,次のどちらかの条件を満たす関数をビュー定義で使用している場合,パブリック関数定義がエラーになります。

    • 引数のデータ型に抽象データ型を使用している

    • 戻り値のデータ型に抽象データ型を使用している

  4. 無効となった関数を使用したビュー表がある場合,そのビュー表を操作するにはALTER ROUTINEを実行して関数のSQLオブジェクトを再作成しておく必要があります。

  5. ディクショナリ表の所有者を格納する列(SQL_ROUTINES表のROUTINE_SCHEMA列など)にはPUBLICが設定されます。また,パブリック関数を定義した認可識別子はSQL_ROUTINES表のROUTINE_CREATOR列に格納されます。

  6. パブリック関数の削除は,DROP PUBLIC FUNCTIONで行います。

  7. その他の留意事項は,「CREATE FUNCTION(関数定義)」と同じです。