H2-设置变量未按预期工作

时间:2019-01-22 20:33:37

标签: sql database h2

我正在使用h2生成一些测试数据。 我有一条select语句,该语句选择表中的随机行。

在select语句中,我使用SET函数(http://h2database.com/html/functions.html#set)设置了一个名为“ K”的变量。 在同一会话的第二条语句中,我尝试读取/获取变量的当前值。

要获得可重复的结果,我在下面的select语句中使用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语句提供相同/恒定的整数。

1 个答案:

答案 0 :(得分:0)

(我尝试了一下。。。)并且有可能(每次呼叫RAND时都不呼叫VALUES):

SET @K = FLOOR(RAND() * 9) + 1;
VALUES(@K);

“仅忽略” SET中的select语句