Использование функции-примера в сложном запросе в PLSQL - PullRequest
0 голосов
/ 14 июля 2020

Я хотел бы выбрать случайную выборку строк, возвращаемых моим запросом. Я прочитал ответ Как получить записи случайным образом из базы данных oracle? но я не могу заставить работать dbms_random.random, поэтому я попытался использовать функцию образца.

Но я я получаю сообщение об ошибке, когда запрашиваю образец своих значений. Воспроизводимый пример: Приведенные примеры запросов предназначены только для воспроизводимости, они не имеют ничего общего с моим фактическим вариантом использования (например, я не хочу выбирать 7 строк или что-то подобное)

select * from (select 1,2,3,4,5,6,7 from dual) sample(0.1)
-- doesn't work
select * from (select 1,2,3,4,5,6,7 from dual)t sample(0.1)
-- doesn't work either

Что я здесь делаю не так? Моя цель - выбрать случайную выборку результатов подзапроса, но у меня нет прав на использование dbms_random.value.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Oracle не поддерживает выборку производных таблиц или представлений, которые не сохраняют ключи ( ссылка ).

Также обратите внимание, что если вы хотите создать 1 строку для каждого из первых 7 целых чисел в Oracle:

select level
from dual
connect by level <= 7
1 голос
/ 14 июля 2020

Базовая c функция VALUE из DBMS_RANDOM получает случайное число, большее или равное 0 и меньше 1, с 38 цифрами справа от десятичной дроби (38-di git точность).

В качестве альтернативы, при указании нижнего и верхнего пределов извлекается случайное число между. В вашем случае вы можете получить случайное целочисленное значение от 1 до 7, используя

select round(dbms_random.value(1,7),0) from dual ;

Вы можете получить эти значения даже из своей таблицы

select round(dbms_random.value(a.min_value,a.max_value),0) from my_table a ;

Поскольку вы не объяснили, что именно вы хотите выбрать из своей таблицы, я могу просто предоставить вам общий c ответ.

...