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!

Getting ORA-00001 while using MERGE

560914Sep 18 2008 — edited Sep 18 2008
hi there,

I am loading data from one Oracle table into another, using MERGE. My target table has a primary key constraint on TRANS_DATE, SEQ_NR and FILE_NAME. I have made sure that there are no duplicate rows in the the source table with regard to the target tables's primary key.

The problem is that I am getting ORA-00001: Primary Key Violated ...

my code is as follows:

declare


begin

merge into fact_prepaidcalls_tb TARG
using
(
select
nvl(fact_prepcustomers_tb.subscriberid,0) SUBSCRIBERID,
accnum ACCNUM,
sdrdate TRANS_DATE,
TO_NUMBER(to_char(sdrdate,'yyyymmdd')) DIMDATEID,
return_timeid(sdrdate) DIMTIMEID,
return_peaktimeid(to_char(PAY_SDR.SDRDATE,'hh24miss'),SDRDATE) DIMPEAKTIMEID,
nvl(dim_calltype.dimcalltypeid,0) DIMCALLTYPEID,
sdrduration CHARGEDURATION,
nvl(dim_tds_term.DIMTDStermid,9999) DIMTDSTERMID,
calling CALLING,
called CALLED,
cparty CPARTY,
freetimeused FREETIMEUSED,
creditused CREDITUSED,
creditrebate CREDITREBATE,
servicetax SERVICETAX,
surcharge SURCHARGE,
follow FOLLOW,
nvl(dim_call_location.dimcalllocationid,0) DIMCALLLOCATIONID,
startbalance STARTBALANCE,
priceoption PRICEOPTION,
nvl(dim_cos.dimcosid,0) DIMCOSID,
nvl(debitrate1,0) DEBITRATE1,
debitrate2,
prepaid.pay_sdr.region REGION,
substr(file_name, instr(file_name,'cdr')) FILE_NAME,
seq_nr SEQ_NR,
SYSDATE LOADDATE,
ORIGINNODE
from prepaid.pay_sdr, dim_call_location, dim_calltype, dim_cos, dim_tds_term, fact_prepcustomers_tb
where sdrdate >= to_date('10-Feb-2008 000000','dd-mon-rrrr hh24miss') and
sdrdate <= to_date('10-Feb-2008 235959','dd-mon-rrrr hh24miss') and
fact_prepcustomers_tb.msisdn = prepaid.pay_sdr.accnum and
dim_calltype.calltypeid = prepaid.pay_sdr.type and
dim_call_location.cellid = prepaid.pay_sdr.region and
dim_cos.cosid = prepaid.pay_sdr.cos and
dim_tds_term.termid = prepaid.pay_sdr.term
) SOUR
on
(
TARG.TRANS_DATE = SOUR.TRANS_DATE and
TARG.SEQ_NR = SOUR.SEQ_NR and
TARG.FILE_NAME = SOUR.FILE_NAME
)

when not matched then
--load fact data
insert
( SUBSCRIBERID,
ACCNUM,
TRANS_DATE,
DIMDATEID,
DIMTIMEID,
DIMPEAKTIMEID,
DIMCALLTYPEID,
CHARGEDURATION,
DIMTDSTERMID,
CALLING,
CALLED,
CPARTY,
FREETIMEUSED,
CREDITUSED,
CREDITREBATE,
SERVICETAX,
SURCHARGE,
FOLLOW,
DIMCALLLOCATIONID,
STARTBALANCE,
PRICEOPTION,
DIMCOSID,
DEBITRATE1,
DEBITRATE2,
REGION,
FILE_NAME,
SEQ_NR,
LOADDATE,
CALLCHARGE,
originnode)

values

( SOUR.subscriberid,
SOUR.ACCNUM,
SOUR.TRANS_DATE,
SOUR.DIMDATEID,
SOUR.DIMTIMEID,
SOUR.DIMPEAKTIMEID,
SOUR.DIMCALLTYPEID,
SOUR.CHARGEDURATION,
SOUR.DIMTDSTERMID,
SOUR.CALLING,
SOUR.CALLED,
SOUR.CPARTY,
SOUR.FREETIMEUSED,
SOUR.CREDITUSED,
SOUR.CREDITREBATE,
SOUR.SERVICETAX,
SOUR.SURCHARGE,
SOUR.FOLLOW,
SOUR.DIMCALLLOCATIONID,
SOUR.STARTBALANCE,
SOUR.PRICEOPTION,
SOUR.DIMCOSID,
SOUR.DEBITRATE1,
SOUR.DEBITRATE2,
SOUR.REGION,
SOUR.FILE_NAME,
SOUR.SEQ_NR,
SOUR.LOADDATE,
SOUR.DEBITRATE1,
SOUR.originnode);

commit;

end;
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 16 2008
Added on Sep 18 2008
4 comments
274 views