A função principal deve ser declarada como mostrado aqui.
          Note que o tipo retornado e os parâmetros diferem, dependendo
          se você irá declarar a função SQL XXX()
          para retornar STRING,
          INTEGER, ou REAL na
          instrução CREATE FUNCTION:
        
          Para funções STRING:
        
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
          char *result, unsigned long *length,
          char *is_null, char *error);
          Para funções INTEGER:
        
long long xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
          Para funções REAL:
        
double xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
As funções de inicialização e finalização são declaradas desta forma:
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
          O parâmetro initid é passado para todas
          as três funções. Ela aponta para uma estrutura
          UDF_INIT que é usada para passar
          informações entre as funções. Os membros da estrutura
          UDF_INIT são listados abaixo. A função
          de inicialização deve estar em todos os menbros que desejam
          ser alterados. (Para utilizar o padrão para um membro,
          deixe-o inalterado.):
        
              my_bool maybe_null
            
              xxx_init() deve definir
              maybe_null com 1 se
              xxx() pode retornar
              NULL. O valor padrão é
              1 se qualquer um dos argumentos são
              declarados como maybe_null.
            
              unsigned int decimals
            
              Número de decimais. O valor padrão é o número máximo
              de deciamis no argumento passado na função principal.
              (Por exemplo, se a função é passada function is passed
              1.34, 1.345 e
              1.3, o padrão seria 3, pois
              1.345 tem 3 decimais.
            
              unsigned int max_length
            
              O tamanho máximo de um resultado string. O valor padrão
              difere dependendo do tipo de resultado da função. Para
              funções strings, o padrão é o temanho do maior
              argumento. Para funções do tipo inteiro, o padrão é 21
              digitos. Para funções do tipo real, o padrão é 13 mais
              o número de decimais indicados por
              initid->decimals. (Para funções
              numéricas, o tamanho inclui qualquer caracter de sinal ou
              ponto decimal.)
            
Se você quiser retornar um blon, você pode definí-lo com 65K ou 16M; esta memória não é alocada, mas usada para decidir qual tipo de coluna utilizar se houver necessidade dese armazenar dados temporários.
              char *ptr
            
              Um ponteiro que a função pode usar para o seus
              propósitos. Por exemplo, funções pode usar
              initid->ptr para comunicar memórias
              alocadas entre funções. Na
              xxx_init(), aloca a memória e a
              atribui a este ponteiro:
            
initid->ptr = allocated_memory;
              Em xxx() e
              xxx_deinit(), se refira a
              initid->ptr para usar ou liberar a
              memória.
            
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.
