根据列长度生成随机数(oracle)

问题描述 投票:0回答:1

我有从

开始的号码列表
100000000000000000

100000000000999999

始终为 18 位数字。

现在,我想在100000000000000000100000000000999999之间生成随机数。 (需要18位数字)

declare
 cursor c1 is select * from testNumbers k for update;
 minNumbers INTEGER;
 maxNumbers INTEGER;
 
begin

 select LENGTH(min(someColumn)) into minNumbers from testNumbers; 
 select min(someColumn) into maxNumbers from testNumbers;

  open c1;
    loop fetch c1 into i; 
      exit when c1%notfound;
      
      DBMS_OUTPUT.PUT_LINE(TRUNC(dbms_random.value (minNumbers, maxNumbers)));

    end loop;
  close c1;
  
end;

但是我得到了 16 或 17 位数字,例如:

58637356300054590
1502386622593360
34871420042208564
2696370666671141
62734000905097141

当我更改为:

select max(someColumn) into maxNumbers from testNumbers

没有帮助。

oracle random oracle19c
1个回答
0
投票

使用

DBMS_RANDOM
套件:

SELECT FLOOR(
         DBMS_RANDOM.VALUE(
           100000000000000000,
           100000000001000000
         )
       ) AS random_value
FROM   DUAL;

可以随机输出:

随机_值
100000000000102434

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.