XMLAGG avec RTRIM problème
Actuellement, j'ai la requête suivante:
SELECT
CASE
WHEN ('[Param.3]' = 'SELECTED')
THEN (SELECT RTRIM(XMLELEMENT("Rowset", XMLAGG(RW.R ORDER BY RW."ID")), ' ' ) AS Orders
FROM TMTABLE UL, XMLTABLE('Rowsets/Rowset/Row' PASSING UL.TEXT COLUMNS "ID" NUMBER(19) PATH 'ID', R xmltype path '.') AS RW
WHERE ID BETWEEN '[Param.1]' and '[Param.2]')
WHEN ('[Param.3]' = 'ALL' )
THEN (SELECT RTRIM(XMLELEMENT("Rowset", XMLAGG(RW.R ORDER BY RW."ID")) , ' ' ) AS Orders
FROM TMTABLE UL, XMLTABLE('Rowsets/Rowset/Row' PASSING UL.TEXT COLUMNS "ID" NUMBER(19) PATH 'ID', R xmltype path '.') AS RW)
END AS Orders
FROM
dual
Cette requête fonctionne bien si il y a un petit nombre de XML lignes pour être fusionnées en une seule ligne avec XML APA. Mais si le nombre de XML Lignes fusionnées sont plus élevés, cette requête est de lancer le message d'erreur suivant:
ORA-19011: chaîne de Caractères tampon trop petit
Quels changements dois-je appliquer pour faire ce travail?
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter
.getClobVal()
à votre XMLType conséquent, avant de le RTRIM.XMLAGG fonctionne très bien avec de grandes quantités de données. Et le TRIM fonctionne très bien avec CLOBs. Mais quand vous les mettez ensemble, Oracle tente de convertir la XMLType dans un VARCHAR2 au lieu d'un CLOB.
Exemple:
.getClobVal()
après la dernière fonction XML, et pas seulement la dernière XMLAGG. Essayez:XMLELEMENT("Rowset" , XMLAGG( RW.R ORDER BY RW."ID"), ' ' ).getClobVal()
.Vous devez ajouter
getClobVal()
et doivent égalementrtrim()
qu'il sera de retour délimiteur dans la fin des résultats.