Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Двухмерный массив в BULK COLLECT / 4 сообщений из 4, страница 1 из 1
06.11.2020, 10:16
    #40015859
Wisky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив в BULK COLLECT
Загружаю отчет через двухмерный массив, но хочу узнать есть ли возможность загрузить одним запросом или хотя бы через BULK COLLECT?

Код: 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.
declare
  type t_row is table of number(8,1) index by pls_integer;
  type t_cell_tab is table of t_row index by pls_integer;
  cell_tab t_cell_tab;

  procedure load_report(par_REPORT_ID integer) is
    row_idx pls_integer;
    col_idx pls_integer;
  begin
    --удаляю ранее загруженный
    DELETE REPORT_CELLS WHERE REPORT_ID = par_REPORT_ID;
    row_idx := cell_tab.first;
    loop
      exit when row_idx is null;
     
      col_idx := cell_tab(row_idx).first;
      loop
        exit when col_idx is null;
        dbms_output.put_line(row_idx||';'||col_idx||'   =' || cell_tab(row_idx)(col_idx));

        INSERT INTO REPORT_CELLS (REPORT_ID, CELL_ID, VALUE) 
         SELECT par_REPORT_ID, fc.CELL_ID,cell_tab(row_idx)(col_idx)
         FROM REPORT_COLUMNS fc
         WHERE fc.NUMROW = row_idx and fc.NUMCOL = col_idx;

        col_idx := cell_tab(row_idx).next(col_idx);
      end loop;

      row_idx := cell_tab.next(row_idx);
    end loop;

   commit;

  end;

begin


cell_tab(1)(12):=54654.5;
cell_tab(12)(11):=258.3;

  load_report(1);

end;
...
Рейтинг: 0 / 0
06.11.2020, 11:02
    #40015875
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив в BULK COLLECT
Wisky,

Типа такого?
Код: 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.
create or replace type dropme_tp1 is table of number(4);
create or replace type dropme_tp2 is table of dropme_tp1;

declare
    v_tb dropme_tp2;
begin
    with t as
    (
       select 0 dd, 1 d from dual union all
       select 0, 2 from dual union all
       select 11, 1 from dual
    ),
    tt as
    (
        select 0 dd from dual union all
        select 11 from dual
    )
    select
        cast(collect(t.d) as dropme_tp1) ddd
        bulk collect into v_tb
    from
        tt,
        t
    where 
        tt.dd=t.dd
    group by
        tt.dd;
    for i in v_tb.first..v_tb.last loop
        for j in v_tb(i).first..v_tb(i).last loop
            dbms_output.put_line(i||':'||v_tb(i)(j));
        end loop;
    end loop;
end;
/
...
Рейтинг: 0 / 0
06.11.2020, 11:04
    #40015877
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив в BULK COLLECT
Wisky,

А вообще, зачем в этой задаче массив?
...
Рейтинг: 0 / 0
06.11.2020, 11:27
    #40015882
Wisky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двухмерный массив в BULK COLLECT
навязанное требование передать через массив
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Двухмерный массив в BULK COLLECT / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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