sql >> Databáze >  >> RDS >> Oracle

PL/SQL Jak vrátit všechny atributy v ROW

Bylo by hezké, kdybychom něco takového dokázali, ale bohužel:

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>

Domnívám se, že pro tuto funkci může existovat protokolovaný požadavek na změnu, protože vím, že ji chce mnoho lidí. Ale v tuto chvíli můžeme udělat jen sáhodlouhé specifikace každého sloupce:

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>

Špatná zpráva, pokud máte hodně sloupců!

Domnívám se, že zdůvodnění je takové, že většina tabulek má relativně málo odvozených sloupců (sekvence přiřazená k ID, sysdate přiřazená k CREATED_DATE atd.), takže většina hodnot by již měla být známa (nebo alespoň znát) procesu vkládání.

upravit

Myslel jsem, že jsem to řekl jasně, ale stejně:ano, v současné době není možné použít * nebo nějaký podobný nespecifický mechanismus v klauzuli RETURNING.




  1. SQLSTATE[HY000]:Obecná chyba:1835 Chybně vytvořený komunikační paket na LARAVEL

  2. ORA-06550:Chyba chybného počtu nebo typu argumentů při volání funkce uvnitř balíčku Oracle v ASP.NET

  3. Rozdělení hodnot oddělených čárkami ve sloupcích do více řádků na serveru SQL Server

  4. Přidat ID automatického přírůstku do stávající tabulky?