2012-06-08 30 views
3

我試圖創建一個簡單的存儲過程,將查詢結果存儲到一個字符串中。oracle pl/sql結果爲一個字符串

v_string1 varchar2(100); 

Select column1 
From dual; 

將返回

column 1 
-------- 
aaaa 
bbbb 
cccc 

我想存儲「AAAA,BBBB,中交」進v_string1。 和所有我能想到的是一個光標... 有沒有更好的辦法處理這種

+0

[替代在甲骨文LISTAGG?]的可能重複(http://stackoverflow.com/questions/9412512/alternative-to-listagg-in-oracle) – DCookie

回答

17

使用SQL Fiddle

select LISTAGG(name, ',') WITHIN GROUP (ORDER BY 1) AS names 
from temp_table 
+0

庫里歐......我從來沒有見過該功能在+1之前! – Gerrat

+0

謝謝。直到我Google搜索它,我一直沒有。很高興它的幫助,它也讓我學到了新的東西:D – Kyra

+0

在11g中引入。 – DCookie

1

一還沒有選擇使用在Oracle 11G之前可以工作的純SQL,但字符串仍然限制爲4000個字符。

Select ltrim(max(names), ', ') as names 
From (
    Select sys_connect_by_path(name, ' ,') as names 
    From (
    Select name, row_number() over (order by name) as rown 
    From temp_table 
) 
    Start with rown = 1 
    Connect by rown = prior rown + 1 
)