2010-04-01 117 views
0

我有選擇:字符串緩衝區太小

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 

,但我得到的錯誤ORA-06502:PL/SQL:字符串緩衝區太小,如果我要刪除一個字符串,因爲有時當v( .accs = 3570)COUNT(*)= 215 但是當我嘗試使用wm_concat爲v.accs = 3570例如這種方式跳過:

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 

我仍然有相同的錯誤消息。但爲什麼?

回答

0

爲什麼?因爲你仍然使用的ACCS = 3570 wm_concat ...交換你的CASE表達式的THEN和ELSE部分

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

相同情況 – Ruslan 2010-04-01 07:37:38

+0

結果相同 – Ruslan 2010-04-01 07:39:27

0

首先,因爲它已經被告知,必須切換thenelse子句在您的查詢。 然後,我想你也應該類似地處理你的第二個wm_concat,與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 

最後,爲什麼你認爲只有v.accs = 3570能夠帶來06502錯誤在你面前?我想你應該處理所有這些問題。

1

您連接查詢的結果。這個查詢可能導致很多行,所以最終你會用完字符串長度。也許連接不是這裏的方式。取決於你想要達到的目標。