Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PL/SQL Jak zwrócić wszystkie atrybuty w ROW

Byłoby fajnie, gdybyśmy mogli coś takiego zrobić, ale niestety:

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>

Uważam, że może być zarejestrowane żądanie zmiany tej funkcji, ponieważ wiem, że wiele osób tego chce. Ale na razie wszystko, co możemy zrobić, to długa specyfikacja każdej kolumny:

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>

Złe wieści, jeśli masz dużo kolumn!

Podejrzewam, że uzasadnienie jest takie, że większość tabel ma stosunkowo niewiele kolumn pochodnych (sekwencja przypisana do identyfikatora, sysdate przypisana do CREATED_DATE itp.), więc większość wartości powinna być już znana (lub przynajmniej znana) w procesie wstawiania.

edytuj

Myślałem, że wyjaśniłem, ale i tak:tak, obecnie nie można użyć * lub jakiś podobny niespecyficzny mechanizm w klauzuli 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. Podziel duży plik tekstowy/CSV na wiele plików w PL SQL

  2. Łącz i grupuj wiele wierszy w Oracle

  3. Jak wyświetlić parametr wyjściowy CLOB w TOAD z procedury składowanej Oracle?

  4. Zapytanie Oracle SQL w celu wykluczenia wierszy zawierających znaki nieliczbowe

  5. Jak napisać literał tabeli w Oracle?