Loading... > **在使用(安装Oracle自带的示例数据库HR)oracle序列时,创建序列完成,并使用序列值插入数据时报错。** <div class="tip inlineBlock share"> **序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。** **其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。** </div> ```sql [SQL] insert into DEPARTMENTS(DEPARTMENT_ID,DEPARTMENT_NAME,LOCATION_ID) values(dept_deptid_seq.nextval,'support_test1',2700) [Err] ORA-00001: unique constraint (HR.DEPT_ID_PK) violated ``` **首先,Oracle创建序列** ```sql create sequence dept_deptid_seq -- 创建名称为dept_deptid_seq的序列 increment by 10 -- 序列值自增10 start with 200 -- 从200开始 maxvalue 9999 -- 最大值9999 nocache -- 不缓存 nocycle; -- 不重复 ``` **Departments表的表结构**  **尝试取序列值插入到这张表中** ```sql insert into DEPARTMENTS(DEPARTMENT_ID,DEPARTMENT_NAME,LOCATION_ID) values(dept_deptid_seq.nextval,'support_test1',2700); ``` **出现如下报错,大概意思就是违反主键约束。主键是唯一性的,那就是插入了重复的值** > [Err] ORA-00001: unique constraint (HR.DEPT_ID_PK) violated **之前创建的序列是从200开始,查看当前表主键列department_id最大值为350**  **再重新创建一个序列(或删除之前的序列再创建同名序列),起始值大于350,再重新执行insert** ```sql -- 删除序列 drop sequence dept_deptid_seq; --创建序列 create sequence dept_deptid_seq increment by 10 start with 370 maxvalue 9999 nocache nocycle; -- 插入数据 insert into DEPARTMENTS(DEPARTMENT_ID,DEPARTMENT_NAME,LOCATION_ID) values(dept_deptid_seq.nextval,'support_test1',2700); ``` **可以正常的插入到表中了**  扫码关注公众号,获取更精彩的信息~ Last modification:March 22, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏