【问题标题】:UPDATE in procedure ORA-00001更新过程 ORA-00001
【发布时间】:2012-11-20 09:41:04
【问题描述】:

我在过程中遇到了 UPDATE 问题。程序编译和我看到(DBMS...)结果示例 100 条记录和错误
ORA-00001: unique constraint violated (CUSTOMER_INFO_COMM_METHOD_UX)

我的更新:

UPDATE customer_info_comm_method_tab SET Value=wynikOK WHERE 
         customer_id=cus_rec.customer_id AND method_id='E_MAIL' AND Value = p_stringWyn;
  1. wynikOK - 实际新值
  2. cus_rec.customer_id - 来自光标的实际 customer_id
  3. p_stringWyn - 表中的旧值

键基于我使用的三个属性(CUSTOMER_ID、VALUE、METHOD_ID)

当然我不能删除索引 CUSTOMER_INFO_COMM_METHOD_UX 因为它不是我的数据库

如果我评论更新程序编译 100% 没有错误,但我需要进行此更新

【问题讨论】:

  • 我不确定你的问题是什么。您违反了唯一键约束。消除此错误的唯一方法是不违反该约束。
  • “如果我评论更新程序编译 100% 没有错误”--- 所以评论吧!
  • ZERKMS:但我必须做这个更新
  • @Przemek:您不能执行违反约束的更新。添加了约束,因此您不会破坏完整性,但您希望这样做。所以要么改变主意,要么移除约束。
  • 那么要么您的唯一约束(主键)不合适,您应该选择另一个主键,或者您需要重新考虑更新到该值并以不同方式回答问题的要求。

标签: oracle plsql indexing sql-update


【解决方案1】:

这意味着您的新值 (wynikOK) 导致违规。 customer_id 、您的新值(wynikOK)和方法 id 的组合已经存在于表的另一行中。但这必须是独一无二的......

如果这个值组合(客户,价值,方法)不是唯一的,那么删除表中的唯一约束..

其他值必须是唯一的。尝试为您的新值附加一些字符串,以便它是唯一的。假设您的值是 1234,请尝试将日期附加到该值 1234_23112012 以便它始终是唯一的。

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2020-06-02
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多