Oracle
 sql >> база данни >  >> RDS >> Oracle

PL/SQL Как да върнете всички атрибути в ROW

Би било чудесно, ако можехме да направим нещо подобно, но уви:

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>

Вярвам, че може да има записана заявка за промяна за тази функция, защото знам, че много хора я искат. Но за момента всичко, което можем да направим, е дългата спецификация на всяка колона:

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>

Лоши новини, ако имате много колони!

Подозирам, че обосновката е, че повечето таблици имат сравнително малко производни колони (последователност, присвоена на ID, системна дата, присвоена на CREATED_DATE и т.н.), така че повечето стойности трябва вече да са известни (или поне познати) на процеса на вмъкване.

редактиране

Мислех, че го изясних, но както и да е:да, в момента е невъзможно да се използва * или някакъв подобен неспецифичен механизъм в клауза RETURNING.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете празна/празна колона с SELECT заявка в oracle?

  2. SQL:как да разбера дали съдържанието на колона varchar е числово?

  3. Незабавно изпълнение в рамките на Oracle Procedure

  4. SQL Липсва дясна скоба при поръчка по израз

  5. NHibernate 3.2 и Paging Oracle