Du får detta eftersom din kod tilldelar en skalär till utdatatypen. Du måste casta variabeln för att matcha tilldelningsmålet. Så:
SELECT type_struct(counter)
INTO rec
FROM dual;
Du behöver inte nödvändigtvis en pipelined funktion. Vi kan använda table()
med valfri funktion som returnerar en samling.
Här är en mycket enklare implementering, som bara kräver en UDT.
CREATE TYPE tp_numbers AS TABLE OF number;
/
CREATE OR REPLACE FUNCTION gen_nums (na NUMBER, nb NUMBER)
RETURN tp_numbers
IS
return_value tp_numbers ;
BEGIN
SELECT (na + level) - 1
bulk collect INTO return_value
FROM dual
connect by level <= nb;
RETURN return_value ;
END gen_nums;
/