首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在oracle中生成16位随机数

在oracle中生成16位随机数
EN

Stack Overflow用户
提问于 2013-03-04 21:47:34
回答 1查看 1.2K关注 0票数 1

我必须编写甲骨文程序,在registered_security_numbers中注册16位的安全号码。我知道安全号码的前6位要么是1234 11,要么是1234 12,其余10位是随机生成的。

我有两个可能的解决方案:

  1. 编写第二个过程,该过程生成所有可能的安全号码,并将它们插入possible_security_numbers表中,设置属性free=1。然后,当我收到注册一个新的安全号码的请求时,我会查询possible_security_numbers表中的随机安全号,这是免费的,并将其插入到registered_security_numbers中。
  2. 每次收到注册安全号码的请求时,我都会从123411000000-12341299999999范围生成随机号码,直到得到registered_security_numbers表中不存在的安全号码并将其插入registered_security_numbers

(1)我不喜欢这样的方法,因为possible_security_numbers表将包含数十亿个条目,而且我不确定它有多好,或者运行select/update的速度有多快。

(2)我不喜欢的方法,因为如果我在registered_security_numbers表中有很多记录,从一个范围产生随机数可能会重复多次。

我想知道是否有人有其他的解决方案,或者可以评论我的解决方案,这对我来说是很糟糕的,…。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-04 22:02:32

你到底要生成多少个数字?

想象一下,最多要生成100万个(10^6)个数字。如果是这样的话,您需要生成第二个随机数的概率大约是10^-5中的5 (0.00005 %或0.005%)。如果是这样的话,那么担心偶尔生成第二个数字或几乎不可能生成第三个数字的开销是没有意义的。第二种方法将更加有效。

另一方面,想象一下,随着时间的推移,你将产生10亿个数字。如果是这样的话,那么到最后,你需要生成第二个数字的概率是5%,而且你需要合理地经常生成3到4个数字。在这里,权衡的难度要大得多。根据业务的不同,捕获唯一的约束违反异常并在某些调用上生成多个数字的性能影响可能会导致服务经常违反SLA,而枚举有效数字的效率一般更高。

第三,想象一下,随着时间的推移,你将产生所有200亿的数字。如果是这样的话,到最后,你将需要生成100亿个随机数,然后才能找到剩余的有效数字。如果是这样的话,那么第一个选择就是枚举所有可能的数字并跟踪使用了哪些数字,这是一个明显的优势。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15211769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档