【发布时间】:2015-08-16 19:18:07
【问题描述】:
我无权访问 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;
每次我运行它时它都会给我相同的行,但我希望它在我每次运行它时给我不同的行。请帮忙?
【问题讨论】:
-
联系 DBA,向他们索取权限。
-
改用
dbms_crypto包?当然,您可以查找任意数量的伪随机数生成算法并在 PL/SQL 中实现其中之一。然而,这样做是相当疯狂的——如果 DBA 不想让您访问dbms_random包,我很难想象他们为什么希望您构建自己的解决方案效率要低得多,标准要低得多,随机性要低得多。 -
也许您的 DBA 会让您从 random.org 读取数据? ://
-
“我们希望尽快得到这个,所以我们试图自己创造它。” 这听起来有点矛盾。话虽如此,那个伪随机数生成器必须有多强?它的目的是什么?在许多(如果不是全部)情况下,编写自己的伪随机数生成器是个坏主意——除非你确切地知道你在做什么......
-
强制 xkcd - xkcd.com/221。这是针对实际项目还是家庭作业?我很难想象你为什么要在真实系统中这样做,或者你如何证明在真实系统中这样做的计算成本是合理的。说您没有时间获得所需的实际权限,因此想编写自己的效率更低的随机数生成器,这使问题更加复杂,这似乎很疯狂。
标签: sql oracle stored-procedures random