首页 > 解决方案 > 分组和构造消息

问题描述

我有如下表,

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)调用的过程我尝试使用光标选择行并用于循环,但不确定如何等待下一行然后构造消息。

标签: sqldatabaseoraclestored-proceduresplsql

解决方案


这是一个选择:它

  • 选择不同的 [group_id, patchid, message] 组合
  • 用于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>

推荐阅读