Какой аналог для разделителя в Oracle? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть SQL-запрос, корректно работающий в H2 DB:

update task_display td
set comments = (
    select group_concat(co.text separator '\n\n')
    from comments co
             left join ticket ti on co.ticket_id = ti.id
    where td.ticket_id = ti.id
    );

Как мы видим, я использую separator для разделения текста. Какой аналог этого запроса для базы данных Oracle?

UPD: при использовании скрипта

update task_display td
    set comments = (select listagg(co.text, '\n\n') within group (order by co.id)
                    from comments co
                    where td.ticket_id = co.ticket_id
                   );

я получаю эту ошибку:

ORA-01489: result of string concatenation is too long
01489. 00000 -  "result of string concatenation is too long"
*Cause:    String concatenation result is more than the maximum size.
*Action:   Make sure that the result is less than the maximum size.

1 Ответ

3 голосов
/ 06 ноября 2019

Предполагая, что ваши строки достаточно велики для хранения значений:

update task_display td
    set comments = (select listagg(co.text, '\n\n') within group (order by co.id)
                    from comments co
                    where td.ticket_id = co.ticket_id
                   );

Я не вижу необходимости join до ticket в любой базе данных.

The order by co.id потому что listagg() требует заказа. Я предполагаю, что есть столбец с таким именем, но можно использовать любой столбец.

...