2010-04-01 8 views
0

je choisir:tampon de chaîne de caractères trop petit

select v.accs, v.currency,v.amount,v.drcr_ind, count(*) qua,wm_concat(ids) npx_IDS, 
wm_concat(px_dtct) npx_DTCT 
from table v 
group by accs, currency, amount, drcr_ind 

mais j'obtiens l'erreur ORA-06502: PL/SQL:: tampon de chaîne de caractères trop petit si je vais supprimer une chaîne, parce que parfois (quand v .accs = 3570) count (*) = 215 mais lorsque je tente de sauter à l'aide wm_concat pour v.accs = 3570 par exemple ainsi:

select v.accs, v.currency,v.amount,v.drcr_ind, count(*) qua,wm_concat(ids) npx_IDS, 
(case when v.accs = 3570 then wm_concat(px_dtct) else 'too many' end) npx_DTCT 
from table v 
group by accs, currency, amount, drcr_ind 

j'ai toujours le même message d'erreur. Mais pourquoi?

Répondre

0

Pourquoi? Parce que vous utilisez toujours wm_concat pour PAPC = 3570 ... échanger THEN et ELSE partie de votre expression CASE

select v.accs, v.currency,v.amount,v.drcr_ind, count(*) qua,wm_concat(ids) npx_IDS, 
     (case when v.accs = 3570 then 'too many' else wm_concat(px_dtct) end) npx_DTCT 
    from table v group by accs, currency, amount, drcr_ind 
+0

la même situation – Ruslan

+0

résultat le même – Ruslan

0

D'abord, comme on l'a déjà dit, vous devez passer then et else clauses dans votre requête. Ensuite, je suppose que vous devriez également traiter de manière similaire votre deuxième wm_concat, celui qui fonctionne avec ids.

select v.accs, v.currency,v.amount,v.drcr_ind, count(*) qua, 
(case when v.accs = 3570 then 'too many' else wm_concat(ids) end) npx_IDS, 
(case when v.accs = 3570 then 'too many' else wm_concat(px_dtct) end) npx_DTCT 
from table v 
group by accs, currency, amount, drcr_ind 

Et, enfin, pourquoi pensez-vous que seul v.accs = 3570 est en mesure d'apporter 06502 erreur devant vous? Je suppose que vous devriez les gérer tous.

1

Vous concaténez les résultats d'une requête. Cette requête peut générer beaucoup de lignes et vous risquez de manquer de longueur de chaîne. Peut-être que la concaténation n'est pas le moyen d'aller ici. Cela dépend de ce que vous voulez réaliser, bien sûr.

Questions connexes