Как видно из большинства ответов, LISTAGG
является очевидным вариантом. Однако один раздражающий аспект с LISTAGG
заключается в том, что если общая длина конкатенированной строки превышает 4000 символов (предел для VARCHAR2
в SQL), то возникает ошибка ниже, которую трудно управлять в версиях Oracle до 12.1
ORA-01489: результат конкатенации строки слишком длинный
blockquote>Новая функция, добавленная в 12cR2, является предложением
ON OVERFLOW
вLISTAGG
. Запрос, включающий это предложение, будет выглядеть так:SELECT pid, LISTAGG(Desc, ' ' on overflow truncate) WITHIN GROUP (ORDER BY seq) AS desc FROM B GROUP BY pid;
Вышеуказанное ограничивает вывод до 4000 символов, но не будет вызывать ошибку
ORA-01489
.Это некоторые из дополнительные опции
ON OVERFLOW
:
ON OVERFLOW TRUNCATE 'Contd..'
: в конце строки отобразится'Contd..'
(по умолчанию...
)ON OVERFLOW TRUNCATE ''
: Это будет отображать 4000 символов без какой-либо завершающей строки.ON OVERFLOW TRUNCATE WITH COUNT
: отобразится общее количество символов в конце после завершающих символов. Например: -...(5512)
'ON OVERFLOW ERROR
: Если вы ожидаете, чтоLISTAGG
потерпит неудачу с ошибкойORA-01489
(которая по умолчанию по умолчанию).