Maison >base de données >tutoriel mysql >Comment résoudre l'erreur Oracle ORA-01489 lors de la concaténation de chaînes dépassant la limite de 4 000 octets ?

Comment résoudre l'erreur Oracle ORA-01489 lors de la concaténation de chaînes dépassant la limite de 4 000 octets ?

DDD
DDDoriginal
2025-01-05 13:12:40449parcourir

How to Resolve Oracle ORA-01489 Error When Concatenating Strings Exceeding the 4000-Byte Limit?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn