Oracle несколько вставок, разные идентификаторы - PullRequest
1 голос
/ 03 декабря 2010

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

Table1
Name Telephone Actie
Peter 123456 Y
Michael 111111 Y
George 1234445 N

Table2
Id Name Likes
1 Peter Books
2 Michael Books

Запрос, который я написал:

insert all into table2 (name, likes)
select all.name name, 'Books' likes, from (select o.name
  from table1 o where o.active='Y') all;

Есть ли способ генерировать последовательные идентификаторы и использовать запрос "вставить все в"?Последовательность?Если это можно сделать с помощью последовательности ... есть ли способ сделать это без последовательности?

Спасибо и всего наилучшего!

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Правильный способ генерации идентификаторов в Oracle - использование последовательности.

create sequence seq_table2_id nocache;

Затем при вставке вызова seq_table2_id.nextval.

insert into table2 (id, name, likes)
select seq_table2_id.nextval
,      o.name
,      'Books'
from   table1 o
where  o.active = 'Y'

Лично я использую триггер, чтобы автоматическивызывайте последовательность на вставках, но есть люди, которые не любят использовать триггеры.

2 голосов
/ 03 декабря 2010

Вы можете использовать ROWNUM:

insert into table2 (id, name, likes)
select ROWNUM, all.name name, 'Books' likes from (select o.name
  from table1 o where o.active='Y') all;

Я не уверен, почему у вас есть подзапрос (возможно, ваш реальный запрос более сложный?) Вы могли бы написать:

insert into table2 (id, name, likes)
select ROWNUM, o.name, 'Books' likes 
  from table1 o where o.active='Y';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...