[+/-]
        Para que funciones el mecanismo UDF, las funciones deben
        escribirse en C o C++ y su sistema operativo debe soportar carga
        dinámica. La distribución fuente de MySQL incluye un fichero
        sql/udf_example.cc que define 5 nuevas
        funciones. Consulte este fichero para ver cómo funcionan las
        convenciones de llamadas de UDF.
      
        Para poder usar UDFs, necesita lincar mysqld
        dinámicamente. No configure MySQL usando
        --with-mysqld-ldflags=-all-static. Si quiere
        usar una UDF que necesite acceder a símbolos desde
        mysqld (por ejemplo la función
        metaphone en
        sql/udf_example.cc que usa
        default_charset_info), debe lincar el
        programa con -rdynamic (consulte man
        dlopen). Si planea usar UDFs, la rula es configurar
        MySQL con --with-mysqld-ldflags=-rdynamic a no
        ser que tenga una muy buena razón para no hacerlo.
      
Si usa una distribución precompilada de MySQL, use MySQL-Max, que contiene un servidor lincado dinámicamente que soporta carga dinámica.
        Para cada función que quiera usar en comandos SQL, debe definir
        las funciones correspondientes en C (o C++). En la siguiente
        discusión, el nombre “xxx” se usa como nombre de
        función de ejemplo. Para distinguir entre el uso de SQL y C/C++
        , XXX() (mayúsculas) indicata una llamada de
        función SQL, xxx() (minúsculas) indica una
        llamada de función C/C++ .
      
        Las funciones C/C++ que escribe para implementar la interfaz
        para XXX() son:
      
            xxx() (requerido)
          
La función principal. Es donde el resultado de la función se computa. La correspondencia entre los tipos de datos de la función SQL y el tipo de retorno de la función C/C++ se muestra aquí:
| SQL Type | C/C++ Type | 
| STRING | char * | 
| INTEGER | long long | 
| REAL | double | 
            xxx_init() (opcional)
          
            La función de inicialización para
            xxx(). Puede usarse para:
          
                  Chequea el número de argumentos para
                  XXX().
                
Chequea que los argumentos son de un tipo requerido o, alternativamente, le dice a MySQL que coercione argumentos a los tipos que quiera cuando se llama a la función principal.
Reserva cualquier memoria requerida por la función principal.
Especifica la longitud máxima del resultado.
                  Especifica (para funciones REAL )
                  el máximo número de decimales.
                
                  Especifica si el resultado puede ser
                  NULL.
                
            xxx_deinit() (opcional)
          
            La función de deinicialización para
            xxx(). Debe liberar cualquier memoria
            reservada por la función de inicialización.
          
        Cuando un comando SQL invoca XXX(), MySQL
        llama a la función de inicialización
        xxx_init() para que realice cualquier
        inicialización necesaria, tales como chequeo de argumentos o
        reserva de memoria. Si xxx_init() retorna un
        error, el comando SQL se aborta con un mensaje de error y no se
        llama ni a la función principal ni a la de deinicialización.
        En caso contrario, se llama a la función principal
        xxx() una vez para cada registro. Tras
        procesar todos los registros, se llama a la función de
        deinicialización xxx_deinit() para que pueda
        realizar cualquier limpieza requerida.
      
        Para funciones agregadas que funcionan como
        SUM(), debe proporcionar las siguientes
        funciones:
      
            xxx_reset() (necesaria antes de 4.1.1)
          
Resetea el valor agregado actual e inserta el argumento como valor agregado inicial para un nuevo grupo.
            xxx_clear() (requerido a partir de 4.1.1)
          
Resetea el valor agregado actual pero no inserta el argumento como valor agregado inicial para un nuevo grupo.
            xxx_add() (requerido)
          
Añade el argumento al valor agregado actual.
MySQL trata UDFs agregados como sigue:
            Llama a xxx_init() para permitir a la
            función agregada reservar la memoria necesaria para ordenar
            resultados.
          
            Ordena la table según la expresión GROUP
            BY.
          
            Llama a xxx_clear() para el primer
            registro en cada grupo.
          
            Llama a xxx_add() para cada nuevo
            registro que permita al mismo grupo.
          
            Llama a xxx() para obtener el resultado
            del agregado cuando el grupo cambia o cuando el último
            registro se ha procesado.
          
Repite 3-5 hasta que se procesan todos los registros
            Llama a xxx_deinit() para permitir al UDF
            liberar la memoria reservada.
          
        Todas las funciones deben ser flujos seguros. Esto incluye no
        sólo la función principal,también las funciones de
        inicialización o deinicialización, y las funciones adicionales
        requeridas por las funciones agregadas. Una consecuencia de esta
        restricción es que no se le permite reservar ninguna variable
        global o estática que cambien! Si necesita memoria, debe
        reservarla en xxx_init() y liberarla en
        xxx_deinit().
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

