Każde wywołanie DBMS_RANDOM.value()
zwraca inną wartość . W związku z tym nie ma żadnej gwarancji że każde zgłoszenie znajdzie się między twoimi granicami. W rzeczywistości jest to statystycznie mało prawdopodobne. W konsekwencji przez większość czasu otrzymasz zwrócone NULL, ponieważ nie zdefiniowałeś żadnej gałęzi ELSE.
Oto alternatywne rozwiązanie, które generuje sto losowych wartości.
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
;
Biorąc pod uwagę sposób, w jaki twój kod definiuje granice gałęzi, większość random_groups
będzie 4
.
Z opublikowanego przez Ciebie kodu (zabawki?) nie wynika jasno, jaka jest rola TEMP_TRT, więc postanowiłem to zignorować. Edytuj swoje pytanie aby dodać więcej szczegółów, jeśli to sprawia, że jesteś nieszczęśliwy