DBMS_RANDOM.value()
の各呼び出し 別の値を返します 。したがって、保証はありません どんな呼び出しもあなたの境界の間に入るでしょう。実際、統計的にはありそうにありません。その結果、ELSEブランチを定義していないため、ほとんどの場合、NULLが返されます。
これは、100個のランダムな値を生成する代替ソリューションです。
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
;
コードがブランチの境界を定義する方法を考えると、ほとんどのrandom_groups
4
になります 。
投稿された(おもちゃ?)コードからはTEMP_TRTの役割が明確ではないため、無視することにしました。 質問を編集してください これがあなたを不幸にするなら、より多くの詳細を追加するために