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)
使用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)