tt_GatheredData
- это набор tr_GatheredData
записей, поэтому вам нужно передать ему набор из них, а не (1, 'lol', 'omg', 2, 3)
.
Как упоминалось в ответе Лукаша, типы записей PL / SQL до Oracle18c - это просто простые многозначные переменные, поэтому, если вам нужен удобный конструктор, вы должны написать свою собственную или объявить каждую tr_GatheredData
запись и явно присвоить ей значения.
Типы коллекций поставляются с неявнымиконструкторы, или вы можете явно назначать элементы по одному за раз, если хотите.
Вот один из способов, используя автономный (до 18c) конструктор записей для создания коллекции с несколькими элементами в одном кадре:
declare
type tr_GatheredData is record
( bs_id number
, customer_name varchar2(200)
, month varchar2(30)
, year number
, leakage number );
type tt_GatheredData is table of tr_GatheredData;
results tt_GatheredData;
function new_gathereddata
( p_bs_id number
, p_customer_name varchar2
, p_month varchar2
, p_year number
, p_leakage number )
return tr_GatheredData
is
r tr_GatheredData;
begin
r.bs_id := p_bs_id;
r.customer_name := p_customer_name;
r.month := p_month;
r.year := p_year;
r.leakage := p_leakage;
return r;
end new_gathereddata;
begin
results :=
tt_GatheredData
( new_gathereddata(1, 'aaa', 'January', 1066, 10)
, new_gathereddata(2, 'bbb', 'February', 1588, 15)
, new_gathereddata(3, 'ccc', 'March', 1789, 20) );
dbms_output.put_line('Collection contains ' || results.count || ' records.');
dbms_output.put_line('results(3).year = ' || results(3).year);
end;
Выход:
Collection contains 3 records.
results(3).year = 1789