如何从子查询的列中 select,这是一个 collection

How to select from a colum of a subquery, which is a collection

此查询 returns 一行 2 列。第二列是 collection

WITH
    s (a, b)
    AS
        (SELECT 1, TO_CLOB ('ff') FROM DUAL
         UNION ALL
         SELECT 1, TO_CLOB ('ee') FROM DUAL
         UNION ALL
         SELECT 1, TO_CLOB ('ee') FROM DUAL
         UNION ALL
         SELECT 2, TO_CLOB ('ee') FROM DUAL),
    t (a, b)
    AS
        (  SELECT s.a, COLLECT (s.b)
             FROM s
         group BY s.a)
SELECT t.* from t where t.a=1;

我想将此查询的最后一行更改为一组行。第二列不是 collection,而是俱乐部。将有与 collection as 元素一样多的行。在这个example:3

我想写这样的东西:

WITH
    s (a, b)
    AS
        (SELECT 1, TO_CLOB ('ff') FROM DUAL
         UNION ALL
         SELECT 1, TO_CLOB ('ee') FROM DUAL
         UNION ALL
         SELECT 1, TO_CLOB ('ee') FROM DUAL
         UNION ALL
         SELECT 2, TO_CLOB ('ee') FROM DUAL),
    t (a, b)
    AS
        (  SELECT s.a, COLLECT (s.b)
             FROM s
         group BY s.a)
SELECT tt.* from (select table(t.b) from t where t.a=1) tt ;

[错误] 执行 (34:23): ORA-00936: 缺少表达式

code

在最新版本的 Oracle 中,您可以执行以下操作:

...
select t.a, x.column_value as b
from t
outer apply t.b x
where t.a=1;
 A  B 
--  --
 1  ff
 1  ee
 1  ee

在旧版本中你可以这样做:

...
select t.a, x.column_value as b
from t
left outer join table(t.b) x on 1=1
where t.a=1;

db<>fiddle