##1.問題原因分析 出現這個問題的原因是插入數據的時候,由於之前沒有使用序列插入,而是直接插入了一個比當前序列nextval還大的值,即直接將id寫死了。後面再使用序列插入的時候,如果序列小於該值的話,是可以正常插入的,當序列號等於之前通過ID寫死的方式插入的ID值時,就會出現這種情況。 2.解決 ...
1.問題原因分析
出現這個問題的原因是插入數據的時候,由於之前沒有使用序列插入,而是直接插入了一個比當前序列nextval還大的值,即直接將id寫死了。後面再使用序列插入的時候,如果序列小於該值的話,是可以正常插入的,當序列號等於之前通過ID寫死的方式插入的ID值時,就會出現這種情況。
2.解決方案
-- 查詢出約束對應的表以及對應欄位
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';
--第二步:查詢欄位對應的序列(sequence)的下一次值是多少
-- select 序列名.nextval from dual;
select ZHGD_DEVICE_SEQ.nextval from dual;
--第三步:查詢數據表中對應欄位的最大值
-- select max(欄位) from 表名;
select max(ID) from ZHGD_DEVICE;
--第四步:修改序列值步進大小,更新序列值
-- alter sequence 序列名 increment by 步進值(自己定義即可,需要超過資料庫表中對應的最大值);
alter sequence ZHGD_DEVICE_SEQ increment by 200;
--第五步:按照步進值將序列值新增,並得到下一個序列值
-- select 序列名.nextval from dual;
select ZHGD_DEVICE_SEQ .nextval from dual;
--第六步:恢復序列值步進大小為1
--alter sequence 序列名 increment by 1;
alter sequence ZHGD_DEVICE_SEQ increment by 1;