Bạn nhận được điều này bởi vì mã của bạn chỉ định một đại lượng vô hướng cho loại đầu ra. Bạn cần ép kiểu biến để phù hợp với mục tiêu gán. Vì vậy:
SELECT type_struct(counter)
INTO rec
FROM dual;
Bạn không nhất thiết phải cần một hàm pipelined. Chúng ta có thể sử dụng table()
với bất kỳ hàm nào trả về một bộ sưu tập.
Đây là cách triển khai đơn giản hơn nhiều, chỉ yêu cầu một 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;
/