Cursos / Informática para Internet / Banco de dados / Aula

arrow_back Aula 16 - Linguagem SQL – Funções

Funções escalares

Uma função escalar retorna um único valor de dados de um tipo predefinido e pode ser utilizada do mesmo modo que uma função interna, sendo mais usada como:

  • Uma expressão na lista de um comando SELECT.
  • Uma expressão em uma cláusula WHERE ou HAVING.
  • Uma expressão em uma cláusula ORDER BY ou GROUP BY.
  • Uma expressão na cláusula SET de um comando UPDATE.
  • Uma expressão na cláusula VALUES de um comando INSERT.

A instrução para criar uma função é simples, basta utilizar o comando CREATE FUNCTION em conjunto com a lista de parâmetros (caso necessário) a serem usados. A sintaxe de criação de uma função é descrita a seguir.

Nessa expressão, no campo nome_da_funcao deve-se inserir o nome que se deseja atribuir para a função. Esse nome deve seguir as mesmas regras usadas para os nomes das tabelas, que foi visto na Aula 9. Em seguida, caso haja parâmetros, deve-se fornecer a lista de parâmetros de entrada, que segue o mesmo formato definido na aula anterior sobre procedimentos armazenados. Mesmo não havendo parâmetros, devem ser inseridos os parênteses () na criação da função. A cláusula RETURNS define o tipo de dado que será retornado pela função, por exemplo, um número inteiro, um conjunto de caracteres etc. Em seguida, define-se que a função é determinística, através do comando DETERMINISTIC. Finalmente, entre as palavras BEGIN e END devem ser descritos os comandos SQL que definem a operação a ser executada. Lembrando que antes do END deve ser usada a cláusula RETURN que define a variável ou expressão que irá retornar o resultado da função.

Em alguns casos, quando se utiliza o MySQL com estrutura servidores master e slave (que são utilizados na replicação de bases de dados do servidor master) uma função pode afetar diferentes conjuntos de linhas em cada servidor.

Isso ocorre, pois as instruções replicadas executadas do servidor master em um servidor slave são processadas de forma independente também pelo servidor slave. Por esse motivo, é possível que um procedimento ou função siga diferentes caminhos de execução nos servidores master e slave. Assim, é possível que um programador do banco de dados acabe escrevendo uma rotina que contém instrução que será executada e poderá provocar divergências entre os dados do servidor master e os servidores de replicação slave.

Dessa forma, se uma função que modifica os dados não é determinística, ela não pode ser repetida (pois os dados serão diferentes na execução em cada servidor). Isso pode resultar em dados diferentes no servidor master e no slave e fazer com que os dados resultantes nos slaves sejam diferentes dos dados originais em master.

Para termos o retorno da função por meio de uma variável, é necessário sabermos como se faz a declaração de variáveis locais no MySQL. Isso é feito usando o comando DECLARE, cuja sintaxe é apresentada a seguir.

Nessa expressão, no campo nome_da_variavel deve-se inserir o nome da variável que está sendo criada e esse nome deve seguir as mesmas regras usadas para os nomes das tabelas, que foi visto na Aula 9. O mesmo acontece para a definição do tipo de dado que será atribuído à variável.

Agora, vamos exercitar a criação de funções no banco de dados sistvendas para entendermos melhor o seu conceito? Se você quiser relembrar a definição desse banco de dados, consulte a Aula 13. Para começar, vamos criar uma função que retorne a quantidade total de produtos vendidos. O comando para criar essa função é descrito no destaque a seguir.

Observe que foi criada uma função denominada Total_Vendas, sem qualquer parâmetro, que retorna um valor do tipo inteiro. Os comandos que definem sua operação encontram-se entre as palavras chave BEGIN e END.

Analisando cuidadosamente os comandos, vemos o uso do comando DECLARE para definir uma variável intitulada qtde_vendas do tipo inteiro. Em seguida, é feita uma consulta (SELECT) da soma de todos os produtos vendidos da tabela compras. Esse valor é armazenado na variável qtde_vendas usando a cláusula INTO. Finalmente, a cláusula RETURN define que a função retorna o valor contido na variável qtde_vendas.

Versão 5.3 - Todos os Direitos reservados