Было бы здорово, если бы мы могли сделать что-то подобное, но, увы:
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>
Плохие новости, если у вас много столбцов!
Я подозреваю, что логическое обоснование состоит в том, что в большинстве таблиц относительно мало производных столбцов (последовательность, назначенная для идентификатора, sysdate, назначенная для CREATED_DATE и т. Д.), Поэтому большинство значений должны быть уже известны (или, по крайней мере, известны) для процесса вставки.
1012 * редактировать *
Мне было все равно, как вернуть все
атрибуты без скучных
спецификация каждого столбца;) Может быть
это невозможно.
Я думал, что ясно дал понять, но в любом случае: да, в настоящее время невозможно использовать *
или некоторый подобный неспецифический механизм в предложении RETURNING.