我正在MySQL中调试一个存储过程,我不知道我的错误在哪里。我有以下代码:
SELECT refreshToken.token FROM refreshToken WHERE refreshToken.accountId = 2;此代码返回一个空集。但是这个代码:
SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2;
SELECT @a;返回表中的第一个值。
发布于 2015-07-04 13:01:13
这是因为@a已经用一些值初始化了。
当查询返回空记录时,全局变量将保留其以前的值。
因此,在运行查询之前清除变量值总是一个好主意。
set @a = null;
SELECT refreshToken.token INTO @a FROM refreshToken WHERE refreshToken.accountId = 2;
SELECT @a;这应该会显示@a为空。
发布于 2015-07-04 13:18:07
这是为了补充阿基尔的答案(这是正确的)。使用会话变量是危险的,因为它们已经可以初始化了。无论何时使用它们,初始化它们都更安全,其中一种方法是在查询本身中这样做:
SELECT @a := refreshToken.token
FROM refreshToken CROSS JOIN
(SELECT @a := NULL) params
WHERE refreshToken.accountId = 2;https://stackoverflow.com/questions/31220751
复制相似问题