是否可以使用相同的种子随机生成不同的记录集

Can different set of records be randomly generated with the same seed

我有 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;

"I wonder if there is a difference between initialize and seed in the dbms_random package"

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

is there a way to generate a different set of records but still keep the seed

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

这里是a demonstration on db<>fiddle