Bylo by hezké, kdybychom něco takového dokázali, ale bohužel:
SQL> declare
2 v_row t23%rowtype;
3 begin
4 insert into t23
5 values (my_seq.nextval, 'Daisy Head Maisy')
6 returning * into v_row;
7 end;
8 /
returning * into v_row;
*
ERROR at line 6:
ORA-06550: line 6, column 19:
PL/SQL: ORA-00936: missing expression
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored
SQL>
Domnívám se, že pro tuto funkci může existovat protokolovaný požadavek na změnu, protože vím, že ji chce mnoho lidí. Ale v tuto chvíli můžeme udělat jen sáhodlouhé specifikace každého sloupce:
SQL> declare
2 v_row t23%rowtype;
3 begin
4 insert into t23
5 values (my_seq.nextval, 'Daisy Head Maisy')
6 returning id, person_name into v_row;
7 end;
8 /
PL/SQL procedure successfully completed.
SQL>
Špatná zpráva, pokud máte hodně sloupců!
Domnívám se, že zdůvodnění je takové, že většina tabulek má relativně málo odvozených sloupců (sekvence přiřazená k ID, sysdate přiřazená k CREATED_DATE atd.), takže většina hodnot by již měla být známa (nebo alespoň znát) procesu vkládání.
upravit
Myslel jsem, že jsem to řekl jasně, ale stejně:ano, v současné době není možné použít *
nebo nějaký podobný nespecifický mechanismus v klauzuli RETURNING.