Oracle随机数生成器存储过程而不使用DBMS_RANDOM

时间:2015-06-02 20:03:04

标签: sql oracle stored-procedures random

我无法访问DBMS_RANDOM包,因此我想创建自己的存储过程以在Oracle中生成随机数。有谁知道我怎么做?

提前致谢!

编辑: 我试图从每个州生成一个随机行。这是我的代码:

SELECT Z.* FROM ( 
      SELECT A.*, ROW_NUMBER() OVER (PARTITION BY A.STATE ORDER BY (
          select to_char(systimestamp,'ff') from dual)) AS ROW_ID 
        FROM   STATE_TABLE A ) Z WHERE Z.ROW_ID=1;

每次运行它时都会给我相同的行,但我希望每次运行它时都会给我不同的行。请帮忙吗?

3 个答案:

答案 0 :(得分:3)

如果要从表中选择随机行,可以使用SAMPLE子句

SELECT * FROM mytable SAMPLE(4);

这使您可以随机选择所有行的4%。

答案 1 :(得分:2)

如果您的DBA拒绝授予您访问dbms_random的权限(我已经体验过这一点,出于安全原因,但最终有足够的豁免)您可以创建一个Java调用:

create or replace function my_random return float as
language java name 'java.lang.Math.random() return double';
/

select my_random from dual;

 MY_RANDOM
----------
.411402327

在您的查询中:

SELECT Z.* FROM ( 
  SELECT A.*, ROW_NUMBER() OVER (PARTITION BY A.STATE ORDER BY my_random) AS ROW_ID 
  FROM   STATE_TABLE A
) Z WHERE Z.ROW_ID=1;

不是说它是理想的,但它是可能的。

答案 2 :(得分:0)

您可以使用

伪生成随机数
select to_char(systimestamp,'ff') from dual;
相关问题