PL / SQL Как вернуть все атрибуты в ROW - PullRequest
3 голосов
/ 22 мая 2010

Я не знаю, как вернуть все атрибуты с помощью предложения RETURNING

Я хочу что-то вроде этого:

DECLARE  
    v_user USER%ROWTYPE  
 BEGIN  
     INSERT INTO User 
     VALUES (1,'Bill','QWERTY') 
     RETURNING * INTO v_user;  
END;

RETURNING * INTO получает ошибку, как я могу заменить *?

1 Ответ

4 голосов
/ 23 мая 2010

Было бы здорово, если бы мы могли сделать что-то подобное, но, увы:

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>

Плохие новости, если у вас много столбцов!

Я подозреваю, что логическое обоснование состоит в том, что в большинстве таблиц относительно мало производных столбцов (последовательность, назначенная для идентификатора, sysdate, назначенная для CREATED_DATE и т. Д.), Поэтому большинство значений должны быть уже известны (или, по крайней мере, известны) для процесса вставки.

1012 * редактировать *

Мне было все равно, как вернуть все атрибуты без скучных спецификация каждого столбца;) Может быть это невозможно.

Я думал, что ясно дал понять, но в любом случае: да, в настоящее время невозможно использовать * или некоторый подобный неспецифический механизм в предложении RETURNING.

...