在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

ORACLE中怎么批量删除无主键重复数据

112次阅读
没有评论

共计 2116 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章给大家介绍 ORACLE 中怎么批量删除无主键重复数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1. 需求说明

TEST 表情况说明:

按月进行分区的分区表

未定义主键或唯一索引

包含 COL1,COL2,COL3,INSERTTIME 四列

现需要删除 2019 年 3 月 31 日当天存在的重复数据

2. 解决方法 2.1 确认无重复数据的记录数

SELECT COUNT(1) FROM ( SELECT COL1,COL2,COL3,INSERTTIME FROM TEST PARTITION(P201903) A 
 WHERE INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01 
 GROUP BY COL1,COL2,COL3
);

2.2 梳理需要筛选的数据

由于原表 A 数据量特别大,此处新建一张表将需要处理的数据单独存放

CREATE TABLE TEST_TMP NOLOGGING AS
SELECT /*PARALLEL +8 */ A.*,A.ROWID ROWID_OLD FROM TEST PARTITION(P201903) A 
 WHERE INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01

2.2 确认需要删除的数据

理论上而言需要删除和需要保留的数据记录数应相等

-- 需要删除的数据记录数  
SELECT COUNT(1) FROM TEST PARTITION(P201903) A WHERE ROWID IN ( SELECT MIN(ROWID_OLD) ROWID_OLD FROM TEST_TMP 
 WHERE INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01  
 GROUP BY COL1,COL2,COL3,INSERTTIME 
 HAVING COUNT(1)   1)
AND INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01 
-- 需要保留的数据记录数  
SELECT COUNT(1) FROM TEST PARTITION(P201903) A WHERE ROWID NOT IN ( SELECT MIN(ROWID_OLD) ROWID_OLD FROM TEST_TMP 
 WHERE INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01  
 GROUP BY COL1,COL2,COL3,INSERTTIME 
 HAVING COUNT(1)   1)
AND INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01

2.3 利用分批提交删除重复数据

DECLARE
 TYPE ROWID_LIST IS TABLE OF UROWID INDEX BY BINARY_INTEGER;
 ROWID_INFOS ROWID_LIST;
 I NUMBER;
 CURSOR C_ROWIDS IS (SELECT MIN(ROWID_OLD) ROWID_OLD
 FROM TEST_TMP 
 WHERE INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01  
 GROUP BY COL1,COL2,COL3,INSERTTIME
 HAVING COUNT(1)   1);
 BEGIN
 OPEN C_ROWIDS;
 LOOP
 -- 此处 LIMIT 后的值为分批提交的记录数,可以根据实际情况调整
 FETCH C_ROWIDS BULK COLLECT INTO ROWID_INFOS LIMIT 10000;
 FORALL I IN 1..ROWID_INFOS.COUNT
 -- 如下的 DELETE 语句为分批提交实际需要执行的部分
 DELETE FROM TEST WHERE ROWID=ROWID_INFOS(I);
 COMMIT;
 EXIT WHEN ROWID_INFOS.COUNT 10000;
 END LOOP;
 CLOSE C_ROWIDS;
 END;

2.4 确认无重复数据

SELECT * FROM ( SELECT COL1,COL2,COL3,INSERTTIME FROM TEST PARTITION(P201903) A 
 WHERE INSERTTIME  = DATE 2019-03-31  AND INSERTTIME   DATE 2019-04-01 
 GROUP BY COL1,COL2,COL3,INSERTTIME
 HAVING COUNT(1) 1 )
);

关于 ORACLE 中怎么批量删除无主键重复数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2116字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 精品无人区无码乱码大片国产 | 国产精品一亚洲av日韩av欧 | 免费在线观看一级毛片 | 久久99热久久精品99 | 九九99在线视频 | 免费无遮挡无码视频网站 | 国产一区二区日韩欧美在线 | 国产精品第一页第一页 | 在线视频一区二区三区在线播放 | 52综合精品国产二区无码 | 久久国产精品无码网站 | 久久久久久久久综合 | 裸身美女无遮挡永久免费视频 | 免费的成人a视频在线观看 免费的国语一级淫片 | 亚洲一区二区三区av天堂 | 99这里只精品热在线获取 | 中国美女福利视频在线观看 | 麻豆影视在线观看 | 亚洲精品二区国产综合野狼 | 欧美激情在线观看一区二区三区 | 人妻少妇乱子伦无码视频专区 | 国产精品自在线拍国产手青青机版 | 午夜无码片在线观看影院 | 久久亚洲国产成人精品性色 | 午夜在线观看免费影院 | 久久亚洲精品无码aⅴ大香 久久亚洲精品无码av | 亚洲第一av导航av尤物 | 午夜一级毛片不卡 | 日本大乳高潮视频在线观看 | 国产日韩欧美二区 | 九九九精品视频免费 | 午夜影院在线 | 亚洲 另类色区 欧美日韩 | 在线观看视频欧美 | 色综合色综合色综合色综合 | 夜夜躁狠狠躁日日躁2002 | 99久久国产综合精品女不卡 | 女人被狂躁c到高潮视频 | 国产精品嘿咻嘿咻在线播放 | 久久美| 天天看天天碰 |