sql >> Database >  >> RDS >> Oracle

PL/SQL Hoe alle attributen in ROW retourneren?

Het zou mooi zijn als we zoiets zouden kunnen doen, maar helaas:

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>

Ik geloof dat er een gelogd wijzigingsverzoek voor deze functie is, omdat ik weet dat veel mensen dit willen. Maar voorlopig kunnen we alleen de omslachtige specificatie van elke kolom doen:

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>

Slecht nieuws als je veel kolommen hebt!

Ik vermoed dat de grondgedachte is dat de meeste tabellen relatief weinig afgeleide kolommen hebben (volgorde toegewezen aan een ID, sysdate toegewezen aan een CREATED_DATE, enz.), dus de meeste waarden zouden al bekend moeten zijn (of op zijn minst bekend) voor het invoegproces.

bewerken

Ik dacht dat ik het duidelijk had gemaakt, maar toch:ja momenteel is het onmogelijk om * te gebruiken of een soortgelijk niet-specifiek mechanisme in een RETURNING-clausule.




  1. Hoe float naar varchar in SQL Server te converteren

  2. PHP-array als invoer voor opgeslagen procedure

  3. MySql-scopingprobleem met gecorreleerde subquery's

  4. Node.js kan niet verifiëren bij MySQL 8.0