Скажем, у меня есть эта таблица:Concatenation слишком долго
ID|Col1|Col2|Col3
1|Text that has 4000 chars|Text2 that has 4000 chars|Text3 that has 4000 chars
2|Text4 that has 4000 chars|Text5 that has 4000 chars|Text6 that has 4000 chars
3|Text7 that has 4000 chars|Text8 that has 4000 chars|Text9 that has 4000 chars
Я использую listagg так:
SELECT id,
listagg(col1||col2||col3, ',') within group (order by id)
FROM table;
И я встретив ошибку:
ORA-01489: result of string concatenation is too long
При исследовании, Я узнал, что использование xmlagg может сделать трюк (link), но затем поняла, что реальная проблема кроется в конкатенации col1, col2 и col3, поскольку он ограничен только 4000 символами, поэтому xmlagg все равно вернет ту же ошибку.
Неужели кто-нибудь еще это понял? Или нет обходного пути для этого? (link)
Update:
Я обновил выборочные значения на столе только, чтобы быть ясно (для г-н Кумар понять), и мой ожидаемый результат должен быть что-то вроде:
ID | Agg
1 | Text that has 4000 charsText2 that has 4000 charsText3 that has 4000 chars
2 | Text4 that has 4000 charsText5 that has 4000 charsText6 that has 4000 chars
3 | Text7 that has 4000 charsText8 that has 4000 charsText9 that has 4000 chars
Что, по-видимому, не работает.
«*, но потом понял, что реальная проблема заключается в конкатенации col1 , col2 и col3, так как он ограничен только 4000 символами, поэтому xmlagg все равно вернет ту же ошибку. * «Нет. Вам нужно объединить вывод XMLAGG каждого столбца. Например, 'rtrim (xmlagg (xmlelement (e, col1, ','). Extract ('// text()') order by col1) .GetClobVal(), ',') || rtrim (xmlagg (xmlelement (xmlagg) e, col2, ','). extract ('// text()') order by col2) .GetClobVal(), ',') ' –
Нет. Это вернет: Текст на col1 row1, Текст на col1 row2, Текст на col1 row3 Текст на col2 row1, Текст на col2 row2, Текст на col2 row3 Текст на col2 row3 Текст на col3 row1, Текст на col3 row2, Текст на col3 row3 Вместо: Текст на col1 row1, Текст на col2 row1, Текст на col3 row1 Текст на col1 row2, Текст на col2 row2, Текст на col2 row2 Текст на col3 row2 Текст на col1 row3, Текст на col2 row3, Текст на col3 row3 – superigno
Я пробовал он и он вернул значения, которые я ожидал, чтобы они вернулись, как упоминалось в моем предыдущем комментарии – superigno