Oracle将select max + 1插入到同一个表

时间:2017-01-06 18:43:38

标签: sql database oracle oracle11g

我认为这很容易,但我无法理解这一点。我想避免使用pl / sql,最好是希望在普通的sql中完成。所以在下面的sql中我试图通过从另一个表employee_agreement中选择插入到agreement_tbl中。员工协议表返回大约6000行。因此,对于每行插入我想要的是在AGREEMENT_NBR列中插入的唯一max(agreement_nbr)+ 1。

问题是,因为sql首先执行,所以max(agreement_nbr)总是相同,比如说5000,当我尝试插入max(agreement_nbr)时,它会尝试插入值5000的“唯一约束异常”所有6000个插页。如何从选择查询中获取每行的唯一max + 1?这可能就像从同一个表中插入和选择一样。任何帮助表示赞赏。感谢

编辑:这是一次性脚本,并且agreement_tbl已经填充了数千条记录。

INSERT
INTO
    Agreement_tbl
    (
        AGREEMENT_NBR,
        Employee_id,
        AGREEMENT_TEXT
    )   
      select            
         (select max(AGREEMENT_NBR)+1 from Agreement_tbl) as AGREEMENT_NBR,
          a.Employee_id ,
         a.AGREEMENT_TEXT
     from  employee_agreement
      -- some where conditions

1 个答案:

答案 0 :(得分:3)

使用rownum代替+1
Rownum的第一行为1,第二行为2。

INSERT
INTO
    Agreement_tbl
.......
      select            
         rownum + (select max(AGREEMENT_NBR) from Agreement_tbl) as AGREEMENT_NBR,
          a.Employee_id ,
         a.AGREEMENT_TEXT
     from  employee_agreement
      -- some where conditions