我正在通过定义一个游标来更新表,该游标将所有重复的行组合在一起并枚举每个组中的行(从第二个开始计算):
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
任何人都知道为什么会这样?