根据最大值生成主键

时间:2013-10-10 17:52:01

标签: oracle oracle11g

我的数据库表TableATableA_Stage具有相同的列,我想根据{{TableA_Stage中的最大值,将TableA中的记录复制到TableA生成主键1}}。

我尝试了这个sql并且它没有工作,因为插入了相同的主键值:

insert into tableA(col_pk, col1, col2)
  select (
          select max(col_pk)+1 
            from tableA
          ),
         col1, col2
   from tableA_Stage

我正在寻找sql语句来复制记录

3 个答案:

答案 0 :(得分:0)

这就是你想要实现的目标。但这样做并不是一个好主意。

insert into tableA
(col_pk, col1, col2)
select (select max(col_pk) from tableA) + col_pk,
       col1, col2
from tableA_Stage

答案 1 :(得分:0)

也许你应该把你的密钥生成为:

select
  Coalesce((select max(col_pk) from tablea),0) + rownum
  col2,
  ...

答案 2 :(得分:0)

您需要找到tableA中的最大PK值与tableA_Stage中的最小PK值之间的差异,并将该差值加1加到tableA_Stage的PK值。您只是将tableA的最大PK值加1,这为每一行提供相同的值。你可能想要这样的东西:

insert into tableA(col_pk, col1, col2)
  select (
          (select max(col_pk) from tableA) - (select min(col_pk) from tableA_Stage) + 1 + col_pk
          ),
         col1, col2
   from tableA_Stage