2013-04-16 4 views
5

में पंक्तियों को समेकित करें इस विषय पर कई समान प्रश्न हैं, लेकिन मुझे ऐसे समाधानों के साथ कोई भी नहीं मिला है जो अंतिम परिणाम के साथ कुछ भी खाता बनाते हैं, varchar2 के लिए बहुत बड़ा है।सीएलओबी

Column1 | Column2 
-------- -------- 
1   Hello 
1   world, 
1   please help 
2   Thanks 
2   world, 
2   you're the best. 
इस में

:

तो मुझे क्या करना कोशिश कर रहा हूँ यह परिवर्तन है

Column1 | Column2 
-------- -------- 
1   Hello world, please help 
2   Thanks world, you're the best. 

मेरे विशेष समस्या कुछ मामलों में जहां नए श्रेणीबद्ध मूल्य 4000 से अधिक देखते हैं कि है पात्रों, इसलिए मैं उम्मीद कर रहा हूं कि LISTAGG का उपयोग नहीं कर सकता। मैं विशेष रूप से फ़ंक्शन लिखने के बिना समाधान में रूचि रखता हूं, लेकिन या तो करूँगा।

+2

आप इस देखा http://stackoverflow.com/questions/9412512/ वैकल्पिक-से-listagg-in-oracle? –

+0

LISTAGG के परिणाम एसक्यूएल (यानी 4000) में VARCHAR2 के अधिकतम आकार तक सीमित हैं। बड़े तारों के लिए हमें तत्वों को इकट्ठा करने के वैकल्पिक साधनों (जैसे संग्रह या उपयोगकर्ता परिभाषित पीएल/एसक्यूएल फ़ंक्शन) का उपयोग करने की आवश्यकता होगी। –

उत्तर

0

LISTAGG WITH CLOB? STRING AGGREGATION EXCEEDING 4000 CHARACTERS WITH XMLAGG. जांचें यह थोड़ा अजीब है, लेकिन काम करने लगता है।

अलविदा होल्गर

+0

एक छोटी व्याख्या की उम्मीद है। – Sankumarsingh

+3

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – Arpit

+1

@ अरपिट - जैसा अब हुआ है! – happybuddha

2

de.hh.holger के रूप में पहले ही बताया, LISTAGG WITH CLOB? STRING AGGREGATION EXCEEDING 4000 CHARACTERS WITH XMLAGG वास्तव में इस समस्या को हल करता है।

मैं इस विषय पर थोड़ा और आगे सविस्तार है और यह एक बहुत लंबी स्ट्रिंग संदेश के मामले में चाल करना चाहिए:

SELECT 
    table_row_id, 
    DBMS_XMLGEN.CONVERT (
    EXTRACT(
     xmltype('<?xml version="1.0"?><document>' || 
       XMLAGG(
       XMLTYPE('<V>' || DBMS_XMLGEN.CONVERT(data_value)|| '</V>') 
       order by myOrder).getclobval() || '</document>'), 
       '/document/V/text()').getclobval(),1) AS data_value 
FROM (
    SELECT 1 myOrder, 1 table_row_id,'abcdefg>' data_value FROM dual 
    UNION ALL 
    SELECT 2, 1 table_row_id,'hijklmn' data_value FROM dual 
    UNION ALL 
    SELECT 3, 1 table_row_id,'opqrst' data_value FROM dual 
    UNION ALL 
    SELECT 4, 1 table_row_id,'uvwxyz' data_value FROM dual) 
GROUP BY 
    table_row_id 
संबंधित मुद्दे