Каждый вызов 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, поэтому я решил ее проигнорировать. отредактируйте свой вопрос , чтобы добавить больше подробностей, если вас это не устраивает