sql >> Base de Datos >  >> RDS >> Oracle

PL/SQL Cómo devolver todos los atributos en ROW

Sería genial si pudiéramos hacer algo así, pero por desgracia:

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>

Creo que puede haber una solicitud de cambio registrada para esta función, porque sé que mucha gente la quiere. Pero por el momento todo lo que podemos hacer es la especificación detallada de cada columna:

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>

¡Malas noticias si tienes muchas columnas!

Sospecho que la razón es que la mayoría de las tablas tienen relativamente pocas columnas derivadas (secuencia asignada a una ID, sysdate asignada a CREATED_DATE, etc.), por lo que la mayoría de los valores ya deberían conocerse (o al menos conocerse) para el proceso de inserción.

editar

Pensé que lo había dejado claro, pero de todos modos:sí, actualmente es imposible usar * o algún mecanismo inespecífico similar en una cláusula RETURNING.