【问题标题】:Oracle SQL - Generate and update a column with different random number in every rowOracle SQL - 在每一行中生成和更新具有不同随机数的列
【发布时间】:2012-02-03 18:05:30
【问题描述】:

需要有关 SQL 的帮助 - 我想使用不同的随机数在每一行中生成和更新一列。

数据库#Oracle 10g。

示例 - 当我做这样的事情时,它会更新所有具有相同数字的行

update mytable r 
set r.generated_num = 
(select floor(dbms_random.value(100,9999999)) from dual).

有什么建议吗?

【问题讨论】:

  • 几个问题:为什么需要随机?它需要在表中是唯一的吗?

标签: sql oracle random oracle10g


【解决方案1】:

看起来子查询是问题所在。

这似乎有效-

update mytable r set r.generated_num = TRUNC(dbms_random.value(1,9999999))

【讨论】:

  • +1 为简单起见,并发回您的发现。这并不一定能确保每一行都会得到不同的值,如果这确实是一个问题
【解决方案2】:

如果您真的需要一个不同的随机数,那么您将不得不生成比行多得多的数字。

注意以下查询:

with generator as
(select /*+ materialize */ rownum rn from dba_objects where rownum <= 250)
select count(distinct rv), count(rv) from
(
select trunc(dbms_random.value(1,9999999)) as rv
  from generator v1
       cross join generator v2
       cross join generator v3
 where rownum <= 10000000
)

一些示例执行:

COUNT(DISTINCTRV)  COUNT(RV)
----------------- ----------
          6321429   10000000
          6321827   10000000
          6321941   10000000
          6321507   10000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2015-06-30
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多