Jeder Aufruf von DBMS_RANDOM.value()
gibt einen anderen Wert zurück . Folglich gibt es keine Garantie dass jeder Anruf zwischen Ihre Grenzen fällt. Tatsächlich ist es statistisch unwahrscheinlich. Folglich erhalten Sie meistens NULL zurück, weil Sie keinen ELSE-Zweig definiert haben.
Hier ist eine alternative Lösung, die hundert Zufallswerte generiert.
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
;
Angesichts der Art und Weise, wie Ihr Code die Grenzen der Zweige definiert, sind die meisten der random_groups
wird 4
sein .
Aus Ihrem geposteten (Spielzeug?) Code geht nicht hervor, welche Rolle TEMP_TRT spielt, also habe ich beschlossen, ihn zu ignorieren. Bitte bearbeiten Sie Ihre Frage um weitere Details hinzuzufügen, wenn Sie dies unzufrieden macht