你如何debuggingMySQL存储过程?

我目前的debugging存储过程的过程非常简单。 我创build了一个名为“debug”的表,在运行时从存储过程插入variables值。 这使我能够看到脚本中给定点上的任何variables的值,但是有没有更好的方法来debuggingMySQL存储过程?

我做了和你非常相似的事情

我通常会包含一个默认为false的DEBUG参数,我可以在运行时设置为true。 然后将debugging语句包装到“If DEBUG”块中。

我也用我的许多工作日志表,以便我可以审查进程和时间。 我的debugging代码也得到输出。 我包括调用参数名称,简要说明,受影响的行数(如果适用),注释字段和时间戳。

良好的debugging工具是所有SQL平台的可悲缺陷之一。

可以调用以下debug_msg过程,以便将debugging消息简单地输出到控制台:

 DELIMITER $$ DROP PROCEDURE IF EXISTS `debug_msg`$$ DROP PROCEDURE IF EXISTS `test_procedure`$$ CREATE PROCEDURE debug_msg(enabled INTEGER, msg VARCHAR(255)) BEGIN IF enabled THEN BEGIN select concat("** ", msg) AS '** DEBUG:'; END; END IF; END $$ CREATE PROCEDURE test_procedure(arg1 INTEGER, arg2 INTEGER) BEGIN SET @enabled = TRUE; call debug_msg(@enabled, "my first debug message"); call debug_msg(@enabled, (select concat_ws('',"arg1:", arg1))); call debug_msg(TRUE, "This message always shows up"); call debug_msg(FALSE, "This message will never show up"); END $$ DELIMITER ; 

然后像这样运行testing:

 CALL test_procedure(1,2) 

这将导致以下输出:

 ** DEBUG: ** my first debug message ** DEBUG: ** arg1:1 ** DEBUG: ** This message always shows up 

是的,这里有一个专门的工具 – MySQLdebugging器 。
在这里输入图像说明

有用于debugging MySQL中的存储过程 /函数和脚本的GUI工具 。 一个体面的工具,dbForge Studio for MySQL,具有丰富的function和稳定性。

如何debugging一个MySQL存储过程。

可怜的debugging人员:

  1. 使用两列id INTlog VARCHAR(255)创build一个名为logtable的表。

  2. 使id列自动增加。

  3. 使用这个程序:

     delimiter // DROP PROCEDURE `log_msg`// CREATE PROCEDURE `log_msg`(msg VARCHAR(255)) BEGIN insert into logtable select 0, msg; END 
  4. 把这个代码放在任何你想把消息logging到表的地方。

     call log_msg(concat('myvar is: ', myvar, ' and myvar2 is: ', myvar2)); 

这是一个不错的快速和肮脏的小logging器来弄清楚是怎么回事。

另一种方法在这里介绍

http://gilfster.blogspot.co.at/2006/03/debugging-stored-procedures-in-mysql.html

自定义debuggingmySql过程和日志表。

你也可以在你的代码中放一个简单的select,看它是否被执行。

 SELECT 'Message Text' AS `Title`; 

我从中得到了这个想法

http://forums.mysql.com/read.php?99,78155,78225#msg-78225

也有人在GitHub上为自定义debugging过程创build了一个模板。

看这里

http://www.bluegecko.net/mysql/debugging-stored-procedures/ https://github.com/CaptTofu/Stored-procedure-debugging-routines

在这里被提到

如何捕捉任何exception的触发器和存储过程的MySQL?

我只是简单地将select语句放在存储过程的关键区域,以检查数据集的当前状态,然后将它们注释掉( – select…)或在生产之前将其删除。

debugging器的MySQL是好的,但它不是免费的。 这是我现在使用的:

 DELIMITER GO$ DROP PROCEDURE IF EXISTS resetLog GO$ Create Procedure resetLog() BEGIN create table if not exists log (ts timestamp default current_timestamp, msg varchar(2048)) engine = myisam; truncate table log; END; GO$ DROP PROCEDURE IF EXISTS doLog GO$ Create Procedure doLog(in logMsg nvarchar(2048)) BEGIN insert into log (msg) values(logMsg); END; GO$ 

存储过程中的用法:

 call dolog(concat_ws(': ','@simple_term_taxonomy_id', @simple_term_taxonomy_id)); 

存储过程的使用:

 call resetLog (); call stored_proc(); select * from log; 

MySQL连接器/ Net 6.6具有debugging存储过程和函数的function

安装debugging器

要启用存储过程debugging器:

  • 对于Connector / Net 6.6:安装Connector / Net 6.6并selectComplete选项。
  • 对于Connector / Net 6.7和更高版本:安装存储过程debugging程序所属的Visual Studio产品MySQL。

启动debugging器

要启动debugging程序,请按照下列步骤操作:

  • 在Visual Studio服务器资源pipe理器中select一个连接。
  • 展开存储过程文件夹。 只有存储过程可以直接debugging。 要debugging用户定义的函数,请创build一个存储的
    调用函数的过程。
  • 单击一个存储过程节点,然后右键单击并从上下文菜单中selectDebug Routine。

我迟到了,但带来了更多的啤酒:

http://ocelot.ca/blog/blog/2015/03/02/the-ocelotgui-debugger/和https://github.com/ocelot-inc/ocelotgui

我试了一下,看起来相当稳定,支持断点和variables检查。

这不是一个完整的套件(只有4.1 Mb),但帮助了我很多!

它是如何工作的:它与你的mysql客户端(我使用的是Ubuntu 14.04)集成在一起,执行完后:

 $install $setup yourFunctionName 

它会在您的服务器上安装一个新的数据库,用于控制debugging过程。 所以:

 $debug yourFunctionName('yourParameter') 

会给你一个一步一步走你的代码的机会,“刷新”你的variables,你可以更好地查看你的代码里面发生了什么。

重要提示:在debugging时,也许你会改变(重新创build过程)。 重新创build后,执行$ exit和$ setup,然后再执行新的$ debug

这是“插入”和“logging”方法的替代方法。 您的代码仍然没有额外的“debugging”指令。

截图:

豹猫断点步进

MySQL的第一个稳定的debugging器是在dbForge Studio for MySQL中

我使用了两种不同的工具来debugging程序和function:

  1. dbForge – 许多functionMySQL的GUI。
  2. MyDebugger – 用于debugging的专用工具…用于debugging的方便工具。 投票http://tinyurl.com/voteimg

MySql Connector / .NET还包含一个集成在版本6.6以上的visual studio中的存储过程debugging器,您可以在这里获得安装程序和源代码: http : //dev.mysql.com/downloads/connector/net/

一些文档/屏幕截图: https : //dev.mysql.com/doc/connector-net/en/connector-net-visual-studio-debugger.html

你可以按照这里的通告: http ://forums.mysql.com/read.php?38,561817,561817#msg-561817

免责声明:我是为Visual Studio产品创作MySQL的存储过程debugging器引擎的开发人员。

蟾蜍mysql。 有一个免费的版本http://www.quest.com/toad-for-mysql/

对应于这个 @Brad Parks不知道MySQL的版本,但我的是5.6,因此有点调整的作品:

我创build了一个函数debug_msg ,它是函数(不是过程),并返回文本(无字符限制),然后调用该函数作为SELECT debug_msg (params)AS my_res_set ,代码如下:

 CREATE DEFINER=`root`@`localhost` FUNCTION `debug_msg`(`enabled` INT(11), `msg` TEXT) RETURNS text CHARSET latin1 READS SQL DATA BEGIN IF enabled=1 THEN return concat('** DEBUG:', "** ", msg); END IF; END DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_func_call`( IN RegionID VARCHAR(20), IN RepCurrency INT(11), IN MGID INT(11), IN VNC VARCHAR(255) ) BEGIN SET @enabled = TRUE; SET @mainQuery = "SELECT * FROM Users u"; SELECT `debug_msg`(@enabled, @mainQuery) AS `debug_msg1`; SET @lastQuery = CONCAT(@mainQuery, " WHERE u.age>30); SELECT `debug_msg`(@enabled, @lastQuery) AS `debug_msg2`; END $$ DELIMITER