Es wäre nett, wenn wir so etwas tun könnten, aber leider:
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>
Ich glaube, dass es möglicherweise eine protokollierte Änderungsanforderung für diese Funktion gibt, weil ich weiß, dass viele Leute es wollen. Aber im Moment bleibt uns nur die langatmige Angabe jeder Spalte:
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>
Schlechte Nachrichten, wenn Sie viele Spalten haben!
Ich vermute, der Grund dafür ist, dass die meisten Tabellen relativ wenige abgeleitete Spalten haben (einer ID zugewiesene Sequenz, einem CREATED_DATE zugewiesenes Sysdate usw.), sodass die meisten Werte dem Einfügeprozess bereits bekannt (oder zumindest bekannt) sein sollten.
bearbeiten
Ich dachte, ich hätte es klargestellt, aber trotzdem:Ja, derzeit ist es unmöglich, *
zu verwenden oder ein ähnlicher unspezifischer Mechanismus in einer RETURNING-Klausel.