字符串缓冲区太小

时间:2010-04-01 07:21:31

标签: sql string plsql buffer

我选择了:

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 for 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

我仍然有相同的错误消息。但为什么呢?

3 个答案:

答案 0 :(得分:1)

您从查询中连接结果。此查询可能会导致很多行,因此最终您将耗尽字符串长度。也许串联不是去这里的方式。取决于你想要达到的目标。

答案 1 :(得分:0)

为什么呢?因为仍然使用wm_concat来表示accs = 3570 ...交换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

答案 2 :(得分: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

最后,为什么你认为只有{{1}}能够在你面前带来06502错误?我想你应该处理所有这些。