如何在oracle SP中返回逗号分隔值

时间:2010-06-13 04:21:50

标签: oracle plsql

如果我有一个简单的查询:

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

这将返回不同行中的记录,但如何以下列格式返回行:

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

我想这样做是因为我希望将其作为parameter发送到另一个存储过程...此外,传递给string时有多大的限制是什么? SP作为参数

到目前为止我所拥有的:

    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;

虽然这没有给出预期的结果

1 个答案:

答案 0 :(得分: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

退房。