Funkcja zwracają typ TABLE zawierający inny typ REKORD

0

Witam,

Mam pytanie i pewien problem.
Utworzyłem typ T_REKORD który zawiera DATA_OD, DATA_DO, WARTOSC.
Następnie utworzyłem typ TABLE:

create or replace type T_SRED_TABLE as TABLE OF T_REKORD;

Następnie utworzyłem funkcję (F_WYLICZ_SRED) która przyjmuje trzy argumenty i zwraca typ TABLE. Funkcja nie zwraca błędów (kompilacja przeszła ok), a przypisanie rekordów do typu TABLE wygląda następująco:

          v_table.extend;
          v_table(v_count) := T_REKORD(v_w_czas_od, v_w_czas_do, v_wynik);
          v_count := v_count+1;

Pytanie teraz moje, w jaki sposób wywołać insert wartości z tych typów żeby mi te wartości wpisało do normalnej tabeli?
Mam do dyspozycji F_WYLICZ_SRED(v1, v2, v3) return T_SRED_TABLE;
A tabela która powinna zawierać te dane to: NP_VALUES, ma kolumny: czas_od, czas_do, wartosci
, gdzie wartości typu tabeli(typu rekordu czas od, czas do, wynik)) odpowiadaj wartości w kolejnosci w tabeli NP_VALUES.

1

Zamiast tworzyć typ 1:1 odpowiadający rekordowi, można użyć %rowtype.

Jak dane masz w tablicy to odwołujesz się do nich np. w pętli czyli

FOR i IN v_table.first..v_table.last
LOOP
    INSERT INTO np_values VALUES (v_table(i).data_od, v_table(i).data_do, v_table(i).wartosc);
END LOOP;

https://docs.oracle.com/cd/A57673_01/DOC/server/doc/PLS23/ch4.htm

Akapit: Inserting Oracle Data

Jak dużo danych to można zrobić bulka

https://www.akadia.com/services/ora_bulk_insert.html

1

insert into ... select * from table(F_WYLICZ_SRED(...));

1 użytkowników online, w tym zalogowanych: 0, gości: 1