如何在Oracle中重复查询

时间:2019-03-20 17:42:24

标签: sql oracle

我需要将此查询重复100次。我想我应该使用循环功能,但是没有找到解决方法。

select case when DBMS_RANDOM.value >= 0 and DBMS_RANDOM.value<=0.053 then 1
            when DBMS_RANDOM.value > 0.053 and DBMS_RANDOM.value <= 0.097 then 2
            when DBMS_RANDOM.value > 0.097 and DBMS_RANDOM.value <= 0.142 then 3
end random_groups
from temp_trt;

这是temp_trt的样本数据 enter image description here

2 个答案:

答案 0 :(得分:2)

每次调用DBMS_RANDOM.value()都会返回一个不同的值。因此,不能保证,任何通话都将落在您的任何范围内。实际上,从统计学上讲这不太可能。因此,在大多数情况下,由于未定义ELSE分支,因此将返回NULL。

这里是生成一百个随机值的替代解决方案。

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的作用,所以我决定忽略它。如果您不满意,请编辑您的问题以添加更多详细信息

答案 1 :(得分:0)

您可以将select level ... connect by level >= 100结构的行生成技术用作

select level, rg.random_groups
 from
    ( select case when DBMS_RANDOM.value >= 0 and DBMS_RANDOM.value<=0.053 then 1
                when DBMS_RANDOM.value > 0.053 and DBMS_RANDOM.value <= 0.097 then 2
                when DBMS_RANDOM.value > 0.097 and DBMS_RANDOM.value <= 0.142 then 3
     end random_groups
    from dual ) rg
connect by level <= 100