ORA-01489 : Le résultat de la concaténation de chaînes est trop long
Lorsque vous essayez de concaténer des champs et d'utiliser la fonction LISTAGG dans une seule vue, vous pouvez rencontrer l'erreur « ORA-01489 : le résultat de la concaténation de chaînes est également long."
Cause :
Cette erreur indique que vous avez dépassé la limite SQL de 4000 octets, qui s'applique à la fonction LISTAGG.
Solution 1 : XMLAGG
Pour contourner cette limitation, vous pouvez utiliser XMLAGG fonction au lieu de LISTAGG. XMLAGG permet d'obtenir des résultats concaténés plus volumineux. Par exemple :
SELECT rtrim(xmlagg(XMLELEMENT(e,text,',').EXTRACT('//text()') .GetClobVal(),',') very_long_text FROM (SELECT to_char(to_date(level,'j'), 'jsp') text FROM dual CONNECT BY LEVEL < 250 )
Solution de contournement 2 : limiter la sortie concaténée
Si votre résultat concaténé est volumineux, vous pouvez le limiter à l'aide d'une combinaison de fonctions rtrim et substr. Par exemple :
SELECT rtrim(substr(text1 || '-' || text2, 1, 3999)) || ', ' FROM source
Solution de contournement 3 : concaténer les résultats XMLAGG
Si vous devez concaténer plusieurs colonnes contenant chacune 4 000 octets, concaténez la sortie XMLAGG de chaque colonne. . Par exemple :
SELECT ID, rtrim(xmlagg(XMLELEMENT(e,col1,',').EXTRACT('//text()') ).GetClobVal(), ',') || rtrim(xmlagg(XMLELEMENT(e,col2,',').EXTRACT('//text()') ).GetClobVal(), ',') AS very_long_text FROM DATA GROUP BY ID ORDER 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!