Meu processo atual para depurar procedimentos armazenados é muito simples. Eu crio uma tabela chamada "debug" onde insiro valores variáveis do procedimento armazenado enquanto ele é executado. Isso me permite ver o valor de qualquer variável em um determinado ponto do script, mas existe uma maneira melhor de depurar os procedimentos armazenados do MySQL?
mysql
database
debugging
stored-procedures
Cory House
fonte
fonte
Respostas:
Eu faço algo muito parecido com você.
Normalmente incluirei um parâmetro DEBUG que padroniza como false e posso definir como true em tempo de execução. Em seguida, envolva as instruções de depuração em um bloco "If Debug".
Também uso uma tabela de registro em log de muitos dos meus trabalhos, para que eu possa revisar processos e prazos. Meu código de depuração obtém saída também. Incluo o nome do parâmetro de chamada, uma breve descrição, a contagem de linhas afetadas (se apropriado), um campo de comentários e um carimbo de data / hora.
Boas ferramentas de depuração são uma das tristes falhas de todas as plataformas SQL.
fonte
O
debug_msg
procedimento a seguir pode ser chamado para simplesmente gerar uma mensagem de depuração no console:Em seguida, execute o teste assim:
Isso resultará na seguinte saída:
fonte
INSERT INTO my_log_table (message) VALUES (msg)
e talvez recuperar todas as mensagens de depuração, uma vez chamadas de função são mais (ou seja: você está de volta no procedimento)Sim, existem ferramentas especializadas para esse tipo de coisa - MySQL Debugger .
fonte
Como depurar um procedimento armazenado do MySQL.
Depurador do homem pobre:
Crie uma tabela chamada logtable com duas colunas
id INT
elog VARCHAR(255)
.Faça o incremento automático da coluna de identificação.
Use este procedimento:
Coloque esse código em qualquer lugar que você deseja registrar uma mensagem na tabela.
É um bom pequeno logger, rápido e sujo, para descobrir o que está acontecendo.
fonte
Existem ferramentas GUI para depuração de procedimentos / funções e scripts armazenados no MySQL. Uma ferramenta decente que o dbForge Studio for MySQL possui rica funcionalidade e estabilidade.
fonte
O depurador para mysql foi bom, mas não é gratuito. Isto é o que eu uso agora:
Uso no procedimento armazenado:
uso do procedimento armazenado:
fonte
Outra maneira é apresentada aqui
http://gilfster.blogspot.co.at/2006/03/debugging-stored-procedures-in-mysql.html
com procedimentos personalizados de depuração mySql e tabelas de log.
Você também pode simplesmente colocar uma seleção simples no seu código e ver se ele é executado.
Eu recebi essa ideia de
http://forums.mysql.com/read.php?99,78155,78225#msg-78225
Também alguém criou um modelo para procedimentos de depuração personalizados no GitHub.
Veja aqui
http://www.bluegecko.net/mysql/debugging-stored-procedures/ https://github.com/CaptTofu/Stored-procedure-debugging-routines
Foi mencionado aqui
Como capturar qualquer exceção nos gatilhos e armazenar procedimentos para o mysql?
fonte
Simplesmente coloco instruções de seleção nas principais áreas do procedimento armazenado para verificar o status atual dos conjuntos de dados e, em seguida, comento-as (--selecione ...) ou remova-as antes da produção.
fonte
Estou atrasado para a festa, mas trouxe mais cerveja:
http://ocelot.ca/blog/blog/2015/03/02/the-ocelotgui-debugger/ e https://github.com/ocelot-inc/ocelotgui
Eu tentei, e parece bastante estável, suportando pontos de interrupção e inspeção variável.
Não é uma suíte completa (apenas 4,1 Mb), mas me ajudou muito!
Como funciona: Ele se integra ao seu cliente mysql (estou usando o Ubuntu 14.04) e depois que você executa:
Ele instala um novo banco de dados no seu servidor, que controla o processo de depuração. Assim:
lhe dará a chance de caminhar passo a passo seu código e, "atualizando" suas variáveis, você poderá visualizar melhor o que está acontecendo dentro do seu código.
Dica importante: durante a depuração, talvez você altere (recrie o procedimento). Após uma recriação, execute: $ exit e $ setup antes de um novo $ debug
Essa é uma alternativa aos métodos "inserir" e "log". Seu código permanece livre de instruções adicionais de "depuração".
Captura de tela:
fonte
O MySQL Connector / Net 6.6 possui um recurso para depurar procedimentos e funções armazenados
fonte
O MySql Connector / NET também inclui um depurador de procedimento armazenado integrado no visual studio a partir da versão 6.6. Você pode obter o instalador e a fonte aqui: http://dev.mysql.com/downloads/connector/net/
Algumas documentações / capturas de tela: https://dev.mysql.com/doc/visual-studio/en/visual-studio-debugger.html
Você pode seguir os avisos aqui: http://forums.mysql.com/read.php?38,561817,561817#msg-561817
ATUALIZAÇÃO: O MySql para Visual Studio foi dividido do Connector / NET em um produto separado. Você pode selecioná-lo (incluindo o depurador) aqui https://dev.mysql.com/downloads/windows/visualstudio/1.2.html (ainda código aberto e gratuito).
AVISO LEGAL: Eu fui o desenvolvedor que criou o mecanismo de depurador de procedimentos armazenados para o produto MySQL for Visual Studio.
fonte
O primeiro e estável depurador para MySQL está no dbForge Studio for MySQL
fonte
Eu tinha usado duas ferramentas diferentes para depurar procedimentos e funções:
fonte
A variável definida pelo usuário do MySQL (compartilhada na sessão) pode ser usada como saída de log:
irá produzir:
fonte
Sapo mysql. Existe uma versão freeware http://www.quest.com/toad-for-mysql/
fonte
Resposta correspondente a esta @Brad Parks Não tenho certeza sobre a versão do MySQL, mas a minha era a 5.6, portanto, um pouco de ajustes funciona:
Eu criei uma função
debug_msg
que é função (não procedimento) e retorna texto (sem limite de caracteres) e, em seguida, chamo a função como SELECTdebug_msg
(params) ASmy_res_set
, código como abaixo:fonte