関数は以下に示すように宣言する必要があります。注意:
          戻り値の型およびパラメータは、CREATE
          FUNCTION ステートメントで SQL 関数
          XXX() の戻り値を
          STRING、INTEGER、または
          REAL
          のどの型で返すと宣言するかによって異なります。
        
          STRING
          関数の場合は以下のように宣言します。
        
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
          char *result, unsigned long *length,
          char *is_null, char *error);
          INTEGER
          関数の場合は以下のように宣言します。
        
long long xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
          REAL
          関数の場合は以下のように宣言します。
        
double xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
初期化関数および終了関数は以下のように宣言します。
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
          initid パラメータは、上記の 3
          つの関数すべてに渡されます。UDF_INIT
          構造体を参照しており、関数間のデータの受け渡しに使用されます。UDF_INIT
          構造体のメンバを以下に示します。初期化関数では、必要に応じてメンバの値を変更します(メンバのデフォルト値を使用する場合はそのままにしておきます)。
        
              my_bool maybe_null
            
              xxx_init()
              は、xxx() が NULL
              を返す可能性がある場合は
              maybe_null を 1
              に設定する必要がある。maybe_null
              と宣言されている引数が存在する場合は、デフォルト値は
              1 である。
            
              unsigned int decimals
            
              小数点以下桁数。デフォルト値は、関数に渡される引数の最大の小数点以下桁数(たとえば、1.34、1.345、および
              1.3
              を渡された場合、1.345
              の小数点以下桁数が 3
              で一番大きいので、デフォルト値は 3
              になる)。
            
              unsigned int max_length
            
              戻り値の文字列表現の最大長。関数の戻り値の型によってデフォルト値は異なる。文字列関数の場合、デフォルトは最長の引数の長さ。整数関数の場合、デフォルトは
              21 桁。実数関数の場合、デフォルトは 13 に
              initid->decimals
              で示される小数点以下桁数を加算した値(数値関数の場合、この長さには符号や小数点が含まれる)。
            
BLOB 型の値を返す場合、このメンバの値を 65K または 16M に設定できる。このメモリは割り当てられないが、一時的にデータを格納する必要が生じた場合、どのカラム型を使用するかを判断するために使用できる。
              char *ptr
            
              関数が独自の用途に使用できるポインタ。たとえば、関数は
              initid->ptr
              を使用して、割り当てられたメモリを関数間で受け渡すことができる。xxx_init()
              では、以下のようにメモリを割り当て、その値をこのポインタに代入する。
            
initid->ptr = allocated_memory;
              xxx() および
              xxx_deinit()
              は、initid->ptr
              を参照してメモリを使用したり、解放します。
            
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

