2010-06-13 102 views
0

逗號分隔值如果我有一個簡單的查詢,如:如何返回在Oracle SP

OPEN cursor FOR 
SELECT USER_ID FROM USER_TABLE WHERE USER_ID = V_SOME_USER; 

這將在不同的行返回記錄,但我怎麼能按以下格式返回行:

'userid1', 'userid2', 'userid3'.....'useridN' 

我想這樣做,是因爲我想給這一關作爲parameter到另一個存儲過程...還有,什麼是傳遞給SP作爲參數時string可以多大限度

我有什麼至今:

l_str varchar2(32767) default null; 
    l_sep varchar2(10) default null; 
    l_sep1 varchar2(10) default null; 
begin 
    for x in (SELECT USER_ID FROM USER_TABLE WHERE USER_ID = V_SOME_USER) loop 
     l_str := l_str || l_sep || x.b || l_sep; 
     l_sep := ''''; 
     l_sep1 := ''','; 
    end loop; 

雖然這並不給予預期的效果

+2

我們可以傳遞REF CURSOR作爲參數。那麼爲什麼不這樣做? – APC 2010-06-13 04:27:15

+0

這樣會更好......因爲我在字符串中思考它會有字符限制。仍然如何將''userid1','userid2'...'格式導致ref cursor? – john 2010-06-13 04:38:30

回答

1

雖然你應該探索這樣做的其他方式。如果你需要,有一個簡單的方法,雖然有一個捕獲。

您正在使用哪種版本的Oracle? Oracle 11gR2有一個很好的實現,LISTAGG

像 -

SELECT LISTAGG(last_name, ', ') 
    WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list", 
    MIN(hire_date) "Earliest" 
    FROM employees 
    WHERE department_id = 30; 

Emp_list              Earliest 
------------------------------------------------------------ --------- 
Raphaely, Khoo, Tobias, Baida, Himuro, Colmenares   07-DEC-02 

退房。