これは、コードが出力タイプにスカラーを割り当てるために発生します。割り当てターゲットに一致するように変数をキャストする必要があります。だから:
SELECT type_struct(counter)
INTO rec
FROM dual;
パイプライン関数は必ずしも必要ではありません。 table()
を使用できます コレクションを返す関数を使用します。
これははるかに単純な実装であり、必要なUDTは1つだけです。
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;
/