2013-04-16 33 views
5

Bu konuyla ilgili birçok benzer soru var, ancak varchar2 için çok büyük bir sonuçla ilgili her şeyi hesaba katan çözümler bulamıyorum. Bu içineSatırları CLOB ile eşleştirin

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

:

Yani ne yapmaya çalışıyorum bu değiştirmektir

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

Benim problem yeni birleştirilmiş değeri 4000 aştığı birkaç durum olmasıdır karakterleri, umduğum gibi LISTAGG kullanamazsınız. Bir işlevi yazmak zorunda kalmadan çözümler ile özellikle ilgileniyorum, ama ya yapacağım.

+2

Bunu gördün mü http://stackoverflow.com/questions/9412512/ alternatif-listagg-in-oracle? –

+0

LISTAGG'nin sonuçları, SQL'deki maksimum maksimum VARCHAR2 (yani 4000) ile sınırlandırılmıştır. Daha büyük dizeler için, elemanların toplanması için alternatif bir araç kullanmamız gerekecektir (toplama veya kullanıcı tanımlı PL/SQL fonksiyonu gibi). –

cevap

0

Check LISTAGG WITH CLOB? STRING AGGREGATION EXCEEDING 4000 CHARACTERS WITH XMLAGG. Biraz garip, ama işe yarıyor gibi görünüyor.

Bye Holger

+0

Biraz açıklama bekleniyor. – Sankumarsingh

+3

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. – Arpit

+1

@Arpit - Şimdi olduğu gibi! – happybuddha

2

de.hh.holger Daha önce LISTAGG WITH CLOB? STRING AGGREGATION EXCEEDING 4000 CHARACTERS WITH XMLAGG gerçekten bu sorunu çözmek gelmez, dikkat çekti.

Ben konuda biraz daha özenli ve bu gerçekten uzun bir dize mesajında ​​da hile yapmak gerekir:

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 
İlgili konular