Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

PL/SQL Como retornar todos os atributos em ROW


Seria legal se pudéssemos fazer algo assim, mas infelizmente:
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>

Acredito que possa haver uma solicitação de alteração registrada para esse recurso, porque sei que muitas pessoas o desejam. Mas, no momento, tudo o que podemos fazer é a especificação prolixa de cada coluna:
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>

Más notícias se você tem muitas colunas!

Suspeito que a lógica é que a maioria das tabelas tem relativamente poucas colunas derivadas (sequência atribuída a um ID, sysdate atribuída a um CREATED_DATE etc.), portanto, a maioria dos valores já deve ser conhecida (ou pelo menos cognoscível) para o processo de inserção.

editar

Achei que tinha deixado claro, mas enfim:sim atualmente é impossível usar * ou algum mecanismo não específico semelhante em uma cláusula RETURNING.