powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select из двумерной коллекции
17 сообщений из 17, страница 1 из 1
Select из двумерной коллекции
    #40028661
Rog_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,
есть динамически заполняемая коллекция:
Код: 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
Select из двумерной коллекции
    #40028664
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rog_A
Код: plsql
1.
is table of varchar2(4000);


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

Расширьте исходный пример для демонстрации.
...
Рейтинг: 0 / 0
Select из двумерной коллекции
    #40028673
Rog_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У функции 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
Select из двумерной коллекции
    #40028678
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rog_A
Заранее не известно кол-во столбцов и строк.

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

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

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

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

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

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

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

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

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

.....
stax
...
Рейтинг: 0 / 0
Select из двумерной коллекции
    #40028701
Rog_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Количество столбцов одинаковое в строках. Это я проверял специально. Не имеет смысла значение параметра без привязки к сотруднику. Наоборот, если у сотрудника нет параметра, то проставляется 0.
...
Рейтинг: 0 / 0
Select из двумерной коллекции
    #40028803
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Select из двумерной коллекции
    #40028808
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rog_A,

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

extend добавляет новый элемент коллекции, а не столбцы.
...
Рейтинг: 0 / 0
Select из двумерной коллекции
    #40028815
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Select из двумерной коллекции
    #40028824
Rog_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, спасибо!! А как потом от всего этого мусора xml избавляться?
...
Рейтинг: 0 / 0
Select из двумерной коллекции
    #40028837
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rog_A
Stax, спасибо!! А как потом от всего этого мусора xml избавляться?


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

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

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

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


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