确定Oracle数据库表中重复记录的方法

数据库 Oracle
Oracle数据库是一种功能性比较强大的数据库管理系统,Oracle数据库至今为止在数据库市场中仍占有一定的份额,下文中就为大家解析Oracle数据库中表中重复记录的确定方法。

Oracle数据库的开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录。接下来就为大家详细讲解确定Oracle数据库表中重复记录的方法。

下面我们以表code_ref为例来讨论这个问题及其解决办法。

ERROR位于第1行:

ORA-01452: 无法 CREATE UNIQUE INDEX;找到重复的关键字

Oracle系统提示不能对表code_ref创建一个唯一索引,因为系统发现表中存在重复的记录。我们必须首先找到表中的重复记录并删除该记录,才可以创建唯一索引。下面介绍三种不同的方法来确定库表中重复的记录。

一、自关联查询方法

Oracle系统中,对于所有的表都存在一个唯一的列,这就是rowid。对该列使用***(max)或者最小(min)函数可以非常容易地确定重复的行。

二、GROUP BY/HAVING查询方法

利用分组函数GROUP BY/HAVING也很容易确定重复的行。以需要创建唯一索引的列分组并统计每组的个数,很明显如果组中记录数超过1个就存在重复的行。

三、Exception into子句

采用alter table命令中的Exception into子句也可以确定出库表中重复的记录。这种方法稍微麻烦一些,为了使用“excepeion into”子句,必须首先创建EXCEPTIONS表。创建该表的SQL脚本文件为utlexcpt.sql。对于NT系统和UNIX系统,Oracle存放该文件的位置稍有不同,在NT系统下,该脚本文件存放在ORACLE_HOME\Ora81\rdbms\admin目录下;而对于UNIX系统,该脚本文件存放在$ORACLE_HOME/rdbms/admin目录下。

ERROR位于第2行:

ORA-02299:无法验证(SYSTEM.I_CODE_REF)-未找到重复关键字

下面将exceptions表和code_ref表通过rowid关联起来即可得到表code_ref中重复的记录。

通过上文的学习,相信大家现在都已经掌握了确定Oracle数据库表中重复记录的方法,这个技巧在大家以后的工作中会非常有用的,希望能够帮助到大家。

 

责任编辑:迎迎 来源: 电脑初学网
相关推荐

2011-03-04 17:30:42

Oracle数据库

2010-04-28 18:25:51

Oracle数据库

2011-03-29 09:26:35

Oracle数据库

2010-04-13 10:23:40

Oracle数据库

2018-09-11 17:13:23

MySQ数据库重复记录

2010-10-27 16:49:23

Oracle删除重复记

2010-10-13 17:07:46

MySQL删除重复记录

2010-10-13 17:13:17

MySQL重复记录

2010-11-25 15:43:02

MYSQL查询重复记录

2011-03-21 17:25:08

SQL Server数重复记录

2011-05-24 10:04:39

Oracle重复记录

2010-11-15 14:42:03

Oracle查询重复记

2010-07-02 13:50:11

SQL Server数

2010-04-13 10:15:17

Oracle数据库

2010-11-23 14:26:02

MySQL删除重复记录

2010-10-27 16:56:05

Oracle重复记录

2011-03-14 15:47:33

Oracle数据库

2011-05-24 14:13:20

Oracle数据库

2010-09-03 09:49:39

SQL删除

2010-09-03 11:42:04

SQL删除
点赞
收藏

51CTO技术栈公众号