H2 - установка переменной не работает должным образом - PullRequest
0 голосов
/ 22 января 2019

Я использую h2 для генерации некоторых данных для тестов. У меня есть оператор выбора, который выбирает случайную строку в таблице.

В операторе выбора я установил переменную с именем «K» с помощью функции SET (http://h2database.com/html/functions.html#set). Во втором операторе в том же сеансе я пытаюсь прочитать / получить текущее значение переменной.

Чтобы получить воспроизводимый результат, я использую SYSTEM_RANGE (1,10) в предложении select ниже. Я использую веб-консоль h2 для выполнения операторов.

Если я установлю переменную, как в следующем выражении

SET @K = SELECT X FROM SYSTEM_RANGE(1,10) ORDER BY RANDOM() LIMIT 1;

и я выполняю следующий оператор VALUES

VALUES(@K)

работает как положено. Переменная K была установлена ​​на случайное значение. Последующие исполнения обоих этих операторов показывают, что значение переменной изменяется случайным образом. Я хотел бы назначить переменную в операторе выбора. Установка переменной, как показано выше, не помогает в достижении моей цели.

Это не работает, как ожидалось

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 будет таким же, как и значение переменной, но это не так. Последующие исполнения обоих операторов показывают, что операторы выбора дают случайно выбранные результаты, но оператор значений предоставляет одно и то же / постоянное целое число.

1 Ответ

0 голосов
/ 23 января 2019

(я немного попробовал ....) и можно (не звонить RAND, каждый раз, когда вы звоните VALUES):

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

«Просто опустите» оператор выбора в SET

...