Isso não vai funcionar.
RETURNING
cláusula não pode ser usada da maneira que você está fazendo, ou seja, insert into t (id, my_pk)
select some_id, your_function from ...
returning into v_output
mas funcionaria se você inserisse
VALUES
, Como insert into t
values (id, your_function)
returning my_pk into v_output
Isso significa que você terá que reescrever esse código ou procurar uma solução alternativa descrito em retornando com insert..select artigo (escrito por Adrian Billington).
BTW, uma sequência comum do Oracle não serviria para o seu propósito? Não será sem lacunas, mas seria simples e eficaz. Cuide do desempenho ao inserir uma grande quantidade de dados, usando sua solução.
BTW # 2, qual é o propósito da última linha em sua função? Você nunca usa N_VALUE.