Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !? / 10 сообщений из 10, страница 1 из 1
19.10.2016, 12:04
    #39329678
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
т.е. вот такая конструкция при "rownum <= 310" уже не работает:

Код: sql
1.
2.
3.
select ( LISTAGG( to_clob( object_Name ), ',' ) WITHIN GROUP ( ORDER BY null) ) as list_as_str
  from dba_objects
 where rownum <= 310



может можно как-то через to_clob или ещё как либо извратиться... В конечном итоге нужна передача большой строки в String-переменную в Java !
...
Рейтинг: 0 / 0
19.10.2016, 12:04
    #39329679
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
*при "rownum <= 320"
...
Рейтинг: 0 / 0
19.10.2016, 12:31
    #39329709
arlx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
select xmlagg(xmlelement(e, object_name || ',')).extract('//text()').getclobval() list_as_str
from dba_objects
...
Рейтинг: 0 / 0
19.10.2016, 12:34
    #39329713
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
DBAshnikможет можно как-то через to_clob или ещё как либо извратитьсяМожет стоит заглядывать в доку?
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm The return data type is RAW if the measure column is RAW; otherwise the return value is VARCHAR2.
Есть минимум 4 способа
1. collect + UDF for concatenation
2. UDAG
Если плевать на скорость, лимиты и нельзя создавать никакие объекты
3. xmlagg
4. xquery + fn:string-join
19771585
...
Рейтинг: 0 / 0
19.10.2016, 12:44
    #39329725
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
dbms_photoshopDBAshnikможет можно как-то через to_clob или ещё как либо извратитьсяМожет стоит заглядывать в доку?
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm The return data type is RAW if the measure column is RAW; otherwise the return value is VARCHAR2.
Есть минимум 4 способа
1. collect + UDF for concatenation
2. UDAG
Если плевать на скорость, лимиты и нельзя создавать никакие объекты
3. xmlagg
4. xquery + fn:string-join
19771585

и как минимум 1 нормальный способ - вернуть яве коллекцию и пусть она сама клеит
...
Рейтинг: 0 / 0
19.10.2016, 12:55
    #39329743
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
Jonhsonи как минимум 1 нормальный способ - вернуть яве коллекцию и пусть она сама клеитКатегоричность высказывания при незнании подробностей, безусловно, говорит о высоком профессионализме.
...
Рейтинг: 0 / 0
19.10.2016, 13:15
    #39329773
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
dbms_photoshop,

равно как и xmlagg
...
Рейтинг: 0 / 0
19.10.2016, 13:46
    #39329822
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
Jonhson,

Ты по ссылке выше сходи, ознкомься.
Потом протестируй перфоманс, например, если надо вернуть несколько агрегатов хотя бы по 100Кб.
Потом, наверняка, ты сможешь продемонстрировать как я неправ.
...
Рейтинг: 0 / 0
19.10.2016, 15:20
    #39329934
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
arlxselect xmlagg(xmlelement(e, object_name || ',')).extract('//text()').getclobval() list_as_str
from dba_objects

огромнейшее спасибо!
...
Рейтинг: 0 / 0
19.10.2016, 15:45
    #39329961
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !?
единственный вопрос которые остаётся, как мне сделать нетормозную сортировку при применении этой конструкции в подзапросе? Пока наваял так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SEELCT
...
  Fieled1
  Fieled2
... 
,( select xmlagg(xmlelement(e, y.Document_Name || ',')).extract('//text()').getclobval() from ( select * from MOJA_SCHEMA.MOJA_TBLIZA order by id desc ) y where y.parentId = x.id ) as All_DocNames
...
from ....

но это грозит, очевидным full-scan-ом на MOJA_SCHEMA.MOJA_TBLIZA!

Если сую "order by" cразу после "where y.parentId = x.id" то огребаю ORA-00907 (missing right parenthesis)! :-(
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как можно было бы вернуть строку больше 4000 bytes сгенерённую LISTAGG !? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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