Hvert kald af DBMS_RANDOM.value()
returnerer en anden værdi . Derfor er der ingen garanti at ethvert opkald vil falde mellem nogen af dine grænser. Faktisk er det statistisk usandsynligt. Derfor vil du for det meste få en NULL returneret, fordi du ikke har defineret nogen ELSE-gren.
Her er en alternativ løsning, som genererer hundrede tilfældige værdier.
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
;
I betragtning af den måde din kode definerer grænserne for grenene på, er de fleste random_groups
vil være 4
.
Det fremgår ikke klart af din postede (legetøj?) kode, hvad TEMP_TRT's rolle er, så jeg besluttede at ignorere det. Venligst rediger dit spørgsmål for at tilføje flere detaljer, hvis dette gør dig utilfreds