我无法访问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;
每次运行它时都会给我相同的行,但我希望每次运行它时都会给我不同的行。请帮忙吗?
答案 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;