【问题标题】:grouping and constructing message分组和构造消息
【发布时间】:2021-02-10 00:22:02
【问题描述】:

我有如下表格,

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

【问题讨论】:

    标签: sql database oracle stored-procedures plsql


    【解决方案1】:

    这是一个选择:它

    • 选择不同的 [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>
    

    【讨论】:

    • 我想在 patchid 和 message 之前和之后包含一个字符串。 Listagg 可以吗?
    • 当然,只需将其连接到 PATCHID。
    • 我也想在 patchid 之前和 message 之前和之后连接字符串
    • 好的。是什么阻止了你?
    • 谢谢哥们,只是想确认一下是否可以,会尝试让你知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    相关资源
    最近更新 更多