Esta sección describe las distintas funciones que necesita definir cuando crea un UDF simple. Sección 27.2.3, “Añadir una nueva función definida por el usuario” describe el orden en que MySQL llama a estas funciones.
          La función principal xxx() debe declararse
          como se muestra en esta sección. Tenga en cuenta que el tipo
          de retorno y los parámetros difieren, dependiendo de si
          declara la función SQL XXX() para retornar
          STRING, INTEGER, o
          REAL en el comando CREATE
          FUNCTION :
        
          Para funciones STRING :
        
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
          char *result, unsigned long *length,
          char *is_null, char *error);
          Para funciones INTEGER :
        
long long xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
          Para funciones REAL :
        
double xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
Las funciones de inicialización y deinicialización se declaran así:
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
          El parámetro initid se pasa a las tres
          funciones. Apunta a la estructura UDF_INIT
          que se usa para comunicar información entre funciones. Los
          mienbros de la estructura UDF_INIT se
          muestran a continuación. La función de inicialización debe
          rellenar cualquier miembro que quiera cambiar. (Para usar el
          valor por defecto de un miembro no lo cambie.)
        
              my_bool maybe_null
            
              xxx_init() debe asignar a
              maybe_null 1 si
              xxx() puede retornar
              NULL. El valor por defecto es
              1 si alguno de los argumentos se
              declaran maybe_null.
            
              unsigned int decimals
            
              El número de decimales. El valor por defecto es el
              número máximo de decimales en los argumentos pasados a
              la función principal. (Por ejemplo, si a la función se
              pasa 1.34, 1.345, y
              1.3, el valor por defecto es 3, ya que
              1.345 tiene 3 decimales.
            
              unsigned int max_length
            
              Longitud máxima del resultado. El valor por defecto
              max_length difiere en función del tipo
              de resultado de la función. Para funciones de cadenas de
              caracteres, el valor por defecto es el argumento más
              largo. Para funciones enteras, el valor por defecto es de
              21 dígitos. Para funciones reales, el valor por defecto
              es 13 mas el número de decimales indicados por
              initid->decimals. (Para funciones
              numéricas, la longitud incluye cualquier signo o
              carácter de punto decimal.)
            
              Si quiere retornar un valor blob, puede asignar a
              max_length de 65KB a 16MB. Esta memoria
              no se reserva, pero el valor se usa para decidir qué tipo
              de columna usar si hay una necesidad de almacenar los
              datos temporalmente.
            
              char *ptr
            
              Puntero que la función puede usar para su propio
              propósito. Por ejemplo, las funciones pueden usar
              initid->ptr para comunicar memoria
              reservada entre ellos. xxx_init() debe
              reservar la memoria y asignarla al puntero:
            
initid->ptr = allocated_memory;
              En xxx() y
              xxx_deinit(), refiérase a
              initid->ptr para usar o liberar la
              memoria.
            
É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.

