暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 根据所需的数字计数生成唯一随机数列表

askTom 2018-03-29
257

问题描述

嗨,

我的要求是根据提供的总数生成随机数列表。例如,如果总计数是100的,我必须生成100唯一的随机数。下面是我使用的示例代码。您能否检查一下,让我知道以下代码是否可以。
我创建了具有唯一约束的表temp1来存储数字

declare
nTotalNumber number:=100;
nIloop number;
begin
insert into temp(number) values (nTotalNumber);
SAVEPOINT do_escape;
for i in 1..nTotalNumber loop
nIloop := i;
insert into temp1(random_values) values (round(DBMS_RANDOM.value(100000,999999)));
commit;
end loop;
EXCEPTION
   WHEN DUP_VAL_ON_INDEX THEN
   nNumCards :=nTotalNumber-nIloop+1;
   ROLLBACK TO do_escape;
end;
复制


专家解答

你可以做这样的事情

SQL> with t as
  2  ( select round(DBMS_RANDOM.value(100000,999999)) r1,
  3           DBMS_RANDOM.value r2
  4    from   dual
  5    connect by level <= 10000
  6  )
  7  select *
  8  from (
  9    select r1,
 10           dense_rank() over ( order by r2 ) rk,
 11           row_number() over ( partition by r1 order by null ) as seq
 12    from t
 13  )
 14  where rk <= 100
 15  and   seq = 1
 16  and   rownum <= 100;

        R1         RK        SEQ
---------- ---------- ----------
    117157          1          1
    155961          2          1
    962572          3          1
    932538          4          1
    120104          5          1
    998174          6          1
    315563          7          1
    895293          8          1
    348776          9          1
    693899         10          1
    427596         11          1
    203730         12          1
    386350         13          1
    786456         14          1
    957763         15          1
    637613         16          1
    764065         17          1
    463862         18          1
    473779         19          1
    871045         20          1
    935234         21          1
    889382         22          1
    149162         23          1
    981742         24          1
    287217         25          1
    610881         26          1
...
...
复制


这是

-获取10,000随机数
-至少基于单独的随机排序序列 (dense_rank) 获得 “第一个” 100
-以防万一有任何重复,只保留第一个顺序 (row_number)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论