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

Mav*_*Riz 3 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) 时,它会抛出“唯一约束异常”,因为它尝试为所有 6000 插入值 5000插入。如何从选择查询中获取每行的唯一 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
Run Code Online (Sandbox Code Playgroud)

kro*_*lko 9

使用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
Run Code Online (Sandbox Code Playgroud)