Cada chamada de
DBMS_RANDOM.value()
retorna um valor diferente . Consequentemente, não há nenhuma garantia que qualquer chamada cairá entre qualquer um de seus limites. Na verdade, é estatisticamente improvável. Conseqüentemente, na maioria das vezes você obterá um NULL retornado, porque você não definiu nenhuma ramificação ELSE. Aqui está uma solução alternativa que gera cem valores aleatórios.
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
;
Dada a maneira como seu código define os limites das ramificações, a maioria dos
random_groups
será 4
. Não está claro no seu código postado (brinquedo?) qual é o papel do TEMP_TRT, então decidi ignorá-lo. Por favor, edite sua pergunta para adicionar mais detalhes se isso o deixa infeliz