As funções armazenadas no MySQL são usadas para encapsular cálculos ou operações com registros e campos de dados que são obtidos de uma consulta SQL e são tarefas comuns ou regras de negócios.
Uma grande vantagem é que eles são reutilizáveis e a linguagem de programação em que as funções são desenvolvidas é por meio de instruções SQL e estruturas condicionais ou repetitivas.
Ao contrário de um procedimento armazenado, você pode usar uma função armazenada em instruções SQL onde você usa uma expressão que permite criar regras condicionais.
Vejamos um exemplo em que criamos um banco de dados de uma escola:
CRIAR BANCO DE DADOS `faculdade`Em seguida, criamos uma tabela com as pontuações dos testes dos alunos
- - Estrutura da tabela para `notas de exame` - CREATE TABLE` notas de exame` (` id` INT (11) NOT NULL AUTO_INCREMENT, `idalumno` INT (11) NOT NULL,` material id` INT (11) NOT NULL, `note1 `DECIMAL (10,2) NÃO NULO,` nota2` DECIMAL (10,2) NÃO NULO, `nota3` DECIMAL (10,2) NÃO NULO,` média` DECIMAL (10,2) NÃO NULO, `estado` VARCHAR (100) NULL DEFAULT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB - Índices da tabela` notaseams` - ALTER TABLE` notasetest` ADD PRIMARY KEY (`id`); Em seguida, adicionamos alguns dados às notas de exame da tabela - Despejo de dados para a tabela `notasensam` INSERT INTO` notation exam` (` id`, `idalumno`,` subjectid`, `note1`,` note2`, `note3`,` média`, `estado`) VALORES (1, 1000, 1, '8,00', '9,25', '7,00', '0,00', ''), (2, 1001, 1, '6,33', '8,50', '8,00', '0,00', ''), (3, 1002, 1, '10,00 ',' 7,50 ',' 8,33 ',' 0,00 ',' '), (4, 1003, 2,' 4,50 ',' 2,00 ',' 5,50 ',' 0,00 ',' '), (5, 1004, 1,' 3,50 ',' 2,00 ',' 4,00 ',' 0,00 ',' ');
A seguir, criaremos uma função armazenada que percorrerá toda a tabela de notas e calculará a nota média de cada aluno por disciplina e atualizaremos a tabela para indicar se é Aprovado ou Reprovado.
Podemos criar a função a partir do Phpmyadmin ou de qualquer editor que nos permita escrever código SQL;
CREATE DEFINER = `root` @` localhost` PROCEDIMENTO `calcular média` () IDIOMA SQL NÃO DETERMINISTICO CONTÉM SQL SQL SEGURANÇA DEFINER COMMENT '' BEGIN / * Eu declaro variáveis para a função * / DECLARE final BOOL DEFAULT FALSE; DECLARE id INT; DECLARAR INT aluno; DECLARAR assunto INT; DECLARAR nota1 FLOAT; DECLARAR nota2 FLOAT; DECLARAR nota 3 FLOAT; DECLARE prom FLOAT; / * Eu declaro um conjunto de registros ou cursor com os dados da consulta sql * / DECLARE rslist CURSOR PARA SELECT id, id do aluno, id do material, nota1, nota2, nota3 das notas do teste; / * Eu declaro uma variável para detectar o fim de um loop repetido DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET final = TRUE; / * Abro o conjunto de registros para iniciar a passagem de dados com um loop * / OPEN rslista; loop: LOOP FETCH rslist INTO id, aluno, matéria, série 1, série 2, série 3; / * Calculo a média * / set avg = (nota1 + nota2 + nota3) / 3; / * Salvei atualizando a tabela * / atualizo conjunto de notações de exame média = d onde idalumno = aluno e idmateria = assunto; / * Se a nota for maior ou igual a 7, eu atualizo o status como Aprovado, caso contrário, o status será Reprovado * / IF av> = 7 ENTÃO atualizar notaseams definir status = 'Aprovado' onde idalumno = aluno e idmateria = assunto; ELSE update notation set status = 'Reprovado' onde id do aluno = aluno e id do assunto = assunto; FIM SE; IF finalTHEN CLOSE rslist; LEAVE loop; FIM SE; END LOOP; FIMEntão, podemos executar a função usando o seguinte comando:
LIGUE para `calcular a média` ()O resultado será a atualização das colunas de média e status automaticamente.
Funções armazenadas no MySQL são normalmente usadas para cálculos e operações, enquanto procedimentos armazenados são normalmente usados para executar regras de negócios.
As funções geralmente não afetam a estrutura do banco de dados, mas para realizar alguns cálculos, comparar e retornar um resultado ou modificar um dado em uma tabela no banco de dados, também podemos criar um gatilho para controlar ou auditar as alterações feitas por uma função.
Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo