分组和构造消息
grouping and constructing message
我有如下table,
group_id patchid message
A 1 msg1
A 1 msg1
B 1 msg2
B 2 msg3
C 4 msg4
我想使用 plsql 过程为每个组构造一条消息,并将每条消息传递给循环内调用的另一个过程,消息应如下所示,
msg = A,1,msg1
B,1,msg2,2,msg3
C,4,msg4
作为 proc1(msg) 调用的过程
我尝试使用游标 select 行并使用 for 循环但不确定如何等待下一行然后构建消息。
这是一个选项:它
- 选择不同的 [group_id、patchid、消息] 组合
- 使用
LISTAGG
按 group_id
对值进行分组
- 将这样的值传递给另一个过程(我只是显示它)
SQL> begin
2 for cur_r in (select
3 group_id ||', '||
4 listagg(patchid ||', '|| message, '; ')
5 within group (order by patchid) val
6 from (select distinct group_id, patchid, message
7 from test
8 )
9 group by group_id
10 )
11 loop
12 -- you'd call the procedure here, passing cur_r.val to it
13 dbms_output.put_line(cur_r.val);
14 end loop;
15 end;
16 /
A, 1, msg1
B, 1, msg2; 2, msg3
C, 4, msg4
PL/SQL procedure successfully completed.
SQL>
我有如下table,
group_id patchid message
A 1 msg1
A 1 msg1
B 1 msg2
B 2 msg3
C 4 msg4
我想使用 plsql 过程为每个组构造一条消息,并将每条消息传递给循环内调用的另一个过程,消息应如下所示,
msg = A,1,msg1
B,1,msg2,2,msg3
C,4,msg4
作为 proc1(msg) 调用的过程 我尝试使用游标 select 行并使用 for 循环但不确定如何等待下一行然后构建消息。
这是一个选项:它
- 选择不同的 [group_id、patchid、消息] 组合
- 使用
LISTAGG
按group_id
对值进行分组
- 将这样的值传递给另一个过程(我只是显示它)
SQL> begin
2 for cur_r in (select
3 group_id ||', '||
4 listagg(patchid ||', '|| message, '; ')
5 within group (order by patchid) val
6 from (select distinct group_id, patchid, message
7 from test
8 )
9 group by group_id
10 )
11 loop
12 -- you'd call the procedure here, passing cur_r.val to it
13 dbms_output.put_line(cur_r.val);
14 end loop;
15 end;
16 /
A, 1, msg1
B, 1, msg2; 2, msg3
C, 4, msg4
PL/SQL procedure successfully completed.
SQL>