2012-01-05 39 views
2

SQLの助けが必要です - すべての行の列を別の乱数で生成および更新したいと考えています。Oracle SQL - すべての行で異なる乱数列を生成および更新します。

データベース#Oracle 10g。

例 - 私はこのような何かをするときには、同じ数の

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

何かアドバイスを持つすべての行を更新しますか?

+1

質問のカップルは:なぜそれがランダムである必要がありますか?それはテーブル内で一意である必要がありますか? – ninesided

答えて

9

サブクエリのように見えますが問題です。

これは、あなたが本当に明確な乱数が必要な場合は、よく、あなたが行より多くの、より多くの数を生成する必要があるとしている

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

+1簡単にするために、あなたが考え出したものを投稿する。これは本当に懸念されている場合でも、必ずしも各行が異なる値を取得するとは限りません – Craig

0

working-のようです。

注次のクエリ:

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 
関連する問題