我通过从CURSOR中选择数据插入到表中,但我得到一个唯一的约束违规。 下面是该查询:唯一约束(SchemaName.DATA1_PK)
CURSOR cRestParmRestData(nSetId in number) IS
SELECT distinct rstdata.rest_id,
rstdata.rest_inst_id,
rstdata.pren_set_id,
rstdata.cusm_set_id,
rstdata.asn_set_typ,
rstdata.mkt_id,
rstdata.crte_ts,
rstdata.crte_user_id
FROM stg_rfm2_rest_data rstdata,
stg_rfm2_rest rest,
stg_rfm2_sets srs,
stg_rfm2_dset srd
WHERE (
rest.rest_id = rstdata.rest_id
AND rest.rest_inst_id = rstdata.rest_inst_id
AND rstdata.stg_restaurant_id = rest.stg_restaurant_id
)
and srs.set_id = rstdata.cusm_set_id
and srd.set_id = srs.set_id
and rstdata.cusm_set_id = nSetId
and srs.typ = nCustomParmSetTyp;
IF (rcRestSets.sets_typ IN (nCustomParmSetTyp)) THEN
BEGIN
vBlockDescription := 'INSERT INTO rest_data for setId:'||rcRestSets.sets_set_id;
for rcRstData in cRestParmRestData(nSetId => rcRestSets.sets_set_id) loop
INSERT INTO rest_data
(rest_id,
rest_inst_id,
pren_set_id,
cusm_set_id,
asn_set_typ,
mkt_id,
crte_ts,
crte_user_id)
VALUES
(rcRstData.rest_id,
rcRstData.rest_inst_id,
rcRstData.pren_set_id,
rcRstData.cusm_set_id,
rcRstData.asn_set_typ,
rcRstData.mkt_id,
sysdate,
rcRstData.crte_user_id);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
nTemp := pkg_misc.fn_insertLogDetail(nLogId, 'Parameter Set', vBlockDescription, null, null,TO_CHAR(SQLCODE)||' , '||'Error '||dbms_utility.format_error_backtrace, SUBSTR(SQLERRM,1,500)||'sets_crtr_node_id =>'||rcRestSets.sets_crtr_node_id);
vLogStus :=1;
END;
end if;
我不知道我做错了,我得到异常
“ORA-00001:唯一约束(EU3MARKETS.REST_DATA_PK)violatedsets_crtr_node_id => 326” -at错误ORA-06512:在EU3MARKETS.PKG_LOADRFM2RESTAURANTDB,线983(INSERT INTO REST_DATA线)
我收集从表“stg_rfm2_rest”,“stg_rfm2_rest_data”等数据转换成光标和使用该光标插入另一个表中数据“” rest_data“ – 2015-04-02 09:17:30
阿右,对不起,我误读了'stg_rfm2_'如' stg_rfm2.' Duh!在这种情况下,您仍然选择在rest_data表中已经存在的pk列中具有值的行,您需要跳过这些行或找到另一种使它们唯一的方法。 – Boneist 2015-04-02 09:29:42