如何从子查询的列中 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: 缺少表达式
在最新版本的 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;
此查询 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: 缺少表达式
在最新版本的 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;