Как повторить запрос в Oracle - PullRequest
0 голосов
/ 20 марта 2019

Мне нужно повторить этот запрос 100 раз.Я думаю, что я должен использовать функцию цикла, но не нашел решения о том, как это сделать.

select case when DBMS_RANDOM.value >= 0 and DBMS_RANDOM.value<=0.053 then 1
            when DBMS_RANDOM.value > 0.053 and DBMS_RANDOM.value <= 0.097 then 2
            when DBMS_RANDOM.value > 0.097 and DBMS_RANDOM.value <= 0.142 then 3
end random_groups
from temp_trt;

вот пример данных temp_trt введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Каждый вызов DBMS_RANDOM.value() возвращает другое значение . Следовательно, нет гарантии , что любой вызов будет находиться между любыми вашими границами. На самом деле это статистически маловероятно. Следовательно, большую часть времени вы получите возвращаемое значение NULL, поскольку вы не определили ветку ELSE.

Вот альтернативное решение, которое генерирует сто случайных значений.

with dr as (
    select DBMS_RANDOM.value val
    from dual
    connect by level <= 100 
)
select dr.val
      , case when dr.val >= 0 and dr.val<=0.053 then 1
            when dr.val > 0.053 and dr.val <= 0.097 then 2
            when dr.val > 0.097 and dr.val <= 0.142 then 3
            else 4 
end random_groups
from dr
;

Учитывая то, как ваш код определяет границы ветвей, большая часть random_groups будет 4.


Из вашего опубликованного (игрушечного?) Кода не ясно, какова роль TEMP_TRT, поэтому я решил ее проигнорировать. отредактируйте свой вопрос , чтобы добавить больше подробностей, если вас это не устраивает

0 голосов
/ 20 марта 2019

Вы можете использовать технику генерации строк по select level ... connect by level >= 100 структуре как

select level, rg.random_groups
 from
    ( select case when DBMS_RANDOM.value >= 0 and DBMS_RANDOM.value<=0.053 then 1
                when DBMS_RANDOM.value > 0.053 and DBMS_RANDOM.value <= 0.097 then 2
                when DBMS_RANDOM.value > 0.097 and DBMS_RANDOM.value <= 0.142 then 3
     end random_groups
    from dual ) rg
connect by level <= 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...