我选择了:
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
我仍然有相同的错误消息。但为什么呢?
答案 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)
首先,正如已经告诉过的那样,您必须在查询中切换then
和else
子句。
然后,我猜你也应该同样处理你的第二个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错误?我想你应该处理所有这些。