我认为这很容易,但我无法理解这一点。我想避免使用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
答案 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