そのようなことができればいいのですが、残念ながら:
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に割り当てられたsysdateなど)が比較的少ないため、ほとんどの値は挿入プロセスですでに認識されている(または少なくとも認識されている)はずです。
編集
はっきりさせたと思いましたが、とにかく:はい、現在*
を使用することはできません。 またはRETURNING句の同様の非特定のメカニズム。