我认为您应该能够使用行生成过程来实现这一点。
这是一个简单的示例,您可以对其进行调整以满足您的需求。如果您希望连接的结果很长,请不要忘记 varchar 的最大长度为 32000。
create table myx(a integer not null, b char(3));
insert into myx values(123,'ABC');
insert into myx values(123,'DEF');
insert into myx values(123,'GHI');
insert into myx values(189,'ABC');
insert into myx values(189,'GHI');
create procedure myproc
result row r(a integer not null, b varchar(1000))=
declare aval=integer;
bval=varchar(1000);
newa=integer;
newb=char(3);
begin
aval=NULL;
bval='';
for select a,b into :newa, :newb from myx order by a,b
do
if :aval != :newa or :aval is null
then
if :aval is not null
then
return row(:aval, :bval);
endif;
aval = :newa;
bval = :newb;
else
bval=:bval+','+:newb;
endif;
endfor;
if :aval is not null
then
return row(:aval, :bval);
endif;
end;
select * from myproc();