Elke aanroep van DBMS_RANDOM.value()
retourneert een andere waarde . Bijgevolg is er geen garantie dat elke oproep tussen uw grenzen zal vallen. In feite is het statistisch onwaarschijnlijk. Daarom krijg je meestal een NULL terug, omdat je geen ELSE branch hebt gedefinieerd.
Hier is een alternatieve oplossing die honderd willekeurige waarden genereert.
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
;
Gezien de manier waarop uw code de grenzen van de takken definieert, zijn de meeste random_groups
wordt 4
.
Het is niet duidelijk uit je geposte (speelgoed?) code wat de rol van TEMP_TRT is, dus heb ik besloten het te negeren. Bewerk je vraag om meer details toe te voegen als dit je ongelukkig maakt