MySQL中有没有办法将调试消息打印到stdout,temptable或logfile?就像是:
print 在SQLServer中DBMS_OUTPUT.PUT_LINE 在Oracle中小智 99
选项1:将它放在您的过程中,以便在运行时将'comment'打印到stdout.
SELECT 'Comment';
Run Code Online (Sandbox Code Playgroud)
选项2:将其放入您的过程中以将变量打印到stdout:
declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);
Run Code Online (Sandbox Code Playgroud)
myvar is 5当程序运行时,这将打印到stdout.
选项3,创建一个名为一个文本列的表tmptable,并将消息推送给它:
declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);
Run Code Online (Sandbox Code Playgroud)
你可以将上面的内容放在一个存储过程中,所以你要写的就是:
CALL log(concat('the value is', myvar));
Run Code Online (Sandbox Code Playgroud)
这节省了一些按键.
选项4,将消息记录到文件
select "penguin" as log into outfile '/tmp/result.txt';
Run Code Online (Sandbox Code Playgroud)
这个命令有很多限制.您只能将outfile写入磁盘上为"其他"组创建和写入权限的区域.它应该将它保存到/ tmp目录.
一旦你编写了outfile,你就无法覆盖它.这是为了防止破解者只是因为他们有SQL注入你的网站而可以在MySQL中运行任意命令.
打印东西的快速方法是:
select '** Place your mesage here' AS '** DEBUG:';
Run Code Online (Sandbox Code Playgroud)
小智 5
这就是我调试的方式:
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
Run Code Online (Sandbox Code Playgroud)
如果查询 1、2 或 3 将抛出错误,HANDLER 将捕获 SQLEXCEPTION,并且 SHOW ERRORS 将为我们显示错误。注意:SHOW ERRORS 应该是 HANDLER 中的第一个语句。