PostgreSQL Я новичок в PostgreSQL, и получить задачу о вложенной loop.Here мой код:вложенного цикла курсор в
CREATE TABLE q_39442172
(
id character varying,
event_id character varying,
createdat character varying
);
insert into q_39442172 values('id1', 'event_1', '20160789');
insert into q_39442172 values('id2', 'event_2', '20160689');
insert into q_39442172 values('id3', 'event_3', '20160679');
insert into q_39442172 values('id4', 'event_4', '20160579');
insert into q_39442172 values('id3', 'event_3', '20160579');
insert into q_39442172 values('id2', 'event_5', '20160379');
insert into q_39442172 values('id1', 'event_6', '20160339');
create or replace function query_event_sequence() returns table(r_id character varying, r_events text) as
$$
declare
vc_id character varying;
vc_event_id character varying;
begin
for ref_User in execute 'select distinct id from q_39442172 order by id' loop
vc_id := ref_User.id;
r_id := ref_User.id;
for ref_Event in execute 'select event_id from q_39442172 where id = ' || vc_id loop
vc_event_id := ref_Event.event_id;
r_events := concat_ws(',', r_events, vc_event_id);
end loop;
raise notice '%: %', r_id, r_events;
return next;
end loop;
end;
$$
language plpgsql;
Исключение я получаю:
NOTICE: id1: event_6,event_1
ERROR: cursor "<unnamed portal 2>" already in use
CONTEXT: PL/pgSQL function query_event_sequence() line 13 at OPEN
********** Error **********
ERROR: cursor "<unnamed portal 2>" already in use
SQL state: 42P03
На самом деле, используя array_agg может делать то, что я хочу сделать, но я просто смущен тем, почему вложенный курсорный цикл в моем коде не будет работать.
Почему вы собираете все эти идентификаторы в одной большой разделенной запятой строке? Это не имеет смысла (по крайней мере для меня). Что вы пытаетесь сделать с этими идентификаторами? –
@a_horse_with_no_name Я запускаю этот код только для pratice, и то, что я хочу знать, это то, как использовать вложенный контур курсора в postgesql. –
Ваш пример неполный. 'ref_User' и' ref_Event' не объявлены нигде. Не могли бы вы отправить полный код и полное сообщение об ошибке, пожалуйста? –