【问题标题】:H2 - Setting variable does not work as expectedH2 - 设置变量没有按预期工作
【发布时间】: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 语句提供相同的 / 一个常量整数。

【问题讨论】:

    标签: sql database h2


    【解决方案1】:

    (我尝试了一点......)并且有可能(不要打电话给RAND,任何时候你打电话给VALUES):

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

    “省略”SET中的select语句

    【讨论】:

    • 我对获得可重现的结果不感兴趣。我只希望对变量的赋值是永久的,以便在后续语句中使用随机选择的值。我的目标是随机选择表中的第一行,然后我想用这个随机选择的值在其他表中进行查找。这种方法保证随机数据选择和一致性。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2020-09-04
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多