Oracle
 sql >> Database >  >> RDS >> Oracle

PL/SQL Come restituire tutti gli attributi in ROW

Sarebbe bello se potessimo fare qualcosa del genere, ma ahimè:

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>

Credo che potrebbe esserci una richiesta di modifica registrata per questa funzione, perché so che molte persone la vogliono. Ma per il momento tutto ciò che possiamo fare è la specificazione prolissa di ogni colonna:

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>

Brutte notizie se hai molte colonne!

Sospetto che la logica sia che la maggior parte delle tabelle abbia relativamente poche colonne derivate (sequenza assegnata a un ID, sysdate assegnato a CREATED_DATE, ecc.), Quindi la maggior parte dei valori dovrebbe già essere nota (o almeno conoscibile) al processo di inserimento.

modifica

Pensavo di averlo chiarito, ma comunque:sì al momento è impossibile usare * o qualche meccanismo non specifico simile in una clausola RETURNING.