как вернуть значения через запятую в Oracle SP - PullRequest
0 голосов
/ 13 июня 2010

Если у меня есть простой запрос вроде:

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 Ответ

1 голос
/ 13 июня 2010

Хотя вы должны изучить другие способы сделать это.На случай, если вам это нужно, есть простой способ, хотя и есть ловушка.

Какую версию Oracle вы используете?Oracle 11gR2 имеет хорошую реализацию, LISTAGG.

Like -

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

Checkout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...