oracle - 插入期间违反唯一约束:为什么? (甲骨文)

标签 oracle unique-constraint

我正在尝试在表中创建新行。表上有两个约束-一个约束在键字段(DB_ID)上,另一个约束一个值是字段ENV的几个约束之一。当我执行插入操作时,我没有将键字段包含为我要插入的字段之一,但是却出现此错误:

unique constraint (N390.PK_DB_ID) violated


这是导致错误的SQL:

insert into cmdb_db 
   (narrative_name, db_name, db_type, schema, node, env, server_id, state, path) 
values 
   ('Test Database', 'DB', 'TYPE', 'SCH', '', 'SB01', 381, 'TEST', '')


我唯一能找到的是,如果手动插入行,Oracle可能会尝试分配一个已经在使用的DB_ID。该数据库中的数据以某种方式从生产数据库中恢复/移动,但是我没有有关如何完成操作的详细信息。

有什么想法吗?

最佳答案

据推测,由于您没有为DB_ID列提供值,因此该值将由表中定义的插入触发器之前的行级填充。该触发器大概是从序列中选择值。

由于数据是从生产数据库移出的(大概是最近的),所以我的下注是复制数据时,序列也不会被修改。我猜想该序列正在生成的值远低于导致错误的表中当前的最大DB_ID值。

您可以通过查看触发器来确定正在使用的序列并执行一个

SELECT <<sequence name>>.nextval
  FROM dual


并将其与

SELECT MAX(db_id)
  FROM cmdb_db


如果我怀疑该序列正在生成数据库中已经存在的值,则可以递增该序列,直到它生成未使用的值为止,或者可以对其进行更改以将INCREMENT设置为非常大的值,一次获取nextval,并将INCREMENT设置回1。

关于oracle - 插入期间违反唯一约束:为什么? (甲骨文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571245/

相关文章:

Oracle 函数 POWER 给出近似结果

sql - Oracle REGEXP_INSTR() 和 "a-z"字符范围与预期不匹配

sql - 在几行中增加唯一值

PHP/MySQL 插入不同的数组值

Java到Excel不写入多个工作表

sql - 多个小删除

java - Java EE 教程源的链接已损坏

SQL:如何使用约束强制执行函数依赖?

sql - PostgreSQL - 为什么我不能在不将复合键声明为唯一的情况下基于唯一列创建复合外键?

php - Yii 不验证 2 列的唯一索引