powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / listagg ограничения числа конкатинируемых строк
8 сообщений из 8, страница 1 из 1
listagg ограничения числа конкатинируемых строк
    #40079286
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, скажите как можно избежать переполнения, делаю так, но может есть способ полегче?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
WITH sample_data AS (SELECT 1 ID, 'a' val FROM dual UNION ALL
                     SELECT 1 ID, 'b' val FROM dual UNION ALL
                     SELECT 1 ID, 'c' val FROM dual UNION ALL
                     SELECT 2 ID, 'd' val FROM dual UNION ALL
                     SELECT 2 ID, 'e' val FROM dual UNION ALL
                     SELECT 2 ID, 'f' val FROM dual UNION ALL
                     SELECT 2 ID, 'g' val FROM dual UNION ALL
                     SELECT 3 ID, 'h' val FROM dual UNION ALL
                     SELECT 3 ID, 'i' val FROM dual UNION ALL
                     SELECT 3 ID, 'h' val FROM dual UNION ALL
                     SELECT 3 ID, 'j' val FROM dual UNION ALL
                     SELECT 3 ID, 'k' val FROM dual UNION ALL
                     SELECT 4 ID, 'l' val FROM dual UNION ALL
                     SELECT 4 ID, 'm' val FROM dual UNION ALL
                     SELECT 5 ID, 'n' val FROM dual)
SELECT ID,
       listagg(CASE WHEN rn <= 3 THEN val END, ',') WITHIN GROUP (ORDER BY val) vals
FROM   (SELECT ID,
               val,
               row_number() OVER (PARTITION BY ID ORDER BY val) rn
        FROM   sample_data)
GROUP BY ID;
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079305
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Какая версия Oracle? В последних версиях есть overflow_clause.
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079344
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad, 11 версия
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079346
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
может есть способ полегче?
Для 11-ой версии есть способ посложнее: считаешь аналитикой нарастающую сумму длин строк и перестаешь агрегировать аккурат до переполнения. Либо забиыть про переполнение и получать clob через xmlagg.
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079351
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
Добрый день, скажите как можно избежать переполнения


Избежать обрезанием или получить весь результат? Если получить весь результат, то

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
WITH sample_data AS (SELECT 1 ID, 'a' val FROM dual UNION ALL
                     SELECT 1 ID, 'b' val FROM dual UNION ALL
                     SELECT 1 ID, 'c' val FROM dual UNION ALL
                     SELECT 2 ID, 'd' val FROM dual UNION ALL
                     SELECT 2 ID, 'e' val FROM dual UNION ALL
                     SELECT 2 ID, 'f' val FROM dual UNION ALL
                     SELECT 2 ID, 'g' val FROM dual UNION ALL
                     SELECT 3 ID, 'h' val FROM dual UNION ALL
                     SELECT 3 ID, 'i' val FROM dual UNION ALL
                     SELECT 3 ID, 'h' val FROM dual UNION ALL
                     SELECT 3 ID, 'j' val FROM dual UNION ALL
                     SELECT 3 ID, 'k' val FROM dual UNION ALL
                     SELECT 4 ID, 'l' val FROM dual UNION ALL
                     SELECT 4 ID, 'm' val FROM dual UNION ALL
                     SELECT 5 ID, 'n' val FROM dual)
select  substr(xmlcast(xmlagg(xmlelement(e,',' || val) order by val) as clob),2) vals
  from  sample_data
  group by id
/

VALS
--------------------------------------------------------------------------------
a,b,c
d,e,f,g
h,h,i,j,k
l,m
n

SQL>



SY.
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079601
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, а обрезать как лучше?
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079616
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
а обрезать как лучше?


По 4000 байт или по элементам влезающим в 4000 байт?

По элементам:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (
           select  id,
                   val,
                   sum(lengthb(val || ',')) over(partition by id order by val rows between unbounded preceding and current row) - 1 lb
             from  sample_data
          )
select  listagg(val,',') within group(order by val) limit_by_val
  from  t
  where lb <= 4000
  group by id
/



SY.
...
Рейтинг: 0 / 0
listagg ограничения числа конкатинируемых строк
    #40079639
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше вообще не обрезать: получать на клиенте как есть и склеивать там. В Дельфи строки
подлиннее чем у Оракла будут...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / listagg ограничения числа конкатинируемых строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]