Det ville være fint, hvis vi kunne gøre sådan noget, men desværre:
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>
Jeg tror, der kan være en logget ændringsanmodning for denne funktion, fordi jeg ved, at mange mennesker ønsker det. Men for øjeblikket er alt, hvad vi kan gøre, den lange specifikation af hver kolonne:
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>
Dårlige nyheder, hvis du har mange spalter!
Jeg formoder, at begrundelsen er, at de fleste tabeller har relativt få afledte kolonner (sekvens tildelt et ID, sysdate tildelt en CREATED_DATE, osv.), så de fleste værdier burde allerede være kendt (eller i det mindste kan kendes) til indsættelsesprocessen.
rediger
Jeg troede, jeg havde gjort det klart, men alligevel:ja i øjeblikket er det umuligt at bruge *
eller en lignende uspecifik mekanisme i en RETURNING-klausul.