This script can be used to delete duplicate rows from tables. Especially useful if you are migrating data from other sources into an Oracle database and you have to delete repeated data so as to ensure your data is unique as per your new Primary Key contraints which you want to impose on your table.

This script uses the EMP table in the SCOTT schema as an example. To view duplicate rows in your table, use the Script to find duplicate rows . Also, note that I find (and hence delete) the duplicate rows using the empno field, since that is the primay key for the EMP table. For your purposes, you will have to replace the empno reference with your potential primary key field(s).

Back to SQL scripts



SQL> DELETE emp e1
WHERE rowid > (SELECT min(rowid)
FROM emp e2
WHERE e.empno = e2.empno)


To run the code, either cut and paste it onto your favourite editor and save the file to say deleteDuplicates.sql. .

At the SQL*PLUS prompt, execute the script using the syntax
SQL>@deleteDuplicates
On execution, the script delete duplicate rows from the table. Please note that for every row that has been duplicated, only one row remains in the table and all other duplicates are deleted.

Consider the following example using the EMP table:

SQL> SELECT *
2 FROM emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- --------- --------- --------- ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7369 SMITH CLERK 7902 17-DEC-80 800 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

24 rows selected.

SQL> @findDuplicates

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- --------- --------- --------- ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10

20 rows selected.

SQL> @deleteDuplicates

10 rows deleted.

SQL> @findDuplicates

no rows selected

SQL>
SQL>
Back to SQL scripts
Hosted by www.Geocities.ws

1