Setiap panggilan DBMS_RANDOM.value()
mengembalikan nilai yang berbeda . Akibatnya, tidak ada jaminan bahwa panggilan apa pun akan jatuh di antara batas-batas Anda. Bahkan secara statistik tidak mungkin. Akibatnya sebagian besar waktu Anda akan mendapatkan NULL yang dikembalikan, karena Anda tidak mendefinisikan cabang ELSE.
Berikut adalah solusi alternatif yang menghasilkan seratus nilai acak.
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
;
Mengingat cara kode Anda mendefinisikan batas-batas cabang, sebagian besar random_groups
akan menjadi 4
.
Tidak jelas dari kode (mainan?) Anda yang diposting apa peran TEMP_TRT, jadi saya memutuskan untuk mengabaikannya. Harap edit pertanyaan Anda untuk menambahkan lebih banyak detail jika ini membuat Anda tidak senang