Oracle
 sql >> Base de données >  >> RDS >> Oracle

Concaténer des lignes dans CLOB

Comme de.hh.holger l'a déjà souligné, le LISTAGG AVEC CLOB ? AGREGATION DE CHAINE DEPASSANT 4000 CARACTERES AVEC XMLAGG résout effectivement ce problème.

J'ai élaboré un peu plus sur le sujet et cela devrait faire l'affaire dans le cas d'un message très long :

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