优选主流主机商
任何主机均需规范使用

从MySQL中的存储过程打印调试信息到控制台

MySQL中是否有一种方法可以将调试消息打印到stdout,temptable或logfile?类似于:

SQLServer中的print
Oracle中的DBMS_OUTPUT.PUT_LINE

使用incron stackoverflow.com/a/41766032/953374从任何地方记录日志

选项1:将其放入您的过程中,以在运行时将”注释”打印到stdout。

SELECT ‘Comment’;

选项2:将其放入您的过程中,以将其输出到stdout的变量:

declare myvar INT default 0;
SET myvar = 5;
SELECT concat(‘myvar is ‘, myvar);

当过程运行时,这会将myvar is 5打印到标准输出。

选项3,使用一个名为tmptable的文本列创建一个表,并将消息推送到该表:

declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat(‘myvar is ‘, myvar);

您可以将以上内容放入存储过程中,因此您只需要编写以下内容:

CALL log(concat(‘the value is’, myvar));

保存了一些击键。

选项4,将消息记录到文件

select”penguin” as log into outfile ‘/tmp/result.txt’;

此命令有非常严格的限制。您只能将输出文件写入磁盘上赋予”其他”组创建和写入权限的区域。它应该可以将其保存到/ tmp目录中。

此外,一旦写入输出文件,就无法覆盖它。这是为了防止破解者仅仅因为他们将SQL注入了您的网站并可以在MySQL中运行任意命令而使您的盒子生根。
相关讨论

mysql抱怨Not allowed to return a result set from a trigger,有什么主意吗?
可能您已经在近3年的时间内解决了该问题,但是使用输出文件来消除该错误。

打印某些内容的快速方法是:

select ‘** Place your mesage here’ AS ‘** DEBUG:’;

一种解决方法是仅使用select而不使用任何其他子句。

http://lists.mysql.com/mysql/197901

我通常创建带有存储过程的日志表以对其进行记录。从正在开发的过程中随时在需要时调用日志记录过程。

看看关于这个问题的其他帖子,这似乎是一种常见的做法,尽管有一些替代方法。
相关讨论

日志表应该是MyISAM或其他非事务性存储引擎,因此您甚至可以跟踪回滚的事务,

这是我调试的方式:

CREATE PROCEDURE procedure_name()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SHOW ERRORS; –this is the only one which you need
ROLLBACK;
END;
START TRANSACTION;
–query 1
–query 2
–query 3
COMMIT;
END

如果查询1、2或3将引发错误,则HANDLER将捕获SQLEXCEPTION
并且SHOW ERRORS将为我们显示错误。注意:SHOW ERRORS应该是HANDLER中的第一条语句。

未经允许不得转载:搬瓦工中文网 » 从MySQL中的存储过程打印调试信息到控制台