Ogni chiamata di DBMS_RANDOM.value()
restituisce un valore diverso . Di conseguenza non vi è nessuna garanzia che qualsiasi chiamata cadrà tra i tuoi limiti. In effetti è statisticamente improbabile. Di conseguenza la maggior parte delle volte otterrai un NULL restituito, perché non hai definito alcun ramo ELSE.
Ecco una soluzione alternativa che genera cento valori casuali.
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
;
Dato il modo in cui il tuo codice definisce i limiti dei rami, la maggior parte dei random_groups
sarà 4
.
Non è chiaro dal codice pubblicato (giocattolo?) quale sia il ruolo di TEMP_TRT, quindi ho deciso di ignorarlo. Per favore modifica la tua domanda per aggiungere ulteriori dettagli se questo ti rende infelice