create sequence 序列号
---以下资源均来自搜索
create sequence
序列号排序的地方。
1、 create sequence
你首先要有create sequence或者create any sequence权限,
CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
NEXTVAL=增加sequence的值,然后返回sequence值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中
可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
SELECT empseq.currval FROM DUAL;
但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,
然后返回增加后的值。CURRVAL 总是返回当前sequence的值,但是在第一次NEXTVAL
初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次sequence的值,
所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
- 如果指定CACHE值,oracle就可以预先在内存里面放置一些sequence,这样存取的快
些。
cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如
数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可
以在create sequence的时候用nocache防止这种情况。
2、 Alter sequence
你或者是该sequence的owner,或者有ALTER ANY sequence权限才能改动sequence。 可
以alter除start值之外的所有sequence参数。如果想要改变start值,必须drop sequence
再re-create。例子:
ALTER sequence emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE;
影响sequence的初始化参数:
sequence_CACHE_ENTRIES =
设置能同时被cache的sequence数目。
可以很简单的Drop sequence
DROP sequence order_seq;
结束
在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。
1、Create Sequence
创建语句如下:
CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
2、得到Sequence值
定义好sequence后,你就可以用currVal.nextVal取得值。
CurrVal:返回 sequence的当前值
NextVal:增加sequence的值,然后返回 增加后sequence值
SELECT Sequence名称.CurrVal FROM DUAL;
如得到上边创建Sequence值的语句为:
select seqtest.currval from dual
在Sql语句中可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- INSERT语句的values中
- UPDATE 的 SET中
如在插入语句中
insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');
注:
CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
3、Alter Sequence
拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。
alter sequence SEQTEST maxvalue 9999999;
另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。
4、Drop Sequence
DROP SEQUENCE seqTest;
一个例子
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;建解发器代码为:create or replace trigger tri_test_idbefore insert on S_Depart --S_Depart 是表名for each row
declarenextid number;
beginIF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名select SEQ_ID.nextval --SEQ_ID正是刚才创建的into nextidfrom sys.dual;:new.DepartId:=nextid;end if;
end tri_test_id;
OK,上面的代码就可以实现自动递增的功能了。
注::new 代表 数据改变后的新值,相对应的有 :old 原值
:= 代表 赋值
:nextid表示引用sqlplus中定义的变量
参考文档:
http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html
create sequence 序列号相关推荐
- CREATE SEQUENCE添加自增序列及NEXT VALUE FOR返回序列号
From :https://msdn.microsoft.com/zh-cn/library/ff878091.aspx 语法: CREATE SEQUENCE [schema_name . ] se ...
- 金仓数据库 KingbaseES SQL 语言参考手册 (16. SQL语句: CREATE SEQUENCE 到 DELETE)
16. SQL语句: CREATE SEQUENCE 到 DELETE 本章包含以下SQL语句: CREATE SEQUENCE CREATE SERVER CREATE STATISTICS CRE ...
- oracle序列号、
创建即将使用的表 create table supplier (s_codde number(6), sname varchar2(25), contact varchar2(15), phone v ...
- Oracle触发器详细 和 Oracle 创建序列号
由于这段时间要导入旧的数据库数据到新的数据库中,然而旧的数据库和新的数据库有些表的设计或字段不一样, 需要用到触发器,比如新的数据库a表有aid的主键字段(或自动递增),而旧的数据库a表没有aid的主 ...
- orcle与mysql的区别_Orcle与MySQL的SQL语法区别:
Orcle与MySQL的SQL语法区别: 1.在Oracle中用 select * from all_users显示所有的用户,而在MySQL中显示所有数据 库的命令是 show databases ...
- 关于mysql和oracle错误的有_关于MySQL与Oracle的区别
0 查询分组时的区别 Oracle数据库中使用Group By分组时 select 后面的列必须是分组的列(group by(列))或者是用了聚合函数的lie 但是 MySQL中 不需要如此 随便分组 ...
- Oracle语句总结
1. 简单的SELECT 语句 as SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2. 处理NULL NVL函数可把NULL转换成其它类型的符号 编程技巧: NVL ...
- ORACLE基础语法学习
ORACLE 常用的 SQL 语法和数据对象 一 . 数据控制语句 (DML) 部分 1.INSERT ( 往数据表里插入记录的语句 ) INSERT INTO 表名 ( 字段名 1, 字段名 2, ...
- Oracle与MySQL性能比较
2019独角兽企业重金招聘Python工程师标准>>> oracle优点: 1.处理速度快,非常快 2.安全级别高.支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s ...
最新文章
- 河南大学明德计划2020计算机学院,河南大学启动“明德计划”
- CCS卸载安装过程及所遇问题
- gitlab新增ssh
- Sonic 开源移动端云真机测试平台 - windows系统下的sonic快速部署演示
- StringBuilder的toString方法
- busybox rootfs 启动脚本分析(一)
- IOS开发之Cocoa编程—— NSUndoManager
- 笨办法学 Python · 续 练习 36:简单的计算器
- 【转】Linux内核报文收发
- .NET Winform 的七段数码显示控件
- 红外线人体感应灯arduino_红外线人体感应器的工作原理及电路设计
- Atitit.每月数据采集与备份 v4
- java qq验证_用Java代码来校验QQ号
- 没项目实战经验?分享自学练手的软件测试项目实战+数据库+接口,部署超级简单
- 网信耕耘十余载,金融安全3.0时代的缔造者
- mysql字符串类型建立全文索引
- GitHub的使用(上)
- C语言 —— 你不得不知道的 scanf 的高级用法
- MySQL并列排名,不占位(并中文排序)
- 推荐几个值得关注的编程公众号