聚合分割记录

时间:2013-10-08 11:36:48

标签: sql plsql oracle-sqldeveloper

我遇到与分割邮件有关的问题。 我的flexcube oracle表有一个名为'Message'的字段(列),其中包含xml代码,此消息与一个数字帐户(另一列)相关,即每个数字帐户都有一条消息。

问题是当邮件太大时,邮件会被拆分为两个或三个记录(具有相同的帐号)。 现在,我必须为每个数字帐户合并这些消息片段,以将完整的消息返回到我向我的表格询问的查询。 我的“消息”列的类型为CLOB。

我开始使用ListAgg()函数,但是存在大小问题(4000个字符)。 我希望我很清楚。请帮帮我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我推荐这篇关于字符串聚合的文章,也许其中一种技术适合你?

http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php#specific_function

此外,编写用户定义的分析函数是可能的 - 也许您会考虑编写自己的分析函数,这将产生CLOB结果(不确定CLOB是否是此处的选项,但您可以尝试)。有关该主题的更多信息:

http://docs.oracle.com/cd/B19306_01/appdev.102/b14289/dciaggfns.htm

编辑:嗯,你有没有尝试谷歌搜索?这是我发现的,似乎有效:

SELECT
   DBMS_XMLGEN.CONVERT(
    EXTRACT(
      xmltype('<?xml version="1.0"?><document>' || XMLAGG(XMLTYPE('<V>' || DBMS_XMLGEN.CONVERT(message)|| '</V>')).getclobval()||'</document>'),
      '/document/V/text()').getclobval(), 1) AS data_value
FROM 
   account_messages
GROUP BY
   account_no;

我不是作者,代码来自:http://sonra.io/listagg-with-clob-string-aggregation-exceeding-4000-characters-with-xmlagg/