Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.