Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How to avoid the error - "ORA-00001: unique constraint violated"

R. RoyalDec 7 2009 — edited Dec 8 2009
I've this tables (with more 1000 records):

CREATE TABLE MY_TAB
(
  PK_ID           VARCHAR2(32),
  COD_ID           VARCHAR2(32),
  NAME_FIRST       VARCHAR2(32),
  NAME_LAST        VARCHAR2(32),
  EMAIL            VARCHAR2(32),
  CITY           VARCHAR2(32),
  FLAG             CHAR(1)
);

ALTER TABLE MY_TAB
ADD (CONSTRAINT PK_PK_ID PRIMARY KEY (PK_ID));
The primary key PK_ID is linked in this way:
name_last||'_'||substr(name_first,1,3)||substr(cod_id,-2)

PK_ID................COD_ID.........NAME_FIRST.........NAME_LAST.........EMAIL........CITY.......FLAG
LUISS_SAM99...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........1
SIMPSON_TOM99...009345........TOMMY..............SIMPSON.............XXX@bb.com..........LONDON........1
KAYNE_JOH99...009656........JOHN..............KAYNE.............YYYY@bb.com..........PARIS........1

I'd like a stored procedure with in INPUT COD_ID that insert a new record with same values of the previous record BUT with PK_ID||'_'||progressive (or other value) and put FLAG='0'

For example:
execute INS_DUP_COD ('009999');

PL/SQL procedure successfully completed
My Output Will be:

PK_ID................COD_ID.........NAME_FIRST.........NAME_LAST.........EMAIL........CITY.......FLAG
LUISS_SAM99...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........1
LUISS_SAM99_1...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........0
SIMPSON_TOM99...009345........TOMMY..............SIMPSON.............XXX@bb.com..........LONDON........1
KAYNE_JOH99...009656........JOHN..............KAYNE.............YYYY@bb.com..........PARIS........1
execute INS_DUP_COD ('009999');

PL/SQL procedure successfully completed
My Output Will be:

PK_ID................COD_ID.........NAME_FIRST.........NAME_LAST.........EMAIL........CITY.......FLAG
LUISS_SAM99...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........1
LUISS_SAM99_1...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........0
LUISS_SAM99_2...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........0
SIMPSON_TOM99...009345........TOMMY..............SIMPSON.............XXX@bb.com..........LONDON........1
KAYNE_JOH99...009656........JOHN..............KAYNE.............YYYY@bb.com..........PARIS........1
execute INS_DUP_COD ('009345');

PL/SQL procedure successfully completed
My Output Will be:

PK_ID................COD_ID.........NAME_FIRST.........NAME_LAST.........EMAIL........CITY.......FLAG
LUISS_SAM99...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........1
LUISS_SAM99_1...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........0
LUISS_SAM99_2...009999........SAMMY..............LUISS.............ddd@bb.com..........ROME........0
SIMPSON_TOM99...009345........TOMMY..............SIMPSON.............XXX@bb.com..........LONDON........1
SIMPSON_TOM99_1...009345........TOMMY..............SIMPSON.............XXX@bb.com..........LONDON........0
KAYNE_JOH99...009656........JOHN..............KAYNE.............YYYY@bb.com..........PARIS........1

How Can I write my stored procedure to avoid "ORA-00001: unique constraint violated" on PK_ID column?

Thanks in advance!
This post has been answered by 730428 on Dec 7 2009
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jan 5 2010
Added on Dec 7 2009
20 comments
1,847 views