2016-06-17 56 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-分割多逗號分隔值合oracle的表到多行 –

回答

0

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