SELECT returns 结果两次

SELECT returns result twice

MariaDB 10.4.13 中的以下代码

DELIMITER $$
CREATE PROCEDURE timeout_check()
BEGIN
    DECLARE var_timestamp_for_countdown TIME;
    SET var_timestamp_for_countdown = SYSDATE();
    SELECT (SLEEP(2));
    IF (TIME_TO_SEC(TIMEDIFF(TIME(SYSDATE()), var_timestamp_for_countdown)) > TIME_TO_SEC(TIME('00:00:01'))) THEN
       SELECT "TIMEOUT EXPIRED";
    END IF;
END $$
DELIMITER ;

CALL timeout_check();

Returns

(SLEEP(2))
0
TIMEOUT EXPIRED
TIMEOUT EXPIRED

我不明白:

谢谢

它没有返回两次。每个 SELECT 将产生多行输出:第一行是列标题,其余行是所选的值。由于您没有为所选表达式指定别名,因此列标题将与表达式相同。

SELECT (SLEEP(2)) 有一个列标题 (SLEEP(2))。它 returns 的值是 0,所以它在输出的第二行。

如果您不想在调用输出中看到此结果,请不要使用 SELECT。你可以做到

SET @ignore = SLEEP(2);

SELECT "TIMEOUT EXPIRED" 有一个列标题 TIMEOUT EXPIRED,它的值 returns 是相同的字符串,因此它在下一行输出中。如果您将其更改为:

SELECT "TIMEOUT EXPIRED" AS error;

输出将是:

error
TIMEOUT EXPIRED