需求:删除table_name表中的重复数据;判定重复的标准为:item_1,item_2,item_3的值一样,保留最新的一条
BEGIN LOOP --手动开启本次会话的并行 ALTER SESSION ENABLE PARALLEL DML; --删除分组后重复数据中ROWID最小的数据 DELETE /*+ PARALLEL(8) */ FROM TABLE_NAME WHERE ROWID IN( SELECT /*+ PARALLEL(8) */ MIN(ROWID) FROM TABLE_NAME A GROUP BY A.ITEM_1,A.ITEM_2,A.ITEM_3 HAVING COUNT(*)>1 ); COMMIT; --手动关闭本次会话的并行 ALTER SESSION DIABLE PARALLEL DML; --如受影响行数等于0,则结束循环 EXIT WHEN SQL%ROWCOUNT=0; END LOOP; END;
以上逻辑是重复数据中留下ROWID最大的那条,如需要指定留下哪一条可参考如下:留下CREATE_TIME最新的一条