gpt4 book ai didi

sql - 为什么 dbms_random.value 在图形查询(连接依据)中返回相同的值?

转载 作者:行者123 更新时间:2023-12-04 22:40:30 25 4
gpt4 key购买 nike

在 Oracle 11.2.0.4.0 上,当我运行以下查询时,每一行都会得到不同的结果:

select r.n from (
select trunc(dbms_random.value(1, 100)) n from dual
) r
connect by level < 100; -- returns random values

但是只要我在连接或子查询中使用获得的随机值,每一行就会从 dbms_random.value 中获得相同的值:

select r.n, (select r.n from dual) from (
select trunc(dbms_random.value(1, 100)) n from dual
) r
connect by level < 100; -- returns the same value each time

是否可以让第二个查询为每一行返回随机值?

更新

我的例子可能过于简单了,这就是我想要做的:

with reservations(val) as (
select 1 from dual union all
select 3 from dual union all
select 4 from dual union all
select 5 from dual union all
select 8 from dual
)
select * from (
select rnd.val, CONNECT_BY_ISLEAF leaf from (
select trunc(dbms_random.value(1, 10)) val from dual
) rnd
left outer join reservations res on res.val = rnd.val
connect by res.val is not null
)
where leaf = 1;

但是预留可以从 1 到 1.000.000.000(以及更多)。有时该查询会正确返回(如果它立即选择一个没有保留的随机值)或给出内存不足错误,因为它总是尝试使用相同的 dbms_random.value 值。

最佳答案

您的评论“......我想避免并发问题”让我思考。

为什么不尝试插入一个随机数,注意重复违规,然后重试直到成功?即使是查找可用数字的非常聪明的解决方案也可能在两个单独的 session 中得出相同的新数字。因此,只有插入并提交的预订号码是安全的。

关于sql - 为什么 dbms_random.value 在图形查询(连接依据)中返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51260859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com