gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:11:32 25 4
gpt4 key购买 nike

我正在尝试在表中创建新行。表上有两个约束-一个约束在键字段(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com