インラインテーブル値関数の実体は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)
|
|
|