MySQL 8.0 リファレンスマニュアル


13.7.4.1 ユーザー定義関数用の CREATE FUNCTION ステートメント

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 句は、この関数の戻り値の型を示します。 DECIMALRETURNS のあとの正当な値ですが、現在 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 を使用すると、サーバーが予期せず停止する可能性があります。


関連キーワード:  ステートメント, CREATE, 関数, TABLE, FUNCTION, DROP, テーブル, 定義, サブクエリー, SLAVE