Oracle使用序列后提示違反唯一約束的解決方案
1、問題原因分析
出現(xiàn)這個問題的原因是插入數(shù)據(jù)的時候,由于之前沒有使用序列插入,而是直接插入了一個比當前序列nextval還大的值,即直接將id寫死了。
后面再使用序列插入的時候,如果序列小于該值的話,是可以正常插入的,當序列號等于之前通過ID寫死的方式插入的ID值時,就會出現(xiàn)這種情況。
2、解決方案
2.1 第一步:查詢出約束對應(yīng)的表以及對應(yīng)字段
select a.constraint_name,a.constraint_type,b.column_name,b.table_name from user_constraints a inner join user_cons_columns b on a.table_name = b.table_name where a.constraint_name = 'SYS_C0016709';
2.2第二步:查詢字段對應(yīng)的序列(sequence)的下一次值是多少
-- select 序列名.nextval from dual; select ZHGD_DEVICE_SEQ.nextval from dual;
2.3第三步:查詢數(shù)據(jù)表中對應(yīng)字段的最大值
-- select max(字段) from 表名; select max(ID) from ZHGD_DEVICE;
2.4第四步:修改序列值步進大小,更新序列值
-- alter sequence 序列名 increment by 步進值(自己定義即可,需要超過數(shù)據(jù)庫表中對應(yīng)的最大值); alter sequence ZHGD_DEVICE_SEQ increment by 200;
2.5第五步:按照步進值將序列值新增,并得到下一個序列值
-- select 序列名.nextval from dual; select ZHGD_DEVICE_SEQ .nextval from dual;
2.6第六步:恢復(fù)序列值步進大小為1
--alter sequence 序列名 increment by 1; alter sequence ZHGD_DEVICE_SEQ increment by 1;
3、總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle數(shù)據(jù)庫常用函數(shù)總結(jié)大全
這篇文章主要介紹了Oracle數(shù)據(jù)庫常用函數(shù)總結(jié)的相關(guān)資料,包括數(shù)值、字符、日期、轉(zhuǎn)換等類型,以及如何使用注釋、運算符和處理空值等內(nèi)容,文中給出了詳細的代碼示例,需要的朋友可以參考下2025-12-12
Oracle字符函數(shù)應(yīng)用檢測漢字的方法
這篇文章主要介紹了Oracle字符函數(shù)應(yīng)用檢測漢字的方法,需要的朋友可以參考下2017-03-03

