Como fazer uma função no mysql?

função mysql

Veja abaixo como fazer, chamar, apagar e alguns complementos conceituais sobre function no mysql.

Sinstaxe básica

DELIMITER $$
CREATE FUNCTION nome_da_funcao (parametros)
RETURNS tipo_do_valor_retornado
 
corpo_da_funcao

RETURN

valor_retornado

$$
DELIMITER ;

Obs.: Na sintaxe usei o formato snake_case para os termos que serão declarados, pois é o padrão usado nas nomenclaturas do banco de dados, mas no detalhamento não, para facilitar a leitura. se quiser clique aqui e veja como é usado o padrão snake_case para entender melhor.

Detalhando a sintaxe

Termos padrões ou palavras reservadas

DELIMITER

Serve para indicar o final do conjunto de instruções.

CREATE FUNCTION

Cria a função.

Ele pode ser acompanhado de OR REPLACE para evitar erro caso a função já tenha sido declarada e faz alteração na mesma.

RETURNS

Aqui é declarado o tipo de retorno.

BEGIN e END ou RETURN

Nessa parte é declarado o valor retornado.
Quando é usado BEGIN antes do corpo da função e END no final não precisa se declarar o RETURN, pois o sistema interpreta o campo definido na expresão.
Quando for usado RETURN qualquer instrução após ele será ignorada.

Termos criados ou nomenclaturas próprias

Nome da função

São os termos pelo qual a função armazenada será invocada.
 

Dica extra: No nome é interessante usar o prefixo com fn_ para identificar que se trata de uma função.

Parâmetros

são as informações que serão usadas na function como entradas de variáveis para quem vem de alguma linguagem de programação.

Os parenteses "()" que recebem os parâmetros devem estar sempre presentes, mesmo que não tenha informação.

Em uma função de banco de dados eles são como uma cláusula IN apenas.

Também são chamados de argumentos e podem receber várias informações.

Os nomes são case insensitives ou seja uma letra maiúscula é igual a ela minuscula ('A' == 'a').

Tipo de Retorno

É o tipo de valor que será retornado.

Pode ser qualquer tipo de dado existente no MySQL.

Se o valor retornado for diferente do declarado ele é forçado para o valor do RETURNS. Por exemplo se for declarado o tipo como varchar, mas a consulta pede um id inteiro esse id será tranformado em string, no caso id = 10 ficará id="10".

Corpo da função

Pode ser qualquer expressão SELECT SQL válida.

Ela deve retornar apenas um valor, por isso deve ser usado limit 1 na expressão para evitar o erro 1242 que ocorre quando retorna mais de uma linha e apenas um campo pois o erro 1241 aparece quando a expressão tem mais de uma coluna.

Sintaxe Completa

CREATE [OR REPLACE]
    [DEFINER = {user | CURRENT_USER | role | CURRENT_ROLE}]
    FUNCTION [IF NOT EXISTS] func_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...]
    RETURN func_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'

Como chamar uma Função?

Para usar a função basta declarar o nome dela e os parâmetros entre parenteses, como no exemplo abaixo:

SELECT nome_da_funcao(parametros) ...

Exemplo 1

CREATE FUNCTION multiplicacao_simples(a DECIMAL(6,2), b DECIMAL(6,2))
RETURNS DECIMAL(6,2)
RETURN a * b;

Chamando a função:

SELECT multiplicacao_simples(1.5, 3) AS resultado;

Nesse caso resultado seria igual 4.5.

Explicando o exemplo 1

Na função multiplicacao_simples() é feito a multiplicação de dois valores decimais.

Exemplo 2

CREATE FUNCTION calculo_desconto(valor DECIMAL(6,2), qtd int, desconto decimal(4,2))
RETURNS DECIMAL(6,2)
BEGIN
    valor * qtd - ((valor * qtd/100)*desconto);
END;

Chamando a função:

SELECT codigo, descricao, preco, calculo_desconto(preco, qtd, desconto) AS valor_com_desconto from venda;

Explicando o exemplo 2

Na função calculo desconto são pegos os valores da tabela e feito o calculo para chegar no valor que será subtraído.

Como deletar uma função no mysql?

Para excluir uma função pode ser usado o comando DROP FUNCTION, como mostrado na sintaxe abaixo:

DROP FUNCTION nome_função;

Complementos conceituais

O que é uma função?

As funções ou functions (termo em inglês) são operações usadas para trabalharem informações e retornarem valores no mysql. Elas ficam armazenadas no banco de dados e recebem parâmetros quando são chamadas.

Para que serve uma função no mysql?

São usadas para expressões matemáticas por exemplo.

A função serve para todo MySQL ou para cada base de dados?

Por padrão a função fica associada ao MySQL para usá-la em um banco de dados específico declare o nome da base com a função, por exemplo: nome_do_banco.nome_da_funcao. 

Segurança

Quais permissões são necessárias para criar um function?

Você deve possuir o privilégio CREATE ROUTINE para usar CREATE FUNCTION.

Veja mais 

Quais as funções nativas do mysql?
Quais, o que são e para que servem as funções de agregação do mysql?
O que são funções em programação?

O que é function em banco de dados?
Como usar arrow function em javascript?
Qual a diferença entre trigger, function e procedure?
Como fazer funções matemáticas no mysql?
Qual a diferença de MySQL para MariaDB?
O que é stored function?
Como usar o Workbench?

Por que usar o MySQL?
Como fazer para conectar o MySQL Workbench?
Quais empresas usam MySQL?
Qual a versão do MySQL?
Quanto custa licença MySQL?

  

Tem mais conteúdo para inserir na página e precisa colorir os códigos.

Quer acompanhar as novidade do site?

Leia mais em: ww.mysql.com/

imagem com golfinho do mysql representando funções no banco de dados

Última atualização: 2023-02-15