2010-12-03 67 views
1

我想将一些数据从一个表移动到另一个表。我写了一个我认为会起作用的查询,但在目标表中,有一列包含一个id。我想要插入的每一行都有不同的连续ID。这里是一个simplificated例如:Oracle多重插入,不同的ID

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; 

有没有产生连续的IDS和使用“插入所有进入”查询的方法吗?序列?如果它可以用一个序列来做...有什么方法可以做到没有序列?

感谢和问候!

回答

2

的正确方法在Oracle中生成id的方法是使用序列。

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' 

就我个人而言,我使用触发器来自动调用插入序列,但也有人不喜欢使用触发器。

+0

答案很好,但我期望在不使用任何序列的情况下执行此操作,即使知道这是最佳解决方案。 – deb 2010-12-03 10:07:00

2

你可以使用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'; 
+0

是的,正如你所说我的查询确实比较复杂......也许我提出的例子并不是最好的。我使用ROWNUM重写了我的查询,它的工作原理与我一样!谢谢您的回答。 – deb 2010-12-03 10:04:23