Всяко извикване на 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, затова реших да го игнорирам. Моля, редактирайте въпроса си за да добавите повече подробности, ако това ви прави нещастни