Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.7.3.1 ユーザー定義関数のための CREATE FUNCTION 構文

CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
    SONAME shared_library_name

ユーザー定義関数 (UDF) は、ABS()CONCAT() などのネイティブな (組み込みの) MySQL 関数のように機能する新しい関数によって MySQL を拡張するための方法です。

function_name は、この関数を呼び出すために SQL ステートメントで使用される名前です。RETURNS 句は、この関数の戻り値の型を示します。DECIMALRETURNS のあとの正当な値ですが、現在 DECIMAL 関数は文字列値を返すため、STRING 関数のように記述してください。

shared_library_name は、この関数を実装するコードを含む共有オブジェクトファイルのベース名です。このファイルは、プラグインディレクトリに存在する必要があります。このディレクトリは、plugin_dir システム変数の値から取得できます。詳細は、セクション24.3.2.5「ユーザー定義関数のコンパイルおよびインストール」を参照してください。

関数を作成するには、mysql データベースに対する INSERT 権限が必要です。これが必要なのは、CREATE FUNCTION によって、関数の名前、型、および共有ライブラリ名を記録する mysql.func システムテーブルに行が追加されるためです。このテーブルが存在しない場合は、mysql_upgrade コマンドを実行して作成するようにしてください。セクション4.4.7「mysql_upgrade — MySQL テーブルのチェックとアップグレード」を参照してください。

アクティブ関数とは、CREATE FUNCTION を使用してロードされていて、DROP FUNCTION を使用して削除されていない関数です。すべてのアクティブ関数は、サーバーが起動するたびにリロードされますが、--skip-grant-tables オプションを指定して mysqld を起動した場合は異なります。この場合は、UDF の初期化がスキップされ、UDF は使用できません。

ユーザー定義関数を記述するための手順については、セクション24.3.2「新しいユーザー定義関数の追加」を参照してください。UDF のメカニズムが機能するには、関数を C か C++ (または、C の呼び出し規則を使用できる別の言語) で記述する必要があり、オペレーティングシステムが動的ロードをサポートしている必要があり、さらに mysqld を (静的にではなく) 動的にコンパイルしている必要があります。

AGGREGATE 関数は、SUMCOUNT() などのネイティブな MySQL 集約 (サマリー) 関数とまったく同じように機能します。AGGREGATE が機能するには、mysql.func テーブルに type カラムが含まれている必要があります。mysql.func テーブルにこのカラムが含まれていない場合は、mysql_upgrade プログラムを実行して作成するようにしてください (セクション4.4.7「mysql_upgrade — MySQL テーブルのチェックとアップグレード」を参照してください)。

注記

UDF に関連付けられた共有ライブラリをアップグレードするには、DROP FUNCTION ステートメントを発行し、共有ライブラリをアップグレードしたあと、CREATE FUNCTION ステートメントを発行します。最初に共有ライブラリをアップグレードしてから DROP FUNCTION を使用すると、サーバーがクラッシュする可能性があります。


User Comments
Sign Up Login You must be logged in to post a comment.