Pode ser usado o DELIMITER // também.
Pode ser usado o DELIMITER // também.
Olá, Fábio! Tudo bem?
Exatamente! Essa é uma excelente observação técnica.
O uso do DELIMITER // (ou qualquer outro caractere que não seja o ponto e vírgula padrão) é uma prática essencial quando estamos criando Stored Procedures, Triggers ou Functions no MySQL.
Por padrão, o MySQL interpreta o ; como o fim de uma instrução. Quando estamos escrevendo um bloco de código (como uma PROCEDURE), ele possui vários comandos internos que também terminam em ;.
Se não mudarmos o delimitador, o MySQL tentará executar a primeira linha interna que encontrar com ;, resultando em um erro de sintaxe, pois ele "fecharia" a criação da função antes da hora.
Ao usar o //, você avisa ao banco de dados: "Ei, não pare no ponto e vírgula; só considere que este bloco terminou quando encontrar o //".
DELIMITER //
CREATE PROCEDURE CalcularOcupacao(vHospedagem VARCHAR(10))
BEGIN
-- Vários comandos com ponto e vírgula aqui dentro
SELECT * FROM reservas WHERE hospedagem_id = vHospedagem;
END //
DELIMITER ;
Sempre lembre de voltar o delimitador para o padrão com DELIMITER ; logo após o END //. Caso contrário, seus próximos comandos SELECT simples não funcionarão com o ; comum.
Obrigado por compartilhar essa dica com a comunidade! Isso ajuda muito quem está começando a lidar com blocos de código mais complexos no Workbench ou no terminal.
Espero que possa ter lhe ajudado! Você costuma usar o // por preferência ou já teve problemas com outros caracteres como $$?