Това няма да работи. RETURNING
клаузата не може да се използва по начина, по който го правите, т.е.
insert into t (id, my_pk)
select some_id, your_function from ...
returning into v_output
но ще работи, ако вмъкнете VALUES
, като
insert into t
values (id, your_function)
returning my_pk into v_output
Това означава, че или ще трябва да пренапишете този код, или да потърсите заобиколно решение описано в връщане с insert..select статия (написана от Адриан Билингтън).
Между другото, няма ли обикновена последователност на Oracle да отговаря на вашата цел? Няма да бъде без пропуски, но ще бъде просто и ефективно. Имайте предвид производителността, когато вмъквате огромно количество данни, като използвате вашето решение.
BTW #2, каква е целта на последния ред във вашата функция? Никога не използвате N_VALUE.