Em algumas implementações antigas da linguagem de programação básica, as funções definidas pelo usuário são definidas usando a sintaxe "def fn". Os dialetos mais modernos do básico são influenciados pelo paradigma de programação estruturado, onde a maioria ou todo o código é escrito como funções ou procedimentos definidos pelo usuário, e o conceito se torna praticamente redundante.
Nos sistemas de gerenciamento de banco de dados relacionais, uma função definida pelo usuário fornece um mecanismo para estender a funcionalidade do servidor de banco de dados, adicionando uma função, que pode ser avaliada nas instruções padrão de linguagem de consulta (geralmente SQL). O padrão SQL distingue entre as funções escalares e de tabela. Uma função escalar retorna apenas um único valor (ou nulo), enquanto uma função de tabela retorna uma tabela (relacional) compreendendo zero ou mais linhas, cada linha com uma ou mais colunas.
As funções definidas pelo usuário no SQL são declaradas usando a instrução CREATE FUNCTION. Por exemplo, uma função que converte Celsius em Fahrenheit pode ser declarada assim:
Uma vez criado, uma função definida pelo usuário pode ser usada em expressões nas instruções SQL. Por exemplo, pode ser invocado onde a maioria das outras funções intrínsecas são permitidas. Isso também inclui instruções selecionadas, onde a função pode ser usada contra dados armazenados em tabelas no banco de dados. Conceitualmente, a função é avaliada uma vez por linha nesse uso. Por exemplo, suponha uma tabela denominada elementos, com uma linha para cada elemento químico conhecido. A tabela possui uma coluna chamada EveryingPoint para o ponto de ebulição desse elemento, em Celsius. A pergunta
Recuperaria o nome e o ponto de ebulição de cada linha. Ele chama a função definida pelo usuário do CTOF, conforme declarado acima, a fim de converter o valor na coluna em um valor em Fahrenheit.
Cada função definida pelo usuário carrega certas propriedades ou características. O padrão SQL define as seguintes propriedades:
Language - defines the programming language in which the user-defined function is implemented; examples include SQL, C, C# and Java.Parameter style - defines the conventions that are used to pass the function parameters and results between the implementation of the function and the database system (only applicable if language is not SQL).Specific name - a name for the function that is unique within the database. Note that the function name does not have to be unique, considering overloaded functions. Some SQL implementations require that function names are unique within a database, and overloaded functions are not allowed.Determinism - specifies whether the function is deterministic or not. The determinism characteristic has an influence on the query optimizer when compiling a SQL statement.SQL-data access - tells the database management system whether the function contains no SQL statements (NO SQL), contains SQL statements but does not access any tables or views (CONTAINS SQL), reads data from tables or views (READS SQL DATA), or actually modifies data in the database (MODIFIES SQL DATA).As funções definidas pelo usuário não devem ser confundidas com procedimentos armazenados. Os procedimentos armazenados permitem ao usuário agrupar um conjunto de comandos SQL. Um procedimento pode aceitar parâmetros e executar suas instruções SQL, dependendo desses parâmetros. Um procedimento não é uma expressão e, portanto, não pode ser usado como funções definidas pelo usuário.
Alguns sistemas de gerenciamento de banco de dados permitem a criação de funções definidas pelo usuário em idiomas que não sejam SQL. O Microsoft SQL Server, por exemplo, permite que o usuário use idiomas .NET, incluindo C# para esse fim. As funções definidas pelo usuário db2 e oracle são escritas em linguagens de programação C ou Java.
Existem três tipos de UDF no Microsoft SQL Server 2000: funções escalares, funções com valor de tabela em linha e funções com valor de mesa de vários meios de comunicação.
As funções escalares retornam um único valor de dados (não uma tabela) com a cláusula de retorno. As funções escalares podem usar todos os tipos de dados escalares, com exceção do registro de data e hora e tipos de dados definidos pelo usuário. As funções com valor de tabela em linha retornam o conjunto de resultados de uma única instrução SELECT. As funções com valor de múltiplos distritos retornam uma tabela, que foi construída com muitas instruções Transact-SQL.
As funções definidas pelo usuário podem ser chamadas de uma consulta como funções construídas-in, como Object_Id, Len, Datefiff, ou podem ser executadas através de uma instrução executiva como procedimentos armazenados.
Notas de desempenho: 1. No Microsoft SQL Server 2000, uma função com valor de tabela que "envolve" uma visualização pode ser muito mais rápida que a própria visualização. O MyFunction seguinte é um exemplo de "agitação de funções" que funciona mais rápido que a visão subjacente myView:
2. No Microsoft SQL Server 2005, o resultado da mesma execução de código é o oposto: a visualização é executada mais rapidamente que o "Wrapper de função".
As funções definidas pelo usuário são sub-rotinas feitas de uma ou mais instruções transact-SQL que podem ser usadas para encapsular o código para reutilização. É preciso zero ou mais argumentos e avalia um valor de retorno. Possui declarações de controle de controle e DML em seu corpo semelhante aos procedimentos armazenados. Não permite alterações em qualquer estado de sessão global, como modificações no banco de dados ou recurso externo, como um arquivo ou rede. Não suporta o parâmetro de saída. ser especificado para passar o valor padrão do parâmetro.errors no UDF fazem com que o UDF seja abortado que, por sua vez, aborta a declaração que invocou o UDF.
Tipo de dados suportado no Microsoft SQL Server 2000, como uma tabela temporária usada para armazenar resultados usados principalmente para definir a variável temporária do tipo (tabela) e o valor de retorno de um udf. não é permitido entre as variáveis (tabela) que podem ser usadas em seleção, inserir, atualizar e excluir função criar para criar função udfalter para alterar as características da função udfdrop para remover UDF
O Apache Hive define, além das funções regulares definidas pelo usuário (UDF), também funções agregadas definidas pelo usuário (UDAF) e funções de geração de tabela (UDTF). O Hive permite que os desenvolvedores criem suas próprias funções personalizadas com o Java.