• 検索結果がありません。

STEP 6. 関数

6.8 ユーザー定義関数

ユーザー定義関数

関数は、ユーザー自身が作成(定義)することもできます。このような関数をユーザー定義関数

(UDF:User Defined Function)と呼んでいます。

ユーザー定義関数を作成するには、「CREATE FUNCTION」というステートメントを使用します。

構文は、次のとおりです。

CREATE FUNCTION 関数名 ( [@パラメーター名 データ型], ・・・ ) RETURNS 戻り値のデータ型

[AS]

BEGIN

ステートメント RETURN 戻り値 END

パラメーターと AS は省略可能です。BEGIN ~ END で囲まれた領域の中へ処理したい内容を記 述し、“RETURN” に続けて戻り値を記述します。

Let's Try

それでは、ユーザー定義関数を作成してみましょう。

1. 次のように左右の半角スペースを除去する「TRIM」関数を作成します。

USE sampleDB go

CREATE FUNCTION TRIM ( @param1 varchar(100) ) RETURNS varchar(100)

AS BEGIN

RETURN RTRIM( LTRIM(@param1) ) END

名前が「dbo.TRIM」と、「dbo.」が付いていることに注目します。dboは、DataBase Owner の略で、データベースの所有者という意味です。SQL Server の管理者アカウントを利用して、

SQL Server へ接続している場合には、自動的に dbo としてデータベースを操作しています。

したがって、dbo が作成したTRIM 関数ということで「dbo.TRIM」となります。

3. 続いて、次のように入力して、作成したユーザー定義関数を使用してみましょう。

SELECT dbo.TRIM(' 小田 ')

結果は、左右の半角スペースが削除されることを確認できます。@param1 へ “ 小田 ” を与え、関数の中では「RTRIM(LTRIM(@param1))」が実行されているという形です。

4. 続いて、「emp」テーブルの「empname」列に対して、「dbo.TRIM」関数を実行してみま しょう。

SELECT dbo.TRIM(empname) + 'さん', * FROM emp

作成したユーザー定義関数 今回作成した関数は1つの 値を返すので「スカラー値

関数」と呼ばれる

char(50) で定義された「empname」列の右側の余分な空白が、TRIM 関数によって削除で きていることを確認できます。

Note: .NET Framework 言語を使ったユーザー定義関数(SQLCLR)

ユーザー定義関数(UDF)は、Visual Basic や C# などの .NET Framework 言語を使っても作成することがで きます。たとえば、Transact-SQL の ROUND 関数は四捨五入(算術型丸め)ですが、.NET Framework 言語に は、「銀行型丸め」を実装している「Math.Round」メソッドが用意されているので、このメソッドを呼び出すよう なユーザー定義関数も簡単に作成することができます。

なお、.NET Framework 言語で作成した UDF は「SQLCLR 関数」とも呼ばれます。

Goal!

以上ですべての操作が完了です。最後までこの自習書の内容を試された皆さま、いかがでしたでし ょうか? 今回は、入門編ということで、Transact-SQL の基本的な操作方法のご紹介のみになり ました。動的 SQL(sp_executesql)やストアド プロシージャの作成方法、トランザクション、

エラー処理といった応用的な利用方法については、本自習書シリーズの「開発者のための Transact-SQL 応用」で説明していますので、ぜひチャレンジしてみてください