2010-06-13 82 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 

退房。