powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Двухмерный массив в BULK COLLECT
4 сообщений из 4, страница 1 из 1
Двухмерный массив в BULK COLLECT
    #40015859
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Загружаю отчет через двухмерный массив, но хочу узнать есть ли возможность загрузить одним запросом или хотя бы через 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
Двухмерный массив в BULK COLLECT
    #40015875
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Двухмерный массив в BULK COLLECT
    #40015877
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wisky,

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


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