2016-06-17 9 views
0

がクエリ内部クエリーでlistaggのコンマ区切り値を使用するにはどうすればよいですか?

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 | 
----------------- 

しかし、実際の結果は、サブクエリを単一のフィールドとみなしているため、行を返しません。

これはどのように処理できますか?

+0

またはこの:http://stackoverflow.com/questions/18770581/oracle-あなたは、あなたが何をしようとして行うにバインドされている場合はそうでない場合、あなたはこのように、動的SQLを使用する必要があります分割 - 複数のコンマ区切り値 - Oracle表 - 複数行 –

答えて

0

解析機能listaggの出力はテキストデータです。したがって、あなたが出力として

'Jon','Rob','Bran' 

を取得していると考えたとしても、それは実際に@artmによって答えが十分でなければならないあなたのために

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

のような単一の文字列です。

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; 
/
関連する問題