データベース千夜一夜第32回

ユーザー定義関数 長谷川裕行
有限会社 手國堂

インラインテーブル値関数

インラインテーブル値関数の実体は1行のSQLです。ならば、わざわざ関数として定義する必要などなさそうに思えますが、アプリケーションで頻繁に使用される単純なSQLに分かりやすい名前を与えておくことで、綴り間違いを防ぐ効用があります。


- インラインテーブル値関数の書式 -

インラインテーブル値関数とする処理は、一般には「ビューにするほど大げさではないけれども、案外頻繁に利用されるSELECT文」が対象になります。引数を与えられることも大きなメリットです。

書式は以下の通りです。

Create Function <関数名> (@<引数名> As <データ型>)
Returns Table
As
Return <SELECT文>

<関数名>で関数の名前を定義し、続いて(必要なら)“@<引数名> As <データ型>”で引数名とそのデータ型を明らかにします。引数名の先頭には@を付けます。

戻り値はテーブル・オブジェクト(データセット)となります。

Returnに続けて1行で完結するSELECT文を記述すれば、その結果が返されます。SELECT文の中には引数を埋め込めるため、多くの場合WHERE句に続く条件式で引数を使うことになるでしょう。


- インラインテーブル値関数の例 -

例を1つ掲げておきましょう。

商品の基本テーブル「商品_mr」から「仕入単価が引数で指定した額以上の商品」を抽出する処理です。

リスト5:テーブル「商品_mr」から「仕入単価が引数で指定した額以上の商品」を抽出するテーブル値関数“GetItemsByValue”(ex07.sql)

Create Function GetItemsByValue (@Value As money)
Returns Table
As
Return SELECT 商品ID, 品名, 仕入単価 FROM 商品_mr WHERE 仕入単価 >= @Value


- SELECT文で呼び出す -

テーブル値関数の実体はSELECT文ですが、それをSELECT文の中から呼び出すことができます。

  SELECT * FROM <関数名>

「*」の箇所に特定のフィールド名だけを指定することもできます。

先の“GetItemsByValue”関数で「仕入単価が5,000円以上」の商品を抽出するには、以下のようなSELECT文を記述します(ex08.sql)。

SELECT * FROM GetItemsByValue(5000)




トップページ
ユーザー定義関数とは?
スカラ値関数
インラインテーブル値関数
インラインテーブル値関数の書式
インラインテーブル値関数の例
SELECT文で呼び出す
複数ステートメントのテーブル値関数
あとがき
Copyright © MESCIUS inc. All rights reserved.