Oracle创建序列后无法使用序列初始值
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的第一个值。
解决方法
- 第一种方法:在创建序列时添加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开始了
- 第二种方法:写一个触发器监控该表插入时的状态
--触发器
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);
当然这种方法有可能瑕疵,得根据自己需求写相应的触发器。
第三种方法:修改oracle数据库相关设置
出现这样的原因是Oracle从 11.2.0.1版本开始,提供了一个“延迟段创建”特性。当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值。
更改登录用户为权限较高的管理员,设置:
ALTER SYSTEM SET deferred_segment_creation=FALSE;
这样就可以解决了。
Oracle创建序列后无法使用序列初始值相关推荐
- Oracle 创建表、定义序列以及创建触发器
Oracle 创建表.定义序列以及创建触发器 1. 定义序列 CREATE SEQUENCE <序列名>[MAXVALUE N|NOMAXVALUE][MINVALUE N|NOMINVA ...
- “Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常
"Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发异常. 这个问题是我在iis上发布后浏览网页时报的错误.而在本地浏览程序 ...
- Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常
Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端 最开始,连接Oracle 数据是需要安装客户端的,ado.net 后来由于微软未来不再支持 Syste ...
- Oracle用 odp.net 时出现 Oracle.DataAccess.Client.OracleConnection的类型初始值设定项引发异常 问题的解决...
在初次使用 Oracle 时,用ado.net连接数据,出现 "Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发异常 的提 ...
- oracle创建数据库后干什么,手动创建Oracle数据库之前因后果
对于许多数据库管理员来说,Oracle究竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题. 如果你想通过一个应用程序操控使用这个数据 ...
- python生成指定长度的列表_python怎样创建具有一定长度和初始值的列表
展开全部 python的数据是可以动态2113增长的,直接定义使用5261a=[]即可: 比如:a=[0,1,2],这时a[0]=0, a[1]=1, a[[2]=2:如果4102数组想a想定义165 ...
- oracle创建自增id(序列)
创建序列 CREATE SEQUENCE TEST01_ID_SEQ --创建序列的名称-->TEST01_ID_SEQ MINVALUE 1 --最小值 NOMAXVALUE --不设置最大值 ...
- oracle创建索引后sqlldr导入错误
SQL*Loader-951: Error calling once/load initialization ORA-26002: Table TABLE_LOG has index defined ...
- oracle序列创建及使用,Oracle创建和使用序列
Oracle创建和使用序列 1 语法 create sequence 序列名称 2 创建序列 SQL> create sequence emp_seq; Sequence created. 序列 ...
最新文章
- 兼容低版本迅雷的js调用
- Python 实现程序的单一实例
- 前端学习(2798):实现图片预览的效果
- Ext.data.SimpleStore的使用方法
- c语言 链表首部插入数据,在链表中插入数据!求助!!!
- java如何代码生成矩形_Java中能不能创建不是矩形的窗口。
- linux 系统调试工具,Linux 系统调试...
- vue音乐播放器笔记
- 西门子主程序调用子程序_子程序编程举例说明-广数m98调用子程序实例-西门子子程序调用实例...
- Cesium 源码解析 Model(二)
- 计算机run常用命令,Run-Command
- 两群羊和一只狼,两只狮子
- 硬件十万个为什么——运放篇(三)如何估算多级放大器的频宽
- C#基于虹软SDK的人脸识别签到系统
- 网络安全的魔法——社会工程学
- 新红楼造型雷死人 有才网友改编老版经典台词
- TreeView的使用方法
- matlab 仿真光学实验报告,光学实验数值仿真的三种方法及MATLAB实现
- 最清晰!一篇文章读懂 OceanBase 最新的产品家族
- html5游戏偷菜源码,偷菜游戏原码