Het zou mooi zijn als we zoiets zouden kunnen doen, maar helaas:
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>
Ik geloof dat er een gelogd wijzigingsverzoek voor deze functie is, omdat ik weet dat veel mensen dit willen. Maar voorlopig kunnen we alleen de omslachtige specificatie van elke kolom doen:
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>
Slecht nieuws als je veel kolommen hebt!
Ik vermoed dat de grondgedachte is dat de meeste tabellen relatief weinig afgeleide kolommen hebben (volgorde toegewezen aan een ID, sysdate toegewezen aan een CREATED_DATE, enz.), dus de meeste waarden zouden al bekend moeten zijn (of op zijn minst bekend) voor het invoegproces.
bewerken
Ik dacht dat ik het duidelijk had gemaakt, maar toch:ja momenteel is het onmogelijk om *
te gebruiken of een soortgelijk niet-specifiek mechanisme in een RETURNING-clausule.