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!