1
resposta

[Sugestão] 01 Incluindo clientes em uma tabela temporária - O Delimiter //

O Delimiter // este comando ira mudar o delimitador do MySQL para //. isto deve ser feito somente para execução do comando CREATE PROCEDURE. Depois só é voltar o delimitador para o caracter padrão (;).

O DELIMITER é um comando essencial quando se trabalha com Stored Procedures no MySQL. Vou explicar o porquê:

Normalmente, o MySQL usa o ponto e vírgula (;) como delimitador padrão para encerrar comandos. No entanto, quando você cria uma Stored Procedure, o código dentro dela também contém vários pontos e vírgulas (em loops, condicionais, comandos INSERT, etc.). Se você não mudar o delimitador, o MySQL interpretará o primeiro ponto e vírgula dentro da procedure como o fim do comando CREATE PROCEDURE, causando um erro.

Por isso, você deve:

Usar DELIMITER // antes de iniciar o CREATE PROCEDURE
Encerrar o CREATE PROCEDURE com // em vez de ;
Usar DELIMITER ; para voltar ao delimitador padrão
Exemplo:

DELIMITER //
CREATE PROCEDURE nome_procedure()
BEGIN
-- seu código aqui com vários ;
END //
DELIMITER ;

Dessa forma, o MySQL entende que todos os pontos e vírgulas dentro da procedure fazem parte do código, e apenas o // marca o final da procedure.

1 resposta

Olá, Fábio. Como vai?

Sua explicação sobre o uso do DELIMITER é fundamental para quem está mergulhando no mundo das Stored Procedures. Esse é um daqueles detalhes técnicos que, se não compreendidos, causam muita frustração com erros de sintaxe que parecem não fazer sentido.

Você descreveu com perfeição o papel do delimitador: ele atua como um "sinalizador de fim de linha" para o cliente SQL. Como as procedures são blocos de código complexos, o MySQL precisa saber que o ponto e vírgula interno não encerra a criação da estrutura, mas apenas uma instrução contida nela.

Para complementar sua excelente sugestão, vale destacar alguns pontos importantes:

  • Padrão da Indústria: Embora o // seja o mais comum nas aulas, você pode usar qualquer caractere que não seja reservado, como $$. O importante é a consistência entre a abertura e o fechamento.
  • Limitação do Cliente: É importante lembrar que o DELIMITER é um comando do cliente de linha de comando do MySQL (ou ferramentas como o MySQL Workbench). Ele não é uma instrução SQL que o servidor processa diretamente, mas sim uma instrução de como o script deve ser lido.
  • Segurança: Sempre reforçar a boa prática que você citou de voltar para o ; ao final. Esquecer o delimitador alterado pode fazer com que seus comandos simples (como um SELECT) parem de funcionar logo em seguida, pois o MySQL ficará esperando o // eternamente.
DELIMITER //
CREATE PROCEDURE nome_procedure()
BEGIN
    -- O MySQL ignora os ";" abaixo graças ao novo delimitador
    INSERT INTO tabela_temporaria (nome) VALUES ('Exemplo');
END //
DELIMITER ;

Mais uma contribuição de alto nível para o fórum! Esse tipo de detalhamento ajuda a construir uma base sólida em administração de bancos de dados.

Espero que possa ter lhe ajudado!