To nebude fungovat. RETURNING
klauzuli nelze použít způsobem, jakým to děláte, tj.
insert into t (id, my_pk)
select some_id, your_function from ...
returning into v_output
ale fungovalo by to, kdybyste vložili VALUES
, jako
insert into t
values (id, your_function)
returning my_pk into v_output
To znamená, že budete muset tento kód buď přepsat, nebo se podívat na řešení popsané v návrat s insert..select článek (napsal Adrian Billington).
BTW, nevyhovovala by vám obyčejná sekvence Oracle? Nebude bez mezer, ale bude jednoduchý a účinný. Myslete na výkon při vkládání velkého množství dat pomocí vašeho řešení.
BTW #2, jaký je účel posledního řádku ve vaší funkci? Nikdy nepoužíváte N_VALUE.