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
我不明白:
- 为什么
TIMEOUT EXPIRED
说了两次;
0
的来源
谢谢
它没有返回两次。每个 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
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
我不明白:
- 为什么
TIMEOUT EXPIRED
说了两次; 0
的来源
谢谢
它没有返回两次。每个 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