2013-10-08 68 views
0

我遇到與分割消息相關的問題。 我的flexcube oracle表中有一個名爲'Message'的字段(列),裏面有xml代碼,並且此消息與一個數字帳戶(另一列)相關,即每個數字帳戶都有一條消息。聚合分割記錄

問題是當消息太大時,消息被分成兩個或三個記錄(使用相同的數字帳戶)。 現在我必須爲每個號碼帳戶合併這些消息片段,以便將完整的消息返回到我向我的表格查詢的查詢中。 我的'消息'列的類型爲CLOB。

我開始使用ListAgg()函數,但有一個大小問題(4000個字符)。 我希望我清楚。請幫幫我。

在此先感謝。

回答

0

我推薦這篇關於字符串聚合的文章,也許其中一種技術適合你?

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

此外,還有就是寫一個用戶定義的解析函數possibilty - 也許你會考慮編寫自己的分析功能,這將產生一個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/

+0

當我說「聚集」我的意思是「串聯」。什麼我想要做的是連接長字符表達式。問題是表達式太大(超過4000個字符),ListAgg()函數不起作用。你有可能的解決方案嗎? – Falcoa

+0

@Falcoa檢查我編輯的帖子。 –