繁体   English   中英

Oracle 12c-使用另一个表中的序列插入重复项

[英]Oracle 12c - insert duplicates with sequence from another table

我有以下插入语句失败,并违反了ORA-00001唯一约束(这是PK违反)。 PK在c_id,f_id上。

INSERT 
   INTO ab (c_id
          , d_amt
          , e_date
          , f_id)
   SELECT c_id
        , d_amt
        , e_date
        , (SELECT NVL(MAX(f_id) + 1,1) --this is causing the ORA-00001 error on duplicate c_id's
             FROM ab
            WHERE c_id = cx.c_id) f_id
     FROM xx cx

我的目标是将数据从xx插入到ab中,如果xx中有重复的c_id值,则insert语句应为第一个之后的每个重复项将f_id值增加1。

您可以将子查询更改为外部联接的内联视图,然后使用解析函数来递增:

INSERT 
   INTO ab (c_id
          , d_amt
          , e_date
          , f_id)
   SELECT cx.c_id
        , cx.d_amt
        , cx.e_date
        , NVL(ab2.f_id, 0) + ROW_NUMBER() OVER (PARTITION BY cx.c_id ORDER BY NULL)
     FROM xx cx
     LEFT JOIN (SELECT c_id, MAX(f_id) as f_id FROM ab GROUP BY c_id) ab2
     ON ab2.c_id = cx.c_id

db <> fiddle演示

ORDER BY NULL有点麻烦。 如果您关心插入行中的顺序,则可以按cx可用的另一列中的一个或多个排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM