Sql 分组和构造消息
我有下表Sql 分组和构造消息,sql,database,oracle,stored-procedures,plsql,Sql,Database,Oracle,Stored Procedures,Plsql,我有下表 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,m
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)调用的过程
我尝试用游标选择行并用于循环,但不确定如何等待下一行,然后构造消息。这里有一个选项:它
- 选择不同的[组id、补丁id、消息]组合
- 使用
按LISTAGG
group\u id
- 将这样的值传递给另一个过程(我只是显示它)
这里有一个选择:it
- 选择不同的[组id、补丁id、消息]组合
- 使用
按LISTAGG
group\u id
- 将这样的值传递给另一个过程(我只是显示它)
我想在patchid和message前后包含一个字符串。可以使用Listag吗?当然,只需将其连接到PATCHID。我还想连接PATCHID之前的字符串和messageOK之前和之后的字符串。什么阻止了你?谢谢,伙计,我只是想确认一下,如果可能的话,我会尝试让你知道。我想在patchid和message前后加上一个字符串。可以使用Listag吗?当然,只需将其连接到PATCHID。我还想连接PATCHID之前的字符串和messageOK之前和之后的字符串。是什么阻止了你?谢谢,伙计,我只是想确认一下这是否可行,我会尽力让你知道的。
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>