Eso no funcionará. RETURNING
la cláusula no se puede usar de la forma en que lo está haciendo, es decir,
insert into t (id, my_pk)
select some_id, your_function from ...
returning into v_output
pero funcionaría si insertara VALUES
, como
insert into t
values (id, your_function)
returning my_pk into v_output
Significa que tendrá que volver a escribir ese código o buscar una solución alternativa descrito en returning with insert..select artículo (escrito por Adrian Billington).
Por cierto, ¿una secuencia ordinaria de Oracle no se adaptaría a su propósito? No será sin espacios, pero sería simple y efectivo. Tenga en cuenta el rendimiento al insertar una gran cantidad de datos, utilizando su solución.
Por cierto #2, ¿cuál es el propósito de la última línea en tu función? Nunca usas N_VALUE.