sql >> Base de Datos >  >> RDS >> Oracle

Concatenar filas en CLOB

Como ya señaló de.hh.holger, ¿LISTAGG CON CLOB? AGREGACIÓN DE CADENA QUE SUPERA LOS 4000 CARACTERES CON XMLAGG de hecho resuelve este problema.

He elaborado un poco más sobre el tema y esto debería funcionar en caso de un mensaje de cadena realmente largo:

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