Cursos / Redes de Computadores / Conceitos de Banco de Dados / Aula

arrow_back Aula 08 - Linguagem SQL - Stored Procedures e 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 03. 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. 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.

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 03. 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. 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.

Agora, a partir dessa função, vamos criar outra que retorne a quantidade total de unidades vendidas de um produto dado o seu código. O comando para criar essa função é descrito a seguir.

Compare a diferença entre as duas funções apresentadas. Observe que a função denominada Total_Vendas2 contém um parâmetro de entrada do tipo inteiro. E que é feita uma consulta (SELECT) da soma de todos os produtos da tabela compras cujo código equivale ao parâmetro de entrada codigo_produto.

Para analisarmos a aplicação das funções no banco de dados sistvendas, apresentam-se, na Figura 7, os dados presentes nas tabelas do banco de dados. A Figura 8 ilustra a resposta do SGBD após a criação da função.

Tela do MySQL após os comandos SELECT * FROM  <span class='strong'>produtos</span>, SELECT * FROM  <span class='strong'>clientes</span> e SELECT * FROM  <span class='strong'>compras</span>. Tela do MySQL após os comandos CREATE FUNCTION.

Note que está sendo usado o caractere “|” como delimitador de comandos, do mesmo modo como no procedimento, isso é feito para que possamos usar o caractere “;” no meio da função.

Versão 5.3 - Todos os Direitos reservados