【问题标题】:Can different set of records be randomly generated with the same seed可以用相同的种子随机生成不同的记录集吗
【发布时间】:2021-12-24 22:38:34
【问题描述】:

我有 2 个与 Oracle 中的 dbms_random 包相关的问题:

  1. 我想知道dbms_random包中的initialize和seed是否有区别。 我需要从更大的集合中随机化固定数量的记录,但我希望观察到的记录保持稳定,直到我更改种子。

  2. 查看记录后,有没有办法生成不同的记录集但仍然保留种子,不知道是否有重置或重新初始化具有相同种子的包的功能?

以下是我的示例代码,用于说明目的。我可以生成一组不同的记录但仍保留原始种子吗?

begin
--dbms_random.initialize(100);  
dbms_random.seed(100);  
SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.value)
WHERE  rownum < 21;

end;

【问题讨论】:

  • 我不确定您对问题 2 的意思。种子的全部意义在于 RNG 将生成相同的随机数集。如果您想要一组不同的记录,请使用不同的种子...?

标签: oracle plsql random-seed


【解决方案1】:

“不知dbms_random包中initialize和seed有什么区别”

是的,有区别。 initialize()弃用,仅保留在 DBMS_RANDOM 中以实现向后兼容性。所有新代码都应使用seed()。这是covered in the Oracle documentation

有没有办法生成不同的记录集但仍保留种子

与您发布的代码示例不同。这将每次设置种子,每次都会为您提供相同的记录集。要从同一个种子中生成多组不同的记录,您需要将种子设置与记录生成分开。

这里是a demonstration on db<>fiddle

【讨论】:

  • 知道了!非常感谢您提供的信息和演示..这正是我想知道的..我对初始化和种子感到困惑,因为我看到它产生相同的结果..以为我错过了什么......跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2012-11-02
  • 2013-04-05
  • 2020-04-24
相关资源
最近更新 更多