[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
?
Solved

Why is it saying "unique constraint violated"?

Posted on 2009-05-19
5
Medium Priority
?
780 Views
Last Modified: 2013-12-07
I am copying a table from one database to another i.e. ACCOUNTING.EXPENSES to FINANCING.EXPENSES
I want to maintain the primary keys (column 'ID') so I have my triggers off. However when I proceed to copy my tables it kept saying 'unique constraint violated' on the primary keys.

I don't know what's wrong with it. Pls help. Thanks.
INSERT INTO FINANCING.EXPENSES (ID, EMPLOYEE_ID, AMOUNT, DATE_ENTERED, DESCRIPTION, ACTUAL_INVOICE_RATE)
SELECT ID, EMPLOYEEID, AMOUNT, DATE, COMMENTS, RATE
FROM ACCOUNTING.EXPENSES 
WHERE EMPLOYEEID = 12345;

Open in new window

0
Comment
Question by:Corinne_09
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24426626
as the error message says: the primary key constraint is violated by the existing + inserted data.
means that either you copy duplicated key values, OR at least 1 row of the inserted data has a primary key value that is already in the destination table.

to solve, you need to either use the MERGE statement, or put a LEFT JOIN + WHERE to discard the rows that are already present, and eventually add a UPDATE statement (best before the insert) to do the updates, if needed (=> or as said, use the MERGE statement instead):
http://www.psoug.org/reference/OLD/merge.html
0
 

Author Comment

by:Corinne_09
ID: 24426658
The reason why I'm asking this question is because FINANCING.EXPENSES is an empty table, so there is no way the PK constraint is being violated if I'm just inserting new values. Also, both FINANCING.EXPENSES and ACCOUNTING.EXPENSES have a PK constraint enabled, so I don't understand why there would be duplicated keys in ACCOUNTING.EXPENSES in the first place.
0
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 1500 total points
ID: 24426702
>so there is no way the PK constraint is being violated if I'm just inserting new values.
yes, if the inserted data itself contains duplicate values
0
 
LVL 60

Expert Comment

by:HainKurt
ID: 24432588
or there are triggers on the inserted table doing some  other inserts to other tables which creates problem... did you check FINANCING.EXPENSES? maybe there are some active insert triggers...

or run this query to see whether the query returns duplicate data
SELECT   ID, COUNT (*) rec_count
    FROM accounting.expenses
   -- WHERE employeeid = 12345 -- remove comment to see all duplicate data
GROUP BY ID
  HAVING COUNT (*) > 1;

Open in new window

0
 

Author Closing Comment

by:Corinne_09
ID: 31583240
All the primary keys are unique and all triggers were disabled. There was an issue with case-insensitive data so any difference in lowercase and uppercase values were treated differently, thus causing duplicate values.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why doesn't the Oracle optimizer use my index? Querying too much data Most Oracle developers know that an index is useful when you can use it to restrict your result set to a small number of the total rows in a table. So, the obvious side…
How to Unravel a Tricky Query Introduction If you browse through the Oracle zones or any of the other database-related zones you'll come across some complicated solutions and sometimes you'll just have to wonder how anyone came up with them.  …
Via a live example show how to connect to RMAN, make basic configuration settings changes and then take a backup of a demo database
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question