【发布时间】:2019-01-22 20:33:36
【问题描述】:
我正在使用 h2 为测试生成一些数据。 我有一个 select 语句,它在表中选择一个随机行。
在 select 语句中,我使用 SET 函数 (http://h2database.com/html/functions.html#set) 设置了一个名为“K”的变量。 在同一会话中的第二条语句中,我尝试读取/获取变量的当前值。
为了获得可重现的结果,我在下面的选择语句中使用了 SYSTEM_RANGE(1,10)。我使用 h2 web 控制台来执行语句。
如果我像下面的语句那样设置变量
SET @K = SELECT X FROM SYSTEM_RANGE(1,10) ORDER BY RANDOM() LIMIT 1;
然后我执行后续的 VALUES 语句
VALUES(@K)
它按预期工作。变量 K 已设置为随机值。这两个语句的后续执行表明,变量的值是随机变化的。 我想在 select 语句中分配变量。如上所示设置变量无助于实现我的目标。
这没有按预期工作
SELECT SET(@K,X) FROM SYSTEM_RANGE(1,10) ORDER BY RANDOM() LIMIT 1;
VALUES(@K); -- value of K is different than result of above select
-- subsequent executions show that the result of the select changes as expected
— but the result of the values statement and thus the value of K does not change
我希望 select 语句的结果与变量的值相同,但事实并非如此。两个语句的后续执行表明,select 语句提供随机选择的结果,但 values 语句提供相同的 / 一个常量整数。
【问题讨论】: