Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select из двумерной коллекции / 17 сообщений из 17, страница 1 из 1
17.12.2020, 12:03
    #40028661
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Привет,
есть динамически заполняемая коллекция:
Код: plsql
1.
2.
3.
4.
type rowt is table of varchar2(4000);
type tabl is table of rowt;

function get_tabl() return tabl;


Внутри функции коллекция динамически расширяется. Заранее не известно кол-во столбцов и строк.

Как развернуть эту коллекцию в запрос? Нужно преобразовать двумерную коллекцию в обычный select.
Код: plsql
1.
select * from table(get_tabl())

возвращает колонку с фактически строками. Как их теперь преобразовать в эти самые строки, чтобы результат запроса уже отобразить как таблицу в приложении?
...
Рейтинг: 0 / 0
17.12.2020, 12:09
    #40028664
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A
Код: plsql
1.
is table of varchar2(4000);


Rog_A
динамически расширяется. Заранее не известно кол-во столбцов и строк.

Расширьте исходный пример для демонстрации.
...
Рейтинг: 0 / 0
17.12.2020, 12:29
    #40028673
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
У функции get_tabl() есть параметры.
В зависимости от этих параметров выбираются сотрудники и показатели сотрудников.

В итоге необходимо сформировать таблицу вида:
Код: plsql
1.
2.
3.
4.
5.
6.
..................  Сотрудник1    Сотрудник2   ...............  СотрудникN
Показатель1            5               1                             0
Показатель2                            4                             3
Показатель3            1                                             12
..................
ПоказательN            8               2                             45
...
Рейтинг: 0 / 0
17.12.2020, 12:36
    #40028678
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A
Заранее не известно кол-во столбцов и строк.

Известно - больше 1000 колонок нельзя.
...
Рейтинг: 0 / 0
17.12.2020, 12:37
    #40028679
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A,

По вашему описанию типов выбираются строки с nested table в которой одна колонка с типом varchar2. На что влияют параметры?
...
Рейтинг: 0 / 0
17.12.2020, 12:41
    #40028682
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Больше 1000 колонок там не будет. Несколько сотен максимум.

Параметры влияют на количество сотрудников и количество показателей. Например, отбираются сотрудники одного отдела.
...
Рейтинг: 0 / 0
17.12.2020, 12:45
    #40028685
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A,

Колонки откуда берутся? Покажите работающий пример с
Rog_A
Внутри функции коллекция динамически расширяется
...
Рейтинг: 0 / 0
17.12.2020, 12:45
    #40028687
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A,

... from table() x,table(x.) y + unpivot

.....
stax
...
Рейтинг: 0 / 0
17.12.2020, 12:54
    #40028690
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Stax,
А можно чуть подробнее, пожалуйста. А то везде примеры с уже заданным количеством столбцов.

env,
Расширение через tabl.extend по обеим осям.
...
Рейтинг: 0 / 0
17.12.2020, 13:08
    #40028698
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A,

c переменным числом знаю два метода
1) динамически
2) pivot хмл

ps
теоретически у Вас в каждой "строке" может быть разное к-во "столбцов"

.....
stax
...
Рейтинг: 0 / 0
17.12.2020, 13:15
    #40028701
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Stax,
Количество столбцов одинаковое в строках. Это я проверял специально. Не имеет смысла значение параметра без привязки к сотруднику. Наоборот, если у сотрудника нет параметра, то проставляется 0.
...
Рейтинг: 0 / 0
17.12.2020, 16:11
    #40028803
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A,

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
SQL> desc stax_tt
 stax_tt TABLE OF SYS.ODCINUMBERLIST
 SYS.ODCINUMBERLIST VARRAY(32767) OF NUMBER


 матрица 2x3 


SQL> ed
Wrote file afiedt.buf

  1  with t as (select stax_tt(sys.odcinumberlist(10,20,30),sys.odcinumberlist(100,200,300)) x from dual)
  2    ,r as (select rownum rn,value(x1) rv from t,table(x) x1)
  3    ,tt as (select rn,value(col) val from r,table(rv) col)
  4  select * from tt
  5  pivot xml (sum(val) for val in (any) )
  6* order by 1
SQL> /

        RN VAL_XML
---------- ----------------------------------------------------------------------------------------------------
         1 <PivotSet><item><column name = "VAL">10</column><column name = "SUM(VAL)">10</column></item><item><c
           olumn name = "VAL">20</column><column name = "SUM(VAL)">20</column></item><item><column name = "VAL"
           >30</column><column name = "SUM(VAL)">30</column></item></PivotSet>

         2 <PivotSet><item><column name = "VAL">100</column><column name = "SUM(VAL)">100</column></item><item>
           <column name = "VAL">200</column><column name = "SUM(VAL)">200</column></item><item><column name = "
           VAL">300</column><column name = "SUM(VAL)">300</column></item></PivotSet>

 матрица 3x2 


SQL> ed
Wrote file afiedt.buf

  1  with t as (select stax_tt(sys.odcinumberlist(11,12),sys.odcinumberlist(21,22) ,sys.odcinumberlist(31,32)) x from dual)
  2    ,r as (select rownum rn,value(x1) rv from t,table(x) x1)
  3    ,tt as (select rn,value(col) val from r,table(rv) col)
  4  select * from tt
  5  pivot xml (sum(val) for val in (any) )
  6* order by 1
SQL> /

        RN VAL_XML
---------- ----------------------------------------------------------------------------------------------------
         1 <PivotSet><item><column name = "VAL">11</column><column name = "SUM(VAL)">11</column></item><item><c
           olumn name = "VAL">12</column><column name = "SUM(VAL)">12</column></item></PivotSet>

         2 <PivotSet><item><column name = "VAL">21</column><column name = "SUM(VAL)">21</column></item><item><c
           olumn name = "VAL">22</column><column name = "SUM(VAL)">22</column></item></PivotSet>

         3 <PivotSet><item><column name = "VAL">31</column><column name = "SUM(VAL)">31</column></item><item><c
           olumn name = "VAL">32</column><column name = "SUM(VAL)">32</column></item></PivotSet>



ps
не умею "rownum" для ,table(x) брать

.....
stax
...
Рейтинг: 0 / 0
17.12.2020, 16:35
    #40028808
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A,

Под "столбцами" подразумевается количество строк в nested table что ли?

extend добавляет новый элемент коллекции, а не столбцы.
...
Рейтинг: 0 / 0
17.12.2020, 16:46
    #40028815
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
env,

имхо
у него в строках и в столбцах table (не VARRAY)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare
 type rowt is table of varchar2(4000);
 type tabl is table of rowt;
 v_tt tabl;
begin
 v_tt:= tabl();--строка
 --1x2
 v_tt.extend;
 v_tt(1):=rowt();
 v_tt(1).extend; --ячейка (1,1)
 v_tt(1).extend; --ячейка (1,2)
end;
/



.....
stax
...
Рейтинг: 0 / 0
17.12.2020, 16:56
    #40028824
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Stax, спасибо!! А как потом от всего этого мусора xml избавляться?
...
Рейтинг: 0 / 0
17.12.2020, 17:16
    #40028837
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Rog_A
Stax, спасибо!! А как потом от всего этого мусора xml избавляться?


я в хмл не очень, токо учусь

но 100% на форуме разворачивали хмл обратно в таблицу

....
stax
...
Рейтинг: 0 / 0
18.12.2020, 11:20
    #40029020
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select из двумерной коллекции
Stax
но 100% на форуме разворачивали хмл обратно в таблицу

Ну тут надо выбирать.
Или XML или заранее известное число атрибутов.
Ну или еще вариант - обеспечить парсинг запроса к pipelind при каждом вызове.
Но единственно вменяемым является совершенно другой подход, а именно - pivot в том месте, которое в нем нуждается (т.е. на вызывающей стороне)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select из двумерной коллекции / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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