sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL Hur returnerar alla attribut i ROW

Det skulle vara snyggt om vi kunde göra något sådant men tyvärr:

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>

Jag tror att det kan finnas en loggad ändringsbegäran för den här funktionen, eftersom jag vet att många vill ha den. Men för närvarande är allt vi kan göra den långrandiga specifikationen av varje kolumn:

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åliga nyheter om du har många kolumner!

Jag misstänker att motiveringen är att de flesta tabeller har relativt få härledda kolumner (sekvens tilldelad ett ID, sysdate tilldelat till ett CREATED_DATE, etc) så de flesta värden borde redan vara kända (eller åtminstone kännbara) för infogningsprocessen.

redigera

Jag trodde att jag hade klargjort det, men i alla fall:ja för närvarande är det omöjligt att använda * eller någon liknande ospecifik mekanism i en RETURNING-sats.




  1. MySQL kumulativ summa ordning efter datum

  2. Skapa en lagrad procedur att lägga till med automatisk ökning som primärt fält?

  3. MYSQL:VÄLJ metod - men visa inte dubbletter / GROUP eller DISTINCT?

  4. MySqlConnection =ny MySqlConnection(sträng) fungerar inte