我正在使用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语句提供相同/恒定的整数。
答案 0 :(得分:0)
(我尝试了一下。。。)并且有可能(每次呼叫RAND
时都不呼叫VALUES
):
SET @K = FLOOR(RAND() * 9) + 1;
VALUES(@K);
“仅忽略” SET
中的select语句