Každé volání DBMS_RANDOM.value()
vrátí jinou hodnotu . V důsledku toho neexistuje žádná záruka že jakýkoli hovor spadne mezi kteroukoli z vašich hranic. Ve skutečnosti je to statisticky nepravděpodobné. V důsledku toho většinu času dostanete vrácenou hodnotu NULL, protože jste nedefinovali žádnou JINOU větev.
Zde je alternativní řešení, které generuje sto náhodných hodnot.
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
;
Vzhledem k tomu, jak váš kód definuje hranice větví, většina random_groups
bude 4
.
Z vašeho zveřejněného kódu (hračky?) není jasné, jaká je role TEMP_TRT, takže jsem se rozhodl ji ignorovat. Upravte svůj dotaz přidat další podrobnosti, pokud jste z toho nešťastní