Би било чудесно, ако можехме да направим нещо подобно, но уви:
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>
Вярвам, че може да има записана заявка за промяна за тази функция, защото знам, че много хора я искат. Но за момента всичко, което можем да направим, е дългата спецификация на всяка колона:
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>
Лоши новини, ако имате много колони!
Подозирам, че обосновката е, че повечето таблици имат сравнително малко производни колони (последователност, присвоена на ID, системна дата, присвоена на CREATED_DATE и т.н.), така че повечето стойности трябва вече да са известни (или поне познати) на процеса на вмъкване.
редактиране
Мислех, че го изясних, но както и да е:да, в момента е невъзможно да се използва *
или някакъв подобен неспецифичен механизъм в клауза RETURNING.