【问题标题】:Unique constraint (SchemaName.DATA1_PK)唯一约束 (SchemaName.DATA1_PK)
【发布时间】:2015-06-07 01:18:09
【问题描述】:

我通过从 CURSOR 中选择将数据插入到表中,但我遇到了唯一约束违规。 这是查询:

 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) 违反了sets_crtr_node_id =>326”-在错误 ORA-06512:在 EU3MARKETS.PKG_LOADRFM2RESTAURANTDB,第 983 行(插入到 REST_DATA 行)

【问题讨论】:

    标签: sql oracle plsql primary-key unique-constraint


    【解决方案1】:

    您正在插入作为主键的 ID 值之一,不允许重复值。检查数据库中的主键值并插入唯一的id。

    【讨论】:

      【解决方案2】:

      问题似乎是您从 rest_data 表中选择数据(包括您的 pk 列),然后尝试将它们重新插入同一个表中。由于您没有更改 pk 列中的值,因此您实际上是在尝试创建重复行,这是约束禁止的。

      你到底想做什么,为什么?

      另外,当您可以采用基于集合的insert into ... select ... 方法时,为什么要采用程序/逐行方法?这将更快更容易维护!

      【讨论】:

      • 我正在将表 'stg_rfm2_rest' 、 'stg_rfm2_rest_data ' 等中的数据收集到一个 CURSOR 中,并使用这个 CURSOR 将数据插入另一个表 ''rest_data "
      • 对,对不起;我将stg_rfm2_ 误读为stg_rfm2. Duh!在这种情况下,您仍在选择在 pk 列中具有值的行,这些列已经存在于 rest_data 表中。您需要跳过这些行或找到另一种使它们独一无二的方法。
      猜你喜欢
      • 2015-03-06
      • 2012-10-27
      • 2019-09-25
      • 2021-01-22
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多