Gerenciamento de Funções e Procedures Customizadas no MySQL

Fundamentos de Sintaxe e Manipulação de Variáveis

No ecossistema MySQL, a automação de lógica complexa dentro do benco de dados é realizada através de funções e procedimentos armazenados. Embora compartilhem semelhenças estruturais, as funções são projetadas para retornar valores, enquanto os procedimentos executam sequências de comandos SQL.

Declaração de Variáveis

Para armazenar dados temporários dentro de um bloco de código, utiliza-se a palavra-chave DECLARE, preferencialmente no início do bloco BEGIN...END.

-- Declaração de uma variável inteira com valor inicial
DECLARE contador INT DEFAULT 0;

Atribuição de Valores

A modificação do conteúdo de uma variável é feita através do comando SET.

-- Incrementando o valor da variável
SET contador = contador + 5;

Estruturas Condicionais

O controle de fluxo é implementado com o bloco IF-THEN-ELSE, permitindo lógica booleana complexa.

-- Exemplo de condicional múltipla
IF contador > 100 THEN
    SET contador = 100;
ELSEIF contador IS NULL THEN
    SET contador = 0;
ELSE
    SET contador = contador;
END IF;

Estruturas de Repetição

O laço WHILE permite a execução iterativa de instruções baseada em uma condição específica.

-- Executa enquanto a condição for verdadeira
WHILE contador < 50 DO
    SET contador = contador + 1;
END WHILE;

Desenvolvimento de Funções Customizadas (UDF)

Criação

As funções devem sempre retornar um valor e são frequentemente utilizadas em cláusulas SELECT.

-- Remoção prévia se existir
DROP FUNCTION IF EXISTS fn_calcular_acumulado;

-- Definição da função
CREATE FUNCTION fn_calcular_acumulado (valor_base INT, multiplicador INT) 
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE resultado INT DEFAULT 0;
    DECLARE idx INT DEFAULT 1;
    
    -- Validação de entradas
    IF valor_base IS NULL OR multiplicador IS NULL THEN
        RETURN 0;
    END IF;
    
    SET resultado = valor_base * multiplicador;
    
    -- Lógica de incremento via loop
    WHILE idx <= 5 DO
        SET resultado = resultado + idx;
        SET idx = idx + 1;
    END WHILE;

    RETURN resultado;
END;

Execução

-- Chamada da função em uma consulta
SELECT fn_calcular_acumulado(10, 2);

Exclusão

DROP FUNCTION fn_calcular_acumulado;

Desenvolvimento de Procedures (Procedimentos Armazenados)

Criação

Procedures são ideais para operações que envolvem manipulação direta de tabelas e lógica de transações, utilizando CALL para sua execução.

-- Remoção prévia se existir
DROP PROCEDURE IF EXISTS sp_gerar_amostra_dados;

-- Definição do procedimento
CREATE PROCEDURE sp_gerar_amostra_dados (limite_loop INT)
BEGIN
    DECLARE contagem INT DEFAULT 0;
    
    -- Desativar autocommit para otimizar inserções ou processamentos em lote
    SET autocommit = 0;
    
    WHILE contagem < limite_loop DO
        -- Exemplo de lógica interna: gerando valores aleatórios
        SELECT floor(rand() * 100) AS valor_aleatorio;
        
        SET contagem = contagem + 1;
    END WHILE;
    
    -- Reativar autocommit e persistir alterações
    COMMIT;
    SET autocommit = 1;

    -- Retorno de um conjunto de resultados final
    SELECT contagem AS total_processado;
END;

Execução

-- Invocação do procedimento armazenado
CALL sp_gerar_amostra_dados(5);

Exclusão

DROP PROCEDURE sp_gerar_amostra_dados;

Tags: MySQL SQL Stored Procedures Database Design UDF

Publicado em 6-24 22:28