Det kommer inte att fungera. RETURNING
klausul kan inte användas som du gör det, d.v.s.
insert into t (id, my_pk)
select some_id, your_function from ...
returning into v_output
men skulle fungera om du infogade VALUES
, som
insert into t
values (id, your_function)
returning my_pk into v_output
Det betyder att du antingen måste skriva om den koden eller titta på en lösning beskrivs i återvända med insert..select artikel (skriven av Adrian Billington).
BTW, skulle inte en vanlig Oracle-sekvens passa ditt syfte? Kommer inte att vara gapfritt, men skulle vara enkelt och effektivt. Tänk på prestandan när du infogar stora mängder data med din lösning.
BTW #2, vad är syftet med den sista raden i din funktion? Du använder aldrig N_VALUE.