0

考虑查询

select listagg(''''||Name||'''', ',') within group (order by Name) from STUDENTS;

这给了我输出

'Jon','Rob','Bran' 

如何在内部查询中使用它考虑以下示例:

with lst as(
select listagg(''''||Name||'''', ',') within group (order by Name) as name_list from STUDENTS)
select * from result where Name in (select name_list from lst)

预期结果 :

-----------------
| Name  | Score |
-----------------
| Jon   | 80    |
-----------------
| Rob   | 60    |
-----------------
| Bran  | 75    |
-----------------

但实际结果不会返回任何行,因为它将子查询视为单个字段。

如何处理?

4

1 回答 1

1

listagg分析函数的输出是文本数据。因此,即使你认为你得到

'Jon','Rob','Bran'

作为输出,它实际上是一个单一的字符串

'''Jon'', ''Rob'', ''Bran'''

出于您的目的,@artm 的答案就足够了。否则,如果您一定要做您想做的事情,那么您将需要使用这样的动态 SQL:

declare
    p_cur sys_refcursor;
    name_list clob;
    select_sql clob;
begin
    select listagg(''''||Name||'''', ',')
               within group (order by Name) as name_list
      into name_list
      from STUDENTS;

    select_sql := 'select * from result where name in (' || name_list || ')';

    open p_cur for select_sql;
end;
/
于 2016-06-17T05:53:22.500 回答