MySQL に新しい関数を追加する方法は 3 つあります。
ユーザー定義関数 (UDF) インタフェースを使用して関数を追加できます。ユーザー定義関数はオブジェクトファイルとしてコンパイルされ、
CREATE FUNCTION
ステートメントおよびDROP FUNCTION
ステートメントを使用して、サーバーに対して動的に追加および削除されます。セクション13.7.3.1「ユーザー定義関数のための CREATE FUNCTION 構文」を参照してください。関数をネイティブ (組み込み) MySQL 関数として追加できます。ネイティブ関数はコンパイルされて mysqld サーバー内に組み込まれ、永続的に使用できます。
関数を追加するもう 1 つの方法は、ストアドファンクションを作成することです。これらは、オブジェクトコードをコンパイルするのではなく、SQL ステートメントを使用して記述します。ストアドファンクションを記述するための構文は、ここでは説明しません。セクション20.2「ストアドルーチン (プロシージャーと関数) の使用」を参照してください。
コンパイルされた関数を作成するための各方法には、長所と短所があります。
ユーザー定義関数を作成する場合、サーバー自体のほかにオブジェクトファイルをインストールする必要があります。関数をコンパイルしてサーバーに配置する場合、それを行う必要はありません。
ネイティブ関数の場合は、ソース配布を変更する必要があります。UDF の場合はその必要はありません。UDF をバイナリの MySQL 配布に追加できます。MySQL のソースにアクセスする必要はありません。
MySQL の配布をアップグレードする場合、UDF インタフェースが変更される新しいバージョンにアップグレードしないかぎり、以前インストールした UDF を使用し続けることができます。ネイティブ関数の場合、アップグレードするたびに変更を繰り返す必要があります。
どのような方法を使用して新しい関数を追加したかにかかわらず、これらの関数は、ABS()
、SOUNDEX()
などのネイティブ関数と同じように SQL ステートメントから呼び出すことができます。
各種の関数への参照をサーバーが解釈する方法を記述したルールについては、セクション9.2.4「関数名の構文解析と解決」を参照してください。
以降のセクションでは、UDF インタフェースの機能、UDF を作成するための手順、UDF の誤用を防ぐために MySQL が行うセキュリティー予防措置、およびネイティブな MySQL 関数を追加する方法について説明します。
UDF を作成する方法を示すソースコードの例については、MySQL ソース配布に提供されている sql/udf_example.cc
ファイルを参照してください。