Sql 从表中选择一个随机行-DBMS_random.VALUE在从两个不同的用户执行时给出相同的行
一个快速的帮助,伙计们! 我的应用程序需要从Oracle数据库中约200000行的表中随机获取一个值。多个用户可能同时使用该应用程序,因此目的是让所有用户每次单击按钮时都看到不同的值。一旦某行被使用,请将其标记为已使用,不要再次使用。 以下是我正在使用的查询示例:Sql 从表中选择一个随机行-DBMS_random.VALUE在从两个不同的用户执行时给出相同的行,sql,database,oracle,random,Sql,Database,Oracle,Random,一个快速的帮助,伙计们! 我的应用程序需要从Oracle数据库中约200000行的表中随机获取一个值。多个用户可能同时使用该应用程序,因此目的是让所有用户每次单击按钮时都看到不同的值。一旦某行被使用,请将其标记为已使用,不要再次使用。 以下是我正在使用的查询示例: SELECT MY_COLUMN FROM ( SELECT MY_COLUMN
SELECT
MY_COLUMN
FROM
( SELECT
MY_COLUMN
FROM
MY_TABLE
WHERE
COLUMN_STATUS = 'Not used'
ORDER BY
DBMS_RANDOM.VALUE )
WHERE
ROWNUM = 1;
当我在单个用户上使用时,它会工作,每次都会给我一个不同的值。但是我做了一个测试,我在两台不同的机器上用两个不同的用户登录,我同时点击了“按钮”,在两个用户上我得到了相同的值。我是不是遗漏了什么?这就是DBMS_RANDOM.VALUE的行为方式吗?
如果是,您有什么建议可以解决上述问题吗
谢谢,
我感谢你对人们的帮助 “我的表格”表中有多少行的列状态为“未使用”?行的总数(200k)是无关的,相关的是有多少行满足WHERE条件。例如,如果只有四行这样做,那么“随机”得到同一行的几率略高于4%。您是否能够复制您注意到的行为,或者它只发生一次?大约140000行未使用。不,这不是一次性事件。我能够重新创建它。这是在包中还是在其他PL/SQL代码中?还是剧本?我想到的唯一一件事是DBMS_随机包中的种子过程(或者可能是过时的初始化过程)在您共享的代码片段之前被调用。MY_表中有多少行的列状态为“Not used”(未使用)?行的总数(200k)是无关的,相关的是有多少行满足WHERE条件。例如,如果只有四行这样做,那么“随机”得到同一行的几率略高于4%。您是否能够复制您注意到的行为,或者它只发生一次?大约140000行未使用。不,这不是一次性事件。我能够重新创建它。这是在包中还是在其他PL/SQL代码中?还是剧本?我想到的唯一一件事是DBMS_随机包中的SEED过程(或者可能是过时的初始化过程)在您共享的代码片段之前被调用。