Есть таблица 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
Комментариев нет:
Отправить комментарий