J'ai cette requête pour obtenir les données d'inventaire du produit, et il doit être fait dans une colonne donc j'utilise cette requête d'agrégation de liste (info supplémentaire: Select subquery that return multiple rows as string (one column) in table (Oracle SQL)). Mais dans certaines données obtenir des erreurs: le résultat de la concaténation de chaînes est trop long. Comment optimiser cette requête et résoudre cette erreur? (J'ai besoin du changement que seul dans cette sous-requête, parce que la requête est utilisée en fonction des autres) MerciSous-requête Listagg obtenir des erreurs: résultat de concaténation de chaîne est trop long
SELECT K.PRODUCT_NO, ..., (SELECT i.OPTIONS
FROM PRODUCT p , ...
LEFT JOIN (
SELECT ITM.PRODUCT_NO
,LISTAGG(NVL2(ITM.OPTION1, ITM.OPTION1 || (chr(13)||chr(10)), '') || NVL2(ITM.OPTION2, ITM.OPTION2 || (chr(13)||chr(10)), '') || NVL2(ITM.OPTION3, ITM.OPTION3 || (chr(13)||chr(10)), '') || NVL2(ITM.OPTION4, ITM.OPTION4 || (chr(13)||chr(10)), ''), ',') WITHIN
GROUP (
ORDER BY ITM.itm_no
) AS OPTIONS
FROM ITEM ITM
GROUP BY ITM.PRODUCT_NO
) i ON (p.PRODUCT_NO = i.PRODUCT_NO)
WHERE P.PRODUCT_NO = K.PRODUCT_NO) as OPTIONS,
(SELECT i.OPTIONS
FROM PRODUCT p
LEFT JOIN (
SELECT ITM.PRODUCT_NO
,LISTAGG(NVL2(QUANTITY, QUANTITY || (chr(13)||chr(10)), '0')) WITHIN
GROUP (
ORDER BY ITM.itm_no
) AS OPTIONS
FROM ITEM_INVENTORY ITM
GROUP BY ITM.PRODUCT_NO
) i ON (p.PRODUCT_NO = i.PRODUCT_NO)
WHERE P.PRODUCT_NO = K.PRODUCT_NO) as QTY
from PRODUCT K
Une option serait de passer à Oracle 12cR2 qui fournit un soutien en cas de débordement de manutention [en savoir plus] (https://oracle-base.com/ articles/12c/listagg-fonctions-améliorations-12cr2 # handling-overflow-errors). Ne pas être totalement facétieux: Oracle 11g n'est pas une version activement supportée. – APC
Le projet utilisant Oracle 11g et ne peut pas être mis à jour –
Je soupçonnais que c'était le cas, c'est pourquoi je l'ai posté comme un commentaire pas une réponse. – APC