CREATE [AGGREGATE] FUNCTION function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
このステートメントは、function_name
という名前のユーザー定義関数 (UDF) をロードします。 (CREATE FUNCTION
は、ストアドファンクションの作成にも使用されます。セクション13.1.17「CREATE PROCEDURE ステートメントおよび CREATE FUNCTION ステートメント」 を参照してください。)
ユーザー定義関数は、ABS()
や CONCAT()
などのネイティブ (組込み) MySQL 関数のように機能する新しい関数を使用して MySQL を拡張する方法です。 Adding a Loadable Functionを参照してください。
function_name
は、この関数を呼び出すために SQL ステートメントで使用される名前です。 RETURNS
句は、この関数の戻り値の型を示します。 DECIMAL
は RETURNS
のあとの正当な値ですが、現在 DECIMAL
関数は文字列値を返すため、STRING
関数のように記述してください。
AGGREGATE
キーワード (指定されている場合) は、UDF が集計 (グループ) 関数であることを示します。 集計 UDF は、SUM()
や COUNT()
などのネイティブ MySQL 集計関数とまったく同じように機能します。
shared_library_name
は、関数を実装するコードを含む共有ライブラリファイルのベース名です。 このファイルは、プラグインディレクトリに存在する必要があります。 このディレクトリは、plugin_dir
システム変数の値から取得できます。 詳細は、セクション5.7.1「ユーザー定義関数のインストールおよびアンインストール」を参照してください。
CREATE FUNCTION
では、関数を登録するために mysql.func
システムテーブルに行が追加されるため、mysql
システムスキーマに対する INSERT
権限が必要です。
CREATE FUNCTION
は、インストールされている UDF に関する実行時情報を提供するパフォーマンススキーマ user_defined_functions
テーブルにもこの関数を追加します。 セクション27.12.19.12「user_defined_functions テーブル」を参照してください。
mysql.func
システムテーブルと同様に、パフォーマンススキーマ user_defined_functions
テーブルには、CREATE FUNCTION
を使用してインストールされた UDF が一覧表示されます。 mysql.func
テーブルとは異なり、user_defined_functions
テーブルには、サーバーコンポーネントまたはプラグインによって自動的にインストールされる UDF もリストされます。 この違いにより、どの UDF がインストールされているかを mysql.func
より user_defined_functions
で確認することをお薦めします。
通常の起動シーケンスでは、サーバーは mysql.func
テーブルに登録されている UDF をロードします。 --skip-grant-tables
オプションを使用してサーバーを起動した場合、テーブルに登録されている UDF はロードされず、使用できません。
UDF に関連付けられた共有ライブラリをアップグレードするには、DROP FUNCTION
ステートメントを発行し、共有ライブラリをアップグレードしたあと、CREATE FUNCTION
ステートメントを発行します。 最初に共有ライブラリをアップグレードしてから DROP FUNCTION
を使用すると、サーバーが予期せず停止する可能性があります。