Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分组和构造消息_Sql_Database_Oracle_Stored Procedures_Plsql - Fatal编程技术网

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>