Oracle ORA-01489 : Le résultat de la concaténation de chaînes dépasse la limite
Scénario :
Lors de la tentative pour créer une vue combinant la concaténation de champs et les fonctions LISTAGG, vous pouvez rencontrer l'erreur Oracle ORA-01489 : « Le résultat de la concaténation de chaînes est trop long. » Cette erreur se produit bien que la longueur réelle du champ concaténé soit inférieure à la limite indiquée de 837 octets.
Cause :
Cette erreur est trompeuse et survient en raison de la limite SQL de 4 000. octets, qui s'applique à LISTAGG. Par conséquent, la concaténation de plusieurs champs, chacun dépassant cette limite, peut déclencher l'erreur.
Solutions :
1. Fonction XMLAGG :
Pour contourner le problème, envisagez d'utiliser la fonction XMLAGG au lieu de LISTAGG. XMLAGG n'a pas la limite de 4 000 octets.
SELECT rtrim(xmlagg(XMLELEMENT(e,text,',').EXTRACT('//text()') ).GetClobVal(),',') AS very_long_text FROM ...
2. Concaténation des sorties XMLAGG :
Si vous devez concaténer plusieurs colonnes dépassant chacune 4 000 octets, concaténez plutôt la sortie XMLAGG de chaque colonne.
SELECT ID, rtrim(xmlagg(XMLELEMENT(e,col1,',').EXTRACT('//text()') ).GetClobVal(), ',') || rtrim(xmlagg(XMLELEMENT(e,col2,',').EXTRACT('//text()') ).GetClobVal(), ',') AS very_long_text FROM ... GROUP BY ID
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!