Oracle 12c:插入到具有标识列的表中

Oracle 12c: Insert into Table with Identity Column(Oracle 12c:插入到具有标识列的表中)
本文介绍了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:插入到具有标识列的表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)