Oracle 多个 "with as" 问题

Oracle multiple "with as" issue

我正在使用 Oracle 12.c 企业版 (12.1.0.2.0)。

我想构建一个随机数的行(这里是 4 到 15 行)- 称为 DataSet - 使用 2 个随机(1 到 30 之间)- 称为 FixedSed...

...并希望 2 个 FixedSet 数据(val1 和 val2)在 DataSet 中保持不变。

with DataSet as
(
select level Ident
     , trunc(dbms_random.value(0,1)*100)-10 val
  from dual
CONNECT BY level <= dbms_random.value(4, 15)
)
, FixedSet as
(
  select trim(trunc(dbms_random.VALUE(1, 30))) val1
       , trim(trunc(dbms_random.VALUE(1, 30))) val2
    from dual
)
select *
  from DataSet, FixedSet

我得到例如:

IDENT   VAL VAL1    VAL2
1       -1     6      13
2       78     6       5
3       68     7      22
4       86    19      29
5       37    15       8
6       -1     8      18
7        0     1      21
8       77    24      19
9       18    15      13
10       4    13      28
11      70     7      29

我希望我得到类似的东西:

IDENT   VAL VAL1    VAL2
1        -1    6      13
2        78    6      13
3        68    6      13
4        86    6      13
5        37    6      13
6        -1    6      13
7        0     6      13
8        77    6      13
9        18    6      13
10       4     6      13
11       70    6      13

所有这一切的重点是 return val 为负时的 val1 和 val 为正时的 val2...

我应该改变什么? 谢谢

如果您希望每个 DataSet

的常数值为 FixedSet
with FixedSet as
(
  select level lfs, trim(trunc(dbms_random.VALUE(1, 30))) val1
       , trim(trunc(dbms_random.VALUE(1, 30))) val2
    from dual
    connect by level <=1
)
, DataSet as
(
select level Ident
     , trunc(dbms_random.value(0,1)*100)-10 val
  from dual
CONNECT BY level <= dbms_random.value(4, 15)
)
select *
  from DataSet, FixedSet;

替代方法是将 val1 和 val2 添加为列定义的一部分

with DataSet as
(
select level Ident
     , trunc(dbms_random.value(0,1)*100)-10 val
  from dual
CONNECT BY level <= dbms_random.value(4, 15)
)
select t.*
       ,(select dbms_random.value(1,30) from dual) as val1
       ,(select dbms_random.value(1,30) from dual) as val2
  from DataSet t

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=9bd7e8952ce27be660c294069d6afe21