Byłoby fajnie, gdybyśmy mogli coś takiego zrobić, ale niestety:
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>
Uważam, że może być zarejestrowane żądanie zmiany tej funkcji, ponieważ wiem, że wiele osób tego chce. Ale na razie wszystko, co możemy zrobić, to długa specyfikacja każdej kolumny:
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>
Złe wieści, jeśli masz dużo kolumn!
Podejrzewam, że uzasadnienie jest takie, że większość tabel ma stosunkowo niewiele kolumn pochodnych (sekwencja przypisana do identyfikatora, sysdate przypisana do CREATED_DATE itp.), więc większość wartości powinna być już znana (lub przynajmniej znana) w procesie wstawiania.
edytuj
Myślałem, że wyjaśniłem, ale i tak:tak, obecnie nie można użyć *
lub jakiś podobny niespecyficzny mechanizm w klauzuli RETURNING.