---以下资源均来自搜索

create sequence

在oracle中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

CURRVAL=返回sequence的当前值
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用法

在oracle中sequence就是序号,每次取的时候它会自动增加。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

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 插入测试');

注:

- 第一次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防止这种情况。

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 序列号相关推荐

  1. CREATE SEQUENCE添加自增序列及NEXT VALUE FOR返回序列号

    From :https://msdn.microsoft.com/zh-cn/library/ff878091.aspx 语法: CREATE SEQUENCE [schema_name . ] se ...

  2. 金仓数据库 KingbaseES SQL 语言参考手册 (16. SQL语句: CREATE SEQUENCE 到 DELETE)

    16. SQL语句: CREATE SEQUENCE 到 DELETE 本章包含以下SQL语句: CREATE SEQUENCE CREATE SERVER CREATE STATISTICS CRE ...

  3. oracle序列号、

    创建即将使用的表 create table supplier (s_codde number(6), sname varchar2(25), contact varchar2(15), phone v ...

  4. Oracle触发器详细 和 Oracle 创建序列号

    由于这段时间要导入旧的数据库数据到新的数据库中,然而旧的数据库和新的数据库有些表的设计或字段不一样, 需要用到触发器,比如新的数据库a表有aid的主键字段(或自动递增),而旧的数据库a表没有aid的主 ...

  5. orcle与mysql的区别_Orcle与MySQL的SQL语法区别:

    Orcle与MySQL的SQL语法区别: 1.在Oracle中用 select * from all_users显示所有的用户,而在MySQL中显示所有数据 库的命令是 show databases ...

  6. 关于mysql和oracle错误的有_关于MySQL与Oracle的区别

    0 查询分组时的区别 Oracle数据库中使用Group By分组时 select 后面的列必须是分组的列(group by(列))或者是用了聚合函数的lie 但是 MySQL中 不需要如此 随便分组 ...

  7. Oracle语句总结

    1. 简单的SELECT 语句  as SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2. 处理NULL NVL函数可把NULL转换成其它类型的符号 编程技巧: NVL ...

  8. ORACLE基础语法学习

    ORACLE 常用的 SQL 语法和数据对象 一 . 数据控制语句 (DML) 部分 1.INSERT ( 往数据表里插入记录的语句 ) INSERT INTO 表名 ( 字段名 1, 字段名 2, ...

  9. Oracle与MySQL性能比较

    2019独角兽企业重金招聘Python工程师标准>>> oracle优点: 1.处理速度快,非常快 2.安全级别高.支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s ...

最新文章

  1. 河南大学明德计划2020计算机学院,河南大学启动“明德计划”
  2. CCS卸载安装过程及所遇问题
  3. gitlab新增ssh
  4. Sonic 开源移动端云真机测试平台 - windows系统下的sonic快速部署演示
  5. StringBuilder的toString方法
  6. busybox rootfs 启动脚本分析(一)
  7. IOS开发之Cocoa编程—— NSUndoManager
  8. 笨办法学 Python · 续 练习 36:简单的计算器
  9. 【转】Linux内核报文收发
  10. .NET Winform 的七段数码显示控件
  11. 红外线人体感应灯arduino_红外线人体感应器的工作原理及电路设计
  12. Atitit.每月数据采集与备份 v4
  13. java qq验证_用Java代码来校验QQ号
  14. 没项目实战经验?分享自学练手的软件测试项目实战+数据库+接口,部署超级简单
  15. 网信耕耘十余载,金融安全3.0时代的缔造者
  16. mysql字符串类型建立全文索引
  17. GitHub的使用(上)
  18. C语言 —— 你不得不知道的 scanf 的高级用法
  19. MySQL并列排名,不占位(并中文排序)
  20. 推荐几个值得关注的编程公众号

热门文章

  1. 【学术】外罚函数与内罚函数
  2. 汤晓丹的第四版计算机操作系统--第九章总结概述
  3. TQ2440 学习笔记—— 1、Windows平台下开发工具安装与环境建立
  4. 好心情与爱谛科技战略合作签约,开启精神疾病定量治疗新篇!
  5. Centos 7下Nagios的安装及配置(完整版)
  6. 6大中文分词工具测试比较
  7. 打造Android的中文Siri语音助手
  8. diskgenius如何在Linux运行,diskgenius怎么用
  9. unity网络实战开发(丛林战争)-正式开发阶段(014-游戏客户端与服务器端连接搭建)
  10. 阿里datav自定义组件 管道插件