【问题标题】:Print debugging info from stored procedure in MySQL从 MySQL 中的存储过程打印调试信息
【发布时间】:2010-07-23 01:35:57
【问题描述】:

MySQL 有没有办法将调试消息打印到标准输出、临时表或日志文件?比如:

  • SQLServer 中的print
  • DBMS_OUTPUT.PUT_LINE 在 Oracle 中

【问题讨论】:

标签: mysql debugging


【解决方案1】:

选项 1:将其放入您的程序中,以便在运行时将“评论”打印到标准输出。

SELECT 'Comment';

选项 2:将其放入您的程序中以将变量与它一起打印到标准输出:

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 年的时间里解决了这个问题,但是使用输出到文件来消除错误。
【解决方案2】:

打印内容的快速方法是:

select '** Place your mesage here' AS '** DEBUG:';

【讨论】:

    【解决方案3】:

    这是我将如何调试的方式:

    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 中的第一条语句。

    【讨论】:

      【解决方案4】:

      我通常使用存储过程创建日志表来记录到它。从正在开发的过程中在任何需要的地方调用日志记录过程。

      在同一个问题上查看other posts,这似乎是一种常见做法,尽管有一些替代方案。

      【讨论】:

      • 日志表应该是MyISAM,或者其他非事务性存储引擎,这样你甚至可以追踪回滚的事务,
      【解决方案5】:

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

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

      【讨论】:

      • 这是一个死链接
      猜你喜欢
      • 2014-12-07
      • 2015-03-07
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      相关资源
      最近更新 更多