powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Результат SELECT-а в одну строку
45 сообщений из 45, показаны все 2 страниц
Результат SELECT-а в одну строку
    #32955195
rgarif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знает ли кто нить, какой нить фокус чтобы:
SELECT ID FROM MY_TAB
все ID вывел одной строкой
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955201
_eater
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Элементарно Ватсон
Пишешь sql функцию которая конкатенирует результат курсора в одну строку и возвращает его в сиквел стейтмент

И никаких фокусов
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955204
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также еще можно поискать по stragg (начиная с девятки)
Тынц
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955211
rgarif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хе :)
а без функции?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955213
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgarifхе :)
а без функции?
Совсем без функции - никак.
А с групповой - см. мой предыдущий пост.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955316
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgarifа без функции?Но через ж...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select *
  from
  ( select ltrim(sys_connect_by_path(id, ','), ',') as "IDs"
      from
      ( select id, lag(id) over (order by id) as prev_id
          from MY_TAB
      )
      start with prev_id is null
      connect by prev_id = prior id
      order by  1  desc
  )
  where rownum =  1 
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955465
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select *
  from
  ( select ltrim(sys_connect_by_path(id, ','), ',') as "IDs"
      from
      ( select id, lag(id) over (order by id) as prev_id
          from MY_TAB
      )
      start with prev_id is null
      connect by prev_id = prior id
      order by  1  desc
  )
  where rownum =  1 


а как прспособить к более сложному случаю:
Код: plaintext
1.
2.
3.
4.
5.
name  value
------ ------
name1 value1
name1 value2
name2 value1

должно получиться:
Код: plaintext
1.
2.
3.
4.
name  val
----- -------------
name1 value1,value2
name2 value1
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #32955628
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анонима как прспособить к более сложному случаю:
Код: plaintext
1.
2.
3.
4.
name  val
----- -------------
name1 value1,value2
name2 value1
Для головы на плечах - несложное занятие :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select acquirer_operation_list_id, max("IDs") as "IDs"
  from
  ( select acquirer_operation_list_id, ltrim(sys_connect_by_path(id, ','), ',') as "IDs"
      from
      ( select acquirer_operation_list_id, id, 
            lag(id) over (partition by acquirer_operation_list_id order by id) as prev_id
          from op_operation
      )
      start with prev_id is null
      connect by prev_id = prior id and acquirer_operation_list_id = prior acquirer_operation_list_id
  )
  group by acquirer_operation_list_id
Столбцы сам поменяй :)
На строках при NLS_SORT<>BINARY не исключаю нехороших нюансов.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Результат SELECT-а в одну строку
    #33624117
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для коллекции:
Код: plaintext
1.
2.
3.
4.
select 
sys_xmlagg(xmlelement(col, OBJECT_NAME||',')).extract('/ROWSET/COL/text()').getclobval()  
from all_objects 
where rownum <  10000 ;
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #33624141
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аноним
а как прспособить к более сложному случаю:
Код: plaintext
1.
2.
3.
4.
5.
name  value
------ ------
name1 value1
name1 value2
name2 value1

должно получиться:
Код: plaintext
1.
2.
3.
4.
name  val
----- -------------
name1 value1,value2
name2 value1


Код: plaintext
1.
2.
3.
select 
sys_xmlagg(xmlelement(col, VALUE||',')).extract('/ROWSET/COL/text()').getclobval()  
from TABLE_NAME
group by NAME;
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #33736527
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, приведённый выше пример с sys_xmlagg пересортирует строки.

Есть ли возможность склеить строки предварительно отсортировав их по полю T$LFD2 в приведённом ниже примере:?
Код: plaintext
1.
2.
3.
4.
5.
SELECT  
sys_xmlagg(xmlelement(col, trim(T$TEXT) || chr( 13 ))).extract('/ROWSET/COL/text()').getclobval()  "TEXT"
 from  tucarc041100
 where
 and  T$INVN=:KEY2
group by T$INVN,T$KENN,T$LFD1

РS: подзапрс с сортировкой не помогает
РРS: оракул 9.1
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #34361309
Reves
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Млин неужель никто не добил за год?
Пришлось самому ковыряться 1,5 часа, т.к. я с XML никогда дело не имел

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Select 
rtrim(to_char(
         sys_xmlagg(
                      xmlelement( "QWER", xmlagg( xmlelement("COL", name_par || ',')
                                                            Order by name_par
                                                            )
                                     )
                    ).extract('ROWSET/QWER/COL/text()').getclobval()
              ),',') TEXT
From ANY_TABLE 
Group by name_par

Oracle 9i
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #34361339
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RevesМлин неужель никто не добил за год?Вы серьезно? :)

RevesПришлось самому ковыряться 1,5 часа, т.к. я с XML никогда дело не имелНу тоже в общем неполохо :) Познакомиться с новым синтаксисом никогда не вредно :) Можно ещё попробовать найти автора и подарить ему результат :)
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #34361388
Reves
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JannnyВы серьезно? :)
Эт, я чет поторопился - Order by не работает в данном контексте, но сортируется всё правильно. Надо ишо год подумать :)

JannnyМожно ещё попробовать найти автора и подарить ему результат :)
Я думаю он уже решил свою проблему.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Результат SELECT-а в одну строку
    #35655242
bde_dn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgarif,

нужно иметь одну функцию для таких случаев

create or replace function c2s(c sys_refcursor,dlm varchar2:=',') return varchar2 is
res varchar2(4000);
rs varchar2(2000);
begin
-- open c;
loop
fetch c into rs;
exit when c%notfound;
res:=res||dlm||rs;
end loop;
close c;
return substr(res,length(dlm)+1);
end c2s;

select c2s(cursor(select to_char(id) from my_table /*oder,group,...*/)) from dual;

В SQL больше 4000 не дает, если надо больше в функции res clob.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #35655748
bde_dnrgarif,

нужно иметь одну функцию для таких случаевПривет, гробокопатель!!!
Ты и в правду думаешь, что rgarif три года сидит и ждет от тебя ответа???
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #35702326
Katya_83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зато я получила ответ:)
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #35702553
Katya_83зато я получила ответ:)Для этого вполне достаточным было прочитать местный ТОП популярных вопросов ;)
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36010931
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ales ProtivАноним
а как прспособить к более сложному случаю:
Код: plaintext
1.
2.
3.
4.
5.
name  value
------ ------
name1 value1
name1 value2
name2 value1

должно получиться:
Код: plaintext
1.
2.
3.
4.
name  val
----- -------------
name1 value1,value2
name2 value1


Код: plaintext
1.
2.
3.
select 
sys_xmlagg(xmlelement(col, VALUE||',')).extract('/ROWSET/COL/text()').getclobval()  
from TABLE_NAME
group by NAME;


подскажите, как для данного примера сделать сотрировку по VALUE
внутри CLOB
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36010958
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxкак для данного примера сделать сотрировку по VALUE Разуй глаза :)
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36011089
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicnxxкак для данного примера сделать сотрировку по VALUE Разуй глаза :)


авторSQL> select o.owner
2 ,sys_xmlagg(xmlelement( "QWER", xmlagg( xmlelement("COL", o.object_name || ',') Order by o.obj
ect_name
3 )
4 )
5 ).extract('ROWSET/QWER/COL/text()').getclobval()
6 from all_objects o
7 where rownum < 10000
8 group by o.owner
9 /
select o.owner
*
ERROR at line 1:
ORA-00937: not a single-group group function



что-то не работает
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36012602
Фотография Andrei Fomichev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxx
что-то не работает
Код: plaintext
1.
2.
3.
4.
5.
select owner
  ,sys_xmlagg(xmlelement( "QWER", x) ).extract('ROWSET/QWER/COL/text()').getclobval() s
from 
  (select o.owner, xmlagg( xmlelement("COL", o.object_name || ',') order by o.object_name) x
   from all_objects o where rownum <  10000  group by o.owner ) a
group by owner
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Результат SELECT-а в одну строку
    #36854412
evs-ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть есть три таблицы, TABLE1, TABLE2, TABLE3.
USERS
ID NUMBER(20)
NAME VARCHAR2(64)

RIGHTS
ID NUMBER(20)
USER_ID NUMBER(20)
GROUP_ID NUMBER(20)

GROUPS
ID (NUMBER(20)
NAME VARCHAR(20)

Как сделать такой запрос
Код: plaintext
1.
2.
3.
SELECT U.NAME USERNAME, G.NAME GROUPNAME
FROM USERS U, RIGHTS R, GROUPS G
WHERE R.USER_ID=U.ID AND R.GROUP_ID=G.ID

чтобы значения поля GROUPNAME там, где USERNAME совпадает писались не в несколько строк, а через запятую?
чтобы названия групп выводились в одну строку через запятую?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36854443
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
SELECT U.NAME USERNAME, RTRIM((XMLAGG(XMLELEMENT(e,G.NAME,',').EXTRACT('//text()')),',') GROUPNAME
FROM USERS U, RIGHTS R, GROUPS G
WHERE R.USER_ID=U.ID AND R.GROUP_ID=G.ID
GROUP BY U.NAME
/

For example:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select  job,
   2           rtrim(xmlagg(xmlelement(e,ename,',').extract('//text()')),',') ename_list
   3     from  emp
   4     group by job
   5   /

JOB       ENAME_LIST
--------- ----------------------------------------
ANALYST   SCOTT,FORD
CLERK     SMITH,JAMES,ADAMS,MILLER
MANAGER   JONES,CLARK,BLAKE
PRESIDENT KING
SALESMAN  ALLEN,WARD,TURNER,MARTIN

SQL> 

SY.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36854886
Zloxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
Для верности еще результат завернуть бы в dbms_xmlgen.convert(<expr>,1), чтобы не получать всякие lt,gt,amp
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #36855309
evs-ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А без сортировки такое можно сделать?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Результат SELECT-а в одну строку
    #38136015
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так как топик в FAQе, добавлю:

начиная с версии 11.2 субд появилась прекрасная родная sql-функция, которая позволяет это делать LISTAGG :

Код: plsql
1.
2.
3.
4.
SELECT LISTAGG(last_name, '; ') WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list",
    MIN(hire_date) "Earliest"
    FROM employees
    WHERE department_id = 30;
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136564
abtop_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
evs-ru,

LISTAGG ?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136568
abtop_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shredder2003,

блин, не посмотрел на вторую страницу )
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136942
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shredder2003прекраснаяс одного боку прерасная. а с другого пресиняя - не поддерживет клоб и distinct
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136972
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Shredder2003прекраснаяс одного боку прерасная. а с другого пресиняя - не поддерживет клоб и distinctорацл любит такое :)

создаст новую прекрасную фишку со многими пресиними ограничениями
и потом пару версий выргебает

пример:
добавили в 8 версии connect by
и только в 9-ой order sibling
и только в ещё более старших sys_connect_by_root и nocycle
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136982
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-с одного боку прерасная. а с другого пресиняя - не поддерживет клоб и distinct

Да еще и ORDER BY требует, да и сортирует сволочь добавляя LISTAGG выражение к ORDER BY:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> select listagg(ename,',') within group(order by 1)
  2  from emp;

LISTAGG(ENAME,',')WITHINGROUP(ORDERBY1)
--------------------------------------------------------------------------------------
ADAMS,ALLEN,BLAKE,CLARK,FORD,JAMES,JONES,KING,MARTIN,MILLER,SCOTT,SMITH,TURNER,WARD

SQL> select listagg(ename,',') within group(order by null)
  2  from emp;

LISTAGG(ENAME,',')WITHINGROUP(ORDERBYNULL)
--------------------------------------------------------------------------------------
ADAMS,ALLEN,BLAKE,CLARK,FORD,JAMES,JONES,KING,MARTIN,MILLER,SCOTT,SMITH,TURNER,WARD

SQL> select listagg(ename,',') within group(order by deptno)
  2  from emp;

LISTAGG(ENAME,',')WITHINGROUP(ORDERBYDEPTNO)
--------------------------------------------------------------------------------------
CLARK,KING,MILLER,ADAMS,FORD,JONES,SCOTT,SMITH,ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

SQL> 



SY.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136985
zhal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYда и сортирует сволочь добавляя LISTAGG выражение к ORDER BY А вот это уже безобразие. Никто ж не просил )
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38136990
Археолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymxдобавили в 8 версии connect by
и только в 9-ой order sibling
и только в ещё более старших sys_connect_by_root и nocycleТы не в теме.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38139089
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как этот listagg по скорости? Потому как в 9-ке в pl-SQL обычное склеивание в курсоре раза в два быстрее, чем UDAF
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38139141
andreymxА как этот listagg по скорости? Потому как в 9-ке в pl-SQL обычное склеивание в курсоре раза в два быстрее, чем UDAFЛишь бы побольше чего-нибудь понаписать, а пусть-бы-и-глупостей-лишь-бы-постов? Не стыдно?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38139155
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
палеонтологandreymxА как этот listagg по скорости? Потому как в 9-ке в pl-SQL обычное склеивание в курсоре раза в два быстрее, чем UDAFЛишь бы побольше чего-нибудь понаписать, а пусть-бы-и-глупостей-лишь-бы-постов? Не стыдно?и чего ты предлагаешь мне стыдиться? Вопроса о производительности функции?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38139180
andreymxи чего ты предлагаешь мне стыдиться?Абсолютным невладением вопросом версионнозависимости фич иерархических запросов.

А касательно listagg, какая тебе, нафиг, разница с твоей-то девяткой?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38139199
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логопалеонт,

ну, тогда скажи, в какмх версиях появились sibling и sys_connect_by_root.
Буду рад просветиться
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38139215
andreymxну, тогда скажи, в какмх версиях появились sibling и sys_connect_by_root.
Буду рад просветитьсяНеужели в доке забанили?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Результат SELECT-а в одну строку
    #38975652
evgenius_b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
2.
3.
4.
5.
SELECT U.NAME USERNAME, RTRIM((XMLAGG(XMLELEMENT(e,G.NAME,',').EXTRACT('//text()')),',') GROUPNAME
FROM USERS U, RIGHTS R, GROUPS G
WHERE R.USER_ID=U.ID AND R.GROUP_ID=G.ID
GROUP BY U.NAME
/



For example:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select  job,
  2          rtrim(xmlagg(xmlelement(e,ename,',').extract('//text()')),',') ename_list
  3    from  emp
  4    group by job
  5  /

JOB       ENAME_LIST
--------- ----------------------------------------
ANALYST   SCOTT,FORD
CLERK     SMITH,JAMES,ADAMS,MILLER
MANAGER   JONES,CLARK,BLAKE
PRESIDENT KING
SALESMAN  ALLEN,WARD,TURNER,MARTIN

SQL> 



SY.


Я дико извиняюсь, но
Код: plsql
1.
2.
3.
4.
select  job,
               rtrim(xmlagg(xmlelement(e,ename,',').extract('//text()')[color=green] order by ename[/color]),',') ename_list
               from  emp
               group by job


в случае, если хотим выводить значения по порядку следования. Правильно?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #38975691
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgenius_b,

Уже давно существует еще пару-тройку других решений через XML (без XMLAGG), но тебе принципиально было зацепится за медленный XMLAGG, который на длинных строках легко падает с
Код: plsql
1.
ORA-22813: operand value exceeds system limits

и вообще может быть рассмотрен скорее как баловство даже для работы с XML.

evgenius_bЯ дико извиняюсьЭту тему у тебя хватило мозгов откопать а в доку заглянуть нет?

PS. После таких подъемов тем начинаешь поддерживать, что гробокопательство полностью запрещено на community.oracle.com.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #39118476
arCHi_1887
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
Код: plsql
1.
2.
3.
4.
5.
SELECT U.NAME USERNAME, RTRIM((XMLAGG(XMLELEMENT(e,G.NAME,',').EXTRACT('//text()')),',') GROUPNAME
FROM USERS U, RIGHTS R, GROUPS G
WHERE R.USER_ID=U.ID AND R.GROUP_ID=G.ID
GROUP BY U.NAME
/



SY.

Как для такого примера получить distinct g.name в результирующем списке?
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #39324944
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopУже давно существует еще пару-тройку других решений через XML (без XMLAGG), но тебе принципиально было зацепится за медленный XMLAGG, который на длинных строках легко падает с
Код: plsql
1.
ORA-22813: operand value exceeds system limits

Немного раскрою тему.

Если возникла необходимость клеить клобы и вместо UDAG хочется использовать collect + UDF для склейки элементов коллекции, то может возникнуть неожиданность
11.2.0.1, 12.1.0.2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or replace type clobs as table of clob
/

Type created.

select cast(collect(column_value) as clobs) x from table(clobs(to_clob('123'),to_clob('qwerty')));
select cast(collect(column_value) as clobs) x from table(clobs(to_clob('123'),to_clob('qwerty')))
            *
ERROR at line 1:
ORA-22814: attribute or element value is larger than specified in type


select cast(multiset(select column_value from table(clobs(to_clob('123'),to_clob('qwerty')))) as clobs) x from dual;

X
--------------------------------------------------------------------------------
CLOBS('123', 'qwerty')

С varchar2 а не клоб таких проблем не возникает.

Если клеить XMLAGG, то может перестать работать из-за лимитов
11.2.0.1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select length(xmlagg(xmlelement("tmp", vals)).extract('//tmp/text()').getclobval()) l
  from (select 'table_name' table_name,
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 1978, '1')) vals
          from dual
        connect by level <= 2)
 group by table_name;

         L
----------
     59956


12.1.0.2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select length(xmlagg(xmlelement("tmp", vals)).extract('//tmp/text()').getclobval()) l
  from (select 'table_name' table_name,
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 1978, '1')) vals
          from dual
        connect by level <= 2)
 group by table_name;
select length(xmlagg(xmlelement("tmp", vals)).extract('//tmp/text()').getclobval()) l
*
ERROR at line 1:
ORA-22813: operand value exceeds system limits

Теперь меняем имя тега (для 1977 и без этого все хорошо)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select length(xmlagg(xmlelement(x, vals)).extract('//X/text()').getclobval()) l
  from (select 'table_name' table_name,
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 4000, '1')) ||
               to_clob(lpad('1', 1978, '1')) vals
          from dual
        connect by level <= 2)
 group by table_name;

         L
----------
     59956


Если использовать xmlquery + string-join
11.2.0.1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select length(xmlquery('fn:string-join(//VAL, "")' passing xmltype(cursor(
                        select to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 4000, '1')) ||
                               to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 4000, '1')) ||
                               to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 4000, '1')) ||
                               to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 1978, '1')) val
                          from dual
                        connect by level <= 2)) returning content).getclobval()) l
  from dual;
select length(xmlquery('fn:string-join(//VAL, "")' passing xmltype(cursor(
*
ERROR at line 1:
ORA-01706: user function result value was too large


12.1.0.2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select length(xmlquery('fn:string-join(//VAL, "")' passing xmltype(cursor(
                        select to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 4000, '1')) ||
                               to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 4000, '1')) ||
                               to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 4000, '1')) ||
                               to_clob(lpad('1', 4000, '1')) || to_clob(lpad('1', 1978, '1')) val
                          from dual
                        connect by level <= 2)) returning content).getclobval()) l
  from dual;

         L
----------
     59956

В общем 1:1 по версиям.
...
Рейтинг: 0 / 0
Результат SELECT-а в одну строку
    #39324947
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЕсли клеить XMLAGG, то может перестать работать из-за лимитов
Не совсем.
Попробуйте убрать group by - это реально забавно.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Результат SELECT-а в одну строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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