Varje anrop av DBMS_RANDOM.value()
returnerar ett annat värde . Följaktligen finns det ingen garanti att alla samtal faller mellan någon av dina gränser. Faktum är att det är statistiskt osannolikt. Följaktligen kommer du oftast att få en NULL returnerad, eftersom du inte har definierat någon annan gren.
Här är en alternativ lösning som genererar hundra slumpmässiga värden.
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
;
Med tanke på hur din kod definierar gränserna för grenarna, de flesta av random_groups
blir 4
.
Det framgår inte av din postade (leksak?) kod vilken roll TEMP_TRT är, så jag bestämde mig för att ignorera den. Vänligen redigera din fråga för att lägga till mer information om detta gör dig olycklig