Скопируйте переменную типа строки в другую - PullRequest
1 голос
/ 13 марта 2019

у меня

l_tab1 table1%rowtype;
l_tab2 table2%rowtype;

Структуры таблиц1 и таблиц2 одинаковы.

Как можно переместить данные из l_tab1 в l_tab2?

теперь я вижу два пути, но мне это не нравится, потому что мне нужно жестко закодировать поля.

1

l_tab2.field1 := l_tab1.field1;
l_tab2.field2 := l_tab1.field2;

2

select * into l_tab2
from table1
where field1 = l_tab1.field1
  and field2 = l_tab1.field2;

3

Я считаю, что это должно быть намного проще, как

insert into l_tab2
values l_tab1;

или что-то подобное без использования полей.

Ответы [ 2 ]

5 голосов
/ 14 марта 2019

Если две таблицы имеют одинаковую структуру, простое назначение должно работать, по крайней мере, начиная с Oracle 11.2.

С таблицами, подобными следующим

create table table1(col1 number, col2 number);
create table table2(col1 number, col2 number);

insert into table1 values (1, 11);
insert into table2 values (2, 22);

у нас есть:

SQL> select * from table1;

      COL1       COL2
---------- ----------
         1         11

SQL> select * from table2;

      COL1       COL2
---------- ----------
         2         22

SQL> declare
  2      l_tab1  table1%rowtype;
  3      l_tab2  table2%rowtype;
  4  begin
  5      select *
  6      into l_tab1
  7      from table1;
  8      l_tab2 := l_tab1;
  9      insert into table2 values l_tab2;
 10  end;
 11  /

PL/SQL procedure successfully completed.

SQL> select * from table2;

      COL1       COL2
---------- ----------
         1         11
         2         22

SQL>
0 голосов
/ 13 марта 2019

Нет способа сделать то, что вы хотите, без указания каждого столбца.

Обходным путем может быть использование коллекции, а не типа записи.В каждой коллекции может быть только 1 запись, но вы сможете сделать это без указания каждого столбца.

Этот ответ содержит более сложный пример, но примерно то, что вам нужно.

https://stackoverflow.com/a/18700073/1811001

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...