powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
25 сообщений из 71, страница 1 из 3
List?
    #39814330
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда уже на Oracle будет нормальная аггрегатная функция List , как в Sybase
...
Рейтинг: 0 / 0
List?
    #39814361
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin,

"Доку не читай, сразу на форум пости"(с)

Давно уже есть такая функция.
...
Рейтинг: 0 / 0
List?
    #39814362
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin,

либо указывайте конкретно - чем LIST в сайбесе лучше ораклового LISTAGGA-а и чего лично вам не хватает в LISTAGG-е
...
Рейтинг: 0 / 0
List?
    #39814378
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinКогда уже на Oracle будет нормальная аггрегатная функция List , как в SybaseШёл бы ты, бездарь, на откуда пришёл.
...
Рейтинг: 0 / 0
List?
    #39814392
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справедливости ради стоит отметить, что приведенная топикстартером функция вражеской датабазы возвращает LONG VARCHAR , что несколько превышает максимальный размер возращаемого listagg ораколового varchar2.
Но, как все мы знаем, вышесказанное мною не отменяет возможности получить список элементов в строковом виде условно неограниченного размера средствами Oracle без PL/SQL и listagg.
...
Рейтинг: 0 / 0
List?
    #39814398
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна и чего лично вам не хватает в LISTAGG-е

unique


ps
в новых версиях з WITHIN улучшили

если есть сортировка, то добавить уникальность не так уж и сложно
.....
stax
...
Рейтинг: 0 / 0
List?
    #39814414
AserYZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadСправедливости ради стоит отметить, что приведенная топикстартером функция вражеской датабазы возвращает LONG VARCHAR , что несколько превышает максимальный размер возращаемого listagg ораколового varchar2.
Но, как все мы знаем, вышесказанное мною не отменяет возможности получить список элементов в строковом виде условно неограниченного размера средствами Oracle без PL/SQL и listagg.

В соседней сходной ветке уже выяснили, что после 12 версии Ваш аргумент не аргумент и Оракл удлинил свой варчар2 до 32к что вполне хватает для разного вида рукожопства членов кружка CLOBофобии. Это конечно не 512 терабайт, но то ли ещё будет.
...
Рейтинг: 0 / 0
List?
    #39814425
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AserYZВаш аргумент не аргумент и Оракл удлинил свой варчар2 до 32к что вполне хватает для разного вида рукожопства членов кружка CLOBофобии.Замена фобии на более другую фобию не есть аргумент против аргумента.
...
Рейтинг: 0 / 0
List?
    #39814431
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AserYZ,

Отбросив вопрос о целесообразности склеивания строк в сторону, 32к - это больше, чем 4к, всего в 8 раз. До 512 терабайт еще сколько-то порядков, что не делает listagg аналогом функции list. О чем я, силу своей дотошности, не смог не заметить.
...
Рейтинг: 0 / 0
List?
    #39814457
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxЩукина Анна и чего лично вам не хватает в LISTAGG-еuniqueunique формально нет в синтаксисе
Код: plaintext
1.
LISTAGG( [ ALL ] [ DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
  [ WITHIN GROUP ] (order_by_clause) [OVER query_partition_clause]
но оно работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(unique to_char(mod(level, 3)), ',') within group (order by null) v193
from dual
connect by level<=10;

V193   
-----
0,1,2


AmKadО чем я, силу своей дотошности, не смог не заметить.Тогда нужно было дотошнить до более полного сравнения:
- типы аргумента,
- размер результата,
- ограничения по сортировке,
- параметры overflow,
- over().
...
Рейтинг: 0 / 0
List?
    #39814461
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Тогда нужно было дотошнить до более полного сравнения:Я сегодня скудно позавтракал, поэтому содержимого желудка хватило только на сравнение размеров результата. А про overflow вообще только что узнал.
...
Рейтинг: 0 / 0
List?
    #39814493
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxпропущено...
uniqueunique формально нет в синтаксисе
Код: plaintext
1.
LISTAGG( [ ALL ] [ DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
  [ WITHIN GROUP ] (order_by_clause) [OVER query_partition_clause]
но оно работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(unique to_char(mod(level, 3)), ',') within group (order by null) v193
from dual
connect by level<=10;

V193   
-----
0,1,2




мододцы (доку не успели поправить)


в Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0
еще не работает
Код: plsql
1.
2.
3.
4.
5.
select listagg(unique job, ',') within group (order by null)
from emp 
group by deptnoORA-30482: DISTINCT option not allowed for this function

ORA-30482: DISTINCT option not allowed for this function



ps
по диаграме сортировка обязательна но без нее работает
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(job, ',') --within group (order by null)
from emp 
group by deptno

MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN,CLERK
PRESIDENT,MANAGER,CLERK
MANAGER,ANALYST,ANALYST,CLERK,CLERK



....
stax
...
Рейтинг: 0 / 0
List?
    #39814499
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad А про overflow вообще только что узнал.

добавіть, добавили
но реализовали неакуратно (мой админ бы не принял)

....
stax
...
Рейтинг: 0 / 0
List?
    #39814751
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он хотел как в Лиспе.

Код: python
1.
(list x y z)
...
Рейтинг: 0 / 0
List?
    #39814791
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется вот этого:
Код: plsql
1.
2.
3.
4.
select LIST(column_name)
from all_tab_columns
where table_name = 'ESTABLISHMENT'
order by column_id



вместо

Код: plsql
1.
2.
3.
select LISTAGG(column_name, ',') within group (order by column_id)
from all_tab_columns
where table_name = 'ESTABLISHMENT'



Код: sql
1.
 within group 

убирать пробовал, но "ORA-02000: missing WITHIN keyword"
Oracle 12
...
Рейтинг: 0 / 0
List?
    #39814793
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinХочется
Это от непонимания.
Включите в Ваш пример group by и попробуйте переосмыслить.
...
Рейтинг: 0 / 0
List?
    #39814795
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinХочется вот этого:
Код: plsql
1.
2.
3.
4.
select LIST(column_name)
from all_tab_columns
where table_name = 'ESTABLISHMENT'
order by column_id


И что в sybase выдаст этот запрос?
...
Рейтинг: 0 / 0
List?
    #39814965
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в мсскл назвали string_agg
Все что-то своё выдумавыют
...
Рейтинг: 0 / 0
List?
    #39814994
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxв мсскл назвали string_agg
Все что-то своё выдумавыют

Суть не в названии а в том что это функция агрегатная. Т.e. сначала агрегация (GROUP BY по умолчанию) и только потом ORDER BY. Посему ORDER BY в примере от Victor Cookin произведет сортировку одной строки т.к. неявная группировкa а при явной нибо вылетит с "not a GROUP BY expression" либо отсортирует уже сгруппированные строки (если поле в ORDER BY присутствует в GROUP BY). Но в любом случае этот ORDER BY не имеет ничего общего c ORDER BY при группировке указываемый в WITHIN GROUP. Другое дело ORACLE мог бы сделать кляузу WITHIN GROUP(ORDER BY 1) кляузой по умолчанию - куда меньше буковок если порядок не важен.

SY
...
Рейтинг: 0 / 0
List?
    #39815067
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY ORACLE мог бы сделать кляузу WITHIN GROUP(ORDER BY 1) кляузой по умолчанию - куда меньше буковок если порядок не важен.1 или не 1, но что-то по-умолчанию есть
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select listagg(dummy) v193
from dual
connect by level<=5
group by mod(level, 2);

V193
----
XXX
XX
...
Рейтинг: 0 / 0
List?
    #39815078
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-1 или не 1, но что-то по-умолчанию есть

Ну значит внял Oracle просьбам трудящихся:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select  version
  2    from  v$instance
  3  /

VERSION
-----------------
12.2.0.1.0

SQL> select listagg(dummy) v193
  2  from dual
  3  connect by level<=5
  4  group by mod(level, 2);
select listagg(dummy) v193
                      *
ERROR at line 1:
ORA-02000: missing WITHIN keyword


SQL>



SY.
...
Рейтинг: 0 / 0
List?
    #39815201
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Ну значит внял Oracle просьбам трудящихся:

SY.

в 18-ке кляуза WITHIN GROUP еще обязательна, но без нее ошибки уже не выдает
https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/LISTAGG.html#GUID-B6E50D8E-F467-425B-9436-F7F8BF38D466

.....
stax
...
Рейтинг: 0 / 0
List?
    #39815417
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЭто от непонимания.
Включите в Ваш пример group by и попробуйте переосмыслить.
Во многих случаях нужно просто взять результат запроса и получить именно лист, т.е. одно значение. При этом сам запрос может быть, понятно, довольно сложным. И визуально усложнять его при ненадобности этого делать - это нехорошо.

Staxв 18-ке кляуза WITHIN GROUP еще обязательна, но без нее ошибки уже не выдает
а где уже не обязательна?
...
Рейтинг: 0 / 0
List?
    #39815425
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinandrey_anonymousЭто от непонимания.
Включите в Ваш пример group by и попробуйте переосмыслить.
Во многих случаях нужно просто взять результат запроса и получить именно лист, т.е. одно значение. При этом сам запрос может быть, понятно, довольно сложным. И визуально усложнять его при ненадобности этого делать - это нехорошо.
Нехорошо путать теплое с мягким, а именно - сортировку итоговой выборки и сортировку внутри группы, итогом которой станет одна строка итоговой выборки.
...
Рейтинг: 0 / 0
List?
    #39815439
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНехорошо путать теплое с мягким, а именно - сортировку итоговой выборки и сортировку внутри группы, итогом которой станет одна строка итоговой выборки.

Пожалуйста поподробнее. Где в моём примере группа и сортировка внутри группы? У меня есть сортировка исходного запроса и всё, а больше мне (в данном случае) ничего не надо. И зачем требует group by column_id , когда надо order by column_id?
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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