更新表时丢失编号

时间:2014-05-29 10:48:54

标签: sql database oracle plsql

我正在通过定义一个游标来更新表,该游标将所有重复的行组合在一起并枚举每个组中的行(从第二个开始计算):

DECLARE
    CURSOR c1
    IS
        SELECT ROWID,
               DENSE_RANK () OVER (ORDER BY column1, column2) group_num,
               column1,
               column2,
               ROW_NUMBER ()
                   OVER (PARTITION BY column1, column2 ORDER BY ROWID)
                   seq_num,
               LEAD (ROWID)
                   OVER (PARTITION BY column1, column2 ORDER BY ROWID)
                   next_rowid
          FROM table
         WHERE (column1, column2) IN (  SELECT column1, column2
                                          FROM table
                                      GROUP BY column1, column2
                                        HAVING COUNT (*) > 1);
BEGIN
    FOR reg IN c1
    LOOP
        UPDATE table
           SET column1 = column1 || '.' || LPAD (reg.seq_num, 5, '0')
         WHERE ROWID = reg.next_rowid;
    END LOOP;
END;

当我有例如。根据条件column1, column2复制的20行所有行都已正确更新,但seq_num 以0结尾的行除外。因此,对于这种情况,我会得到结果:

column1.00001, column1.00002, column1.00003, column1.00004, column1.00005, column1.00006, column1.00007, column1.00008, column1.00009, column1.0001, column1.00011, column1.00012, column1.00013, column1.00014, column1.00015, column1.00016, column1.00017, column1.00018, column1.00019, column1.0002

任何人都知道为什么会这样?

0 个答案:

没有答案