Страницы

Поиск по вопросам

четверг, 16 мая 2019 г.

Вывести несколько значений из запроса в одну переменную

Есть таблица cred:
| parent_id | id | clientID | +-----------+-------+----------+ | | 28741 | 28850 | | 28741 | 28611 | 28850 | | 28741 | 28612 | 28850 | | | 28742 | 28850 |
Мне нужно записать в переменную vc_credits 2 id, где parent_id пустой. Мой запрос:
begin select id into vr_cr from cred where clientID = 28850 and parent_id is null exception when too_many_rows then vc_credits : = vr_cr||','||vr_cr; end;
Ожидаемый результат в переменной: vc_credits = 28741,28742


Ответ

Так можно в цикле с неявным курсором:
declare vc_credits varchar2 (32676); begin for r in ( select id from cred where clientID = 28850 and parent_id is null ) loop vc_credits := vc_credits||','||r.id; end loop; dbms_output.put_line ('result='||ltrim (vc_credits,',')); end; /
Или одним запросом без цикла:
select listagg (id, ',') within group (order by id) res from cred where clientID = 28850 and parent_id is null ; RES ----------------- 28741,28742

А так одним запросом в одну переменную:
declare vc_credits sys.odciNumberList; begin select id bulk collect into vc_credits from cred where clientID = 28850 and parent_id is null ; for r in ( select * from cred c join table (vc_credits) t on t.column_value = c.id ) loop dbms_output.put_line ('credit id='||r.id); end loop; end; /
credit id=28741 credit id=28742

Комментариев нет:

Отправить комментарий