powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование запроса в nested table
11 сообщений из 11, страница 1 из 1
Преобразование запроса в nested table
    #39637242
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некий запрос

Код: plsql
1.
select id, name, attr from ...



возвращающий такое:
Код: plsql
1.
2.
3.
1, 'ABC', 123
1, 'ABC', 456
1, 'ABC', 789



есть тип
Код: plsql
1.
CREATE OR REPLACE TYPE num_tab as table of number;



хочется как-то получить вместо 3-х записей одну со сложным типом

Код: plsql
1.
1, 'ABC', {123, 456, 789}



но преобразование в духе

Код: plsql
1.
2.
select id, name, 
(cast(select attr from ... ) as num_tab) as attr_list from ...



не работает с
Код: plsql
1.
 ORA-00932: inconsistent datatypes: expected - got NUMBER



Подскажите пожалуйста, как можно обойти проблему.
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637266
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with tbl as
 (select 1 id,'ABC' code,123 num from dual
  union all
  select 1 ,'ABC' ,456 from dual
  union all
  select 1 ,'ABC' ,789 from dual
  union all
  select 1 ,'DEF' ,101112 from dual)
select code
      ,clns
  from (select t.code
              ,cast((multiset (select t2.num
                                 from tbl t2
                                where t2.code = t.code)) as t_num) clns
              ,row_number() over(partition by t.code order by null) rn
          from tbl t)
 where rn = 1
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637268
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson,

SQL Reference -> Cast
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637281
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson
Код: plsql
1.
(cast(select attr from ... ) as num_tab)

RTFM GROUP BY + COLLECT
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637294
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, почему коллект? Я вот нагуглил( 8539160 ), что лучше multiset, так ли это?
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637322
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БельфяElic, почему коллект? Я вот нагуглил( 8539160 ), что лучше multiset, так ли это?Там однобокий взгляд. В читабельности, удобности использования и сопровождаемости тоже чудовищная разница.
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637330
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бельфя
Код: plsql
1.
2.
3.
4.
5.
6.
7.
from (select t.code
              ,cast((multiset (select t2.num
                                 from tbl t2
                                where t2.code = t.code)) as t_num) clns
              ,row_number() over(partition by t.code order by null) rn
          from tbl t)
 where rn = 1

Говнокод: по сути - это группировка аналитикой.
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637344
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БельфяElic, почему коллект? Я вот нагуглил( 8539160 ), что лучше multiset, так ли это?multiset эффективнее collect по производительности когда дополнительное соединение неизбежно.
Здесь в self join вообще нет необходимости.
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637398
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, да multiset помог, можно было и сразу догадаться конечно.
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637406
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JonhsonСпасибо, да multiset помог, можно было и сразу догадаться конечно.Да... Глядел в книгу, увидел фигу.
...
Рейтинг: 0 / 0
Преобразование запроса в nested table
    #39637771
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, dbms_photoshop, спасибр, разницу понял. Тот же вариант с collect'ом
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with tbl as
 (select /*+ materialize */ * from  (select 1 id, 'ABC' code, 123 num from dual
  union all
  select 1, 'ABC', 456 from dual
  union all
  select 1, 'ABC', 789 from dual
  union all
  select 1, 'DEF', 101112
    from dual))
select t.code, cast(collect(t.num order by t.num desc) as t_num) clns
  from tbl t
 group by t.code

...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование запроса в nested table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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