本文介紹了Oracle 12c:插入到具有標識列的表中的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個表,其中一列的類型為Identity Column,它也是主鍵。
CREATE TABLE identity_demo (
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
description VARCHAR2(100) not null
);
然后我插入幾行數據
insert into identity_demo (id, description) values (1,'A');
insert into identity_demo (id, description) values (2,'B');
insert into identity_demo (id, description) values (3,'C');
insert into identity_demo (id, description) values (4,'D');
insert into identity_demo (id, description) values (5,'E');
insert into identity_demo (id, description) values (6,'F');
如果現在要插入未設置值ID的行,則會出現鍵違規
insert into identity_demo (description) values ('G');
ORA-00001:唯一約束(UWE.IDENTITY_DEMO_PK)版本
在此繼續的最佳方式是什么?
推薦答案
手動插入的標識值(1到6)與序列生成器生成的標識值之間存在沖突。您可以通過調整序列生成器來修復它:
ALTER TABLE identity_demo MODIFY (
id GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH LIMIT VALUE));
START WITH LIMIT VALUE
鎖定表,查找最高ID并將內部序列生成器設置為下一個較高的值7
。
如果您不想運行此ALTER TABLE
命令,您可以分隔數字空格,比如手工值為1…999,而手動值為1000…用于自動值。您必須這樣設置您的發電機:
ALTER TABLE identity_demo MODIFY (
id GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1000));
INSERT INTO identity_demo (description) VALUES ('H');
...
6 F
7 G
1000 H
這篇關于Oracle 12c:插入到具有標識列的表中的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,