Oracle创建序列后无法使用序列初始值

在使用oracle数据库时,遇到了序列的一个问题,即在创建一个序列后,无法获得该序列的第一个值,如下:
  • 首先创建序列
create sequence seq_stu
start with 1
increment by 1
  • 创建表
  create table stu(s_id number not null primary key,s_name varchar2(20),s_age number
)
  • 当前表的数据
    select * from stu;

    可以看出当前表空数据为空。
  • 接下来使用第一步创建的seq_stu序列来给stu表插入一条数据
insert into stu values(seq_stu.nextval,'张三',18);
  • 再次查询stu表


这个时候我们会发现,S_ID的值并不是1,而是1+1,就是说得不到序列seq_stu的第一个值。

解决方法

  1. 第一种方法:在创建序列时添加minvalue属性,代码如下:
--创建序列
create sequence seq_stu_one
start with 1
increment by 1
--使用minvalue属性
minvalue 1
--插入数据
insert into stu values(seq_stu_one.nextval,'seq_stu_one',18);
--查询
select * from stu;

查询结果:

从结果可以看出序列已经可以从1开始了

  1. 第二种方法:写一个触发器监控该表插入时的状态
--触发器
create or replace trigger stu_id_insert
before insert on stu
for each row
declarerow_count number;
beginselect count(*) into row_count from stu;--如果表中没数据if row_count=0 then:new.s_id:=1;else:new.s_id:=seq_stu_one.nextval;end if;
end;
--插入
insert into stu values(null,'seq_stu_one',18);

当然这种方法有可能瑕疵,得根据自己需求写相应的触发器。

  1. 第三种方法:修改oracle数据库相关设置

    出现这样的原因是Oracle从 11.2.0.1版本开始,提供了一个“延迟段创建”特性。当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值。
    更改登录用户为权限较高的管理员,设置:

ALTER SYSTEM SET deferred_segment_creation=FALSE;

这样就可以解决了。

Oracle创建序列后无法使用序列初始值相关推荐

  1. Oracle 创建表、定义序列以及创建触发器

    Oracle 创建表.定义序列以及创建触发器 1. 定义序列 CREATE SEQUENCE <序列名>[MAXVALUE N|NOMAXVALUE][MINVALUE N|NOMINVA ...

  2. “Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常

    "Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发异常. 这个问题是我在iis上发布后浏览网页时报的错误.而在本地浏览程序 ...

  3. Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常

    Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端 最开始,连接Oracle 数据是需要安装客户端的,ado.net 后来由于微软未来不再支持 Syste ...

  4. Oracle用 odp.net 时出现 Oracle.DataAccess.Client.OracleConnection的类型初始值设定项引发异常 问题的解决...

    在初次使用 Oracle 时,用ado.net连接数据,出现 "Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发异常 的提 ...

  5. oracle创建数据库后干什么,手动创建Oracle数据库之前因后果

    对于许多数据库管理员来说,Oracle究竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题. 如果你想通过一个应用程序操控使用这个数据 ...

  6. python生成指定长度的列表_python怎样创建具有一定长度和初始值的列表

    展开全部 python的数据是可以动态2113增长的,直接定义使用5261a=[]即可: 比如:a=[0,1,2],这时a[0]=0, a[1]=1, a[[2]=2:如果4102数组想a想定义165 ...

  7. oracle创建自增id(序列)

    创建序列 CREATE SEQUENCE TEST01_ID_SEQ --创建序列的名称-->TEST01_ID_SEQ MINVALUE 1 --最小值 NOMAXVALUE --不设置最大值 ...

  8. oracle创建索引后sqlldr导入错误

    SQL*Loader-951: Error calling once/load initialization ORA-26002: Table TABLE_LOG has index defined ...

  9. oracle序列创建及使用,Oracle创建和使用序列

    Oracle创建和使用序列 1 语法 create sequence 序列名称 2 创建序列 SQL> create sequence emp_seq; Sequence created. 序列 ...

最新文章

  1. 兼容低版本迅雷的js调用
  2. Python 实现程序的单一实例
  3. 前端学习(2798):实现图片预览的效果
  4. Ext.data.SimpleStore的使用方法
  5. c语言 链表首部插入数据,在链表中插入数据!求助!!!
  6. java如何代码生成矩形_Java中能不能创建不是矩形的窗口。
  7. linux 系统调试工具,Linux 系统调试...
  8. vue音乐播放器笔记
  9. 西门子主程序调用子程序_子程序编程举例说明-广数m98调用子程序实例-西门子子程序调用实例...
  10. Cesium 源码解析 Model(二)
  11. 计算机run常用命令,Run-Command
  12. 两群羊和一只狼,两只狮子
  13. 硬件十万个为什么——运放篇(三)如何估算多级放大器的频宽
  14. C#基于虹软SDK的人脸识别签到系统
  15. 网络安全的魔法——社会工程学
  16. 新红楼造型雷死人 有才网友改编老版经典台词
  17. TreeView的使用方法
  18. matlab 仿真光学实验报告,光学实验数值仿真的三种方法及MATLAB实现
  19. 最清晰!一篇文章读懂 OceanBase 最新的产品家族
  20. html5游戏偷菜源码,偷菜游戏原码

热门文章

  1. PHP的self和static区别
  2. 关于c3p0的配置问题
  3. Chromium QUIC逻辑
  4. Element-ui 步骤条功能拓展——动态生成步骤条
  5. ucos 中的 OS_PRIO_SELF
  6. 应用架构B/S与C/S优劣比较(一)
  7. 如果你喜欢上了一个程序员小伙,献给所有的程序员女友
  8. php取整函数和随机数函数
  9. git commit前进行checkstyle --pre-commit并优化了checkstyle速度
  10. 无向图邻接表的深度优先遍历