Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


4.3.2 ストアドファンクションの定義

ストアドファンクションは,SQLで記述した一連のデータベース操作を,ユーザ定義関数としてデータベースに登録しておく機能です。

〈この項の構成〉

(1) SQLストアドファンクションの定義と実行

SQLストアドファンクションは,CREATE FUNCTION又はCREATE TYPE実行時にユーザ定義関数がデータベースに登録され,DROP FUNCTION実行時に削除されます。

登録したユーザ定義関数は,SQL文中に関数呼出しを指定すれば,その関数を呼び出して実行します。

SQLオブジェクトが無効になっている関数がある場合には,ALTER ROUTINEで関数を再作成することもできます。

SQLストアドファンクションの定義と実行を次の図に示します。

図4‒13 SQLストアドファンクションの定義と実行

[図データ]

パブリックファンクション

他ユーザが定義したストアドファンクションを使用する場合は,UAP中からストアドファンクションを呼び出すときに,所有者の認可識別子とルーチン識別子を指定する必要があります。しかし,CREATE PUBLIC FUNCTIONを実行してパブリックファンクションとして定義すると,他ユーザが定義したストアドファンクションを使用する場合でも,UAP中からストアドファンクションを呼び出すときに,所有者の認可識別子を指定する必要がなくなります(ルーチン識別子だけ指定します)。

(2) SQLストアドファンクションの例

SQLストアドファンクションの例として,ルーチン制御SQLを組み合わせてユーザ定義関数(ファンクション)として定義する例とそれを呼び出して実行する例を次の図に示します。

図4‒14 SQLストアドファンクションの例

[図データ]

[説明]
  1. ユーザ定義関数の名前とSQLパラメタの定義

  2. 関数の戻り値の指定

  3. 複合文の開始

  4. SQL変数の宣言

  5. 値の代入の指定

  6. 関数の戻り値を返却する指定

  7. 複合文の終了

  8. 関数呼出しを使用した検索

各SQL文については,マニュアル「HiRDB SQLリファレンス」を参照してください。

関数の定義例:

(3) 呼び出す関数の決定規則と結果のデータ型

HiRDBでは,関数を多重定義できるため,呼び出す関数の候補が複数ある場合があります。関数の呼び出しの記述と,関数の定義がどのように一致するかによって,呼び出す関数が決定されます。抽象データ型がある表と呼び出す関数の対応を次の図に示します。

図4‒15 抽象データ型がある表と呼び出す関数の対応

[図データ]

[説明]

例えば,社員表に対して抽象データ型関数「報酬」を使用して検索する,次のようなSQL文があるとします。

 SELECT 社員番号 FROM 社員表 WHERE 報酬(従業員)>=200000

この場合,パラメタの値のデータ型がt_従業員かt_営業部員かによって,それぞれのデータ型に対応した関数が決定され,呼び出されます。

なお,この社員表の定義内容については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

注※1 報酬=基本給×報酬率()

注※2 報酬=顧客総数()×1000+基本給×報酬率()

(例) 抽象データ型を含む場合の呼び出し関数の決定

A,B,Cを抽象データ型とし,CをBのスーパタイプ,BをAのスーパタイプとします(抽象データ型の優先度:A→B→C)。

(例1)

<前提条件>
表定義

CREATE TABLE T1(C1 C)

関数定義

f(A),f(B),f(C)

SQL文

SELECT f(C1) FROM T1

<結果>
基本となる関数

f(C)

関数呼出しがf(C1)の場合の候補となる関数

f(A),f(B),f(C)

呼び出し関数

SQL文実行時に呼び出す関数を次に示します。

T1.C1の実際の値

呼び出し関数

A型

f(A)

B型

f(B)

C型

f(C)

NULL値

f(C)

(例2)

<前提条件>
表定義

CREATE TABLE T1(C1 C,C2 B)

関数定義

f(A,A),f(A,B),f(A,C),f(B,A),f(B,C),f(C,A),f(C,B),f(C,C)

SQL文

SELECT f(C1,C2) FROM T1

<結果>
基本となる関数

f(C,B)

関数呼出しがf(C1,C2)の場合の候補となる関数

f(A,A),f(A,B),f(A,C),f(B,A),f(B,C),f(C,A),f(C,B)

呼び出し関数

SQL文実行時に呼び出す関数を次に示します。

T1.C1の実際の値

T1.C2の実際の値

呼び出し関数

A型

A型

f(A,A)

B型

f(A,B)

NULL値

f(A,B)

B型

A型

f(B,A)

B型

f(B,C)

NULL値

f(B,C)

C型

A型

f(C,A)

B型

f(C,B)

NULL値

f(C,B)

NULL値

A型

f(C,A)

B型

f(C,B)

NULL値

f(C,B)