前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle Sequence创建与使用[通俗易懂]

Oracle Sequence创建与使用[通俗易懂]

作者头像
全栈程序员站长
发布2022-11-02 16:05:07
3800
发布2022-11-02 16:05:07
举报

原文地址:https://blog.csdn.net/Karloo/article/details/51423340(记录学习)

1. 创建sequence语句: 实现自增

代码语言:javascript
复制
create table ContestDB  
(  
TID  NUMBER(10) PRIMARY KEY,  
TEAMNUM varchar(50)  not null,  
MARKNUM varchar(50)    
);
CREATE SEQUENCE seq_name-- seq_name为计数器的名字,自定;
INCREMENT BY 1 -- 每次加幅度:1,2,3,....;
START WITH 1 -- 起始序号,以实际生产情况而定;
NOMAXvalue -- 不设置最大值,或设定最大值: maxvalue 9999;
NOCYCLE -- 一直累加,不循环; 或循环使用 cycle ;
CACHE 10; --设置缓存序列个数,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
--创建一个触发器 
CREATE TRIGGER ContestDB_trigger  
BEFORE INSERT ON ContestDB  
FOR EACH ROW  
WHEN (new.TID is null) --只有在tid为空时,启动该触发器生成tid号 
begin  
select ContestDB_sequence.nextval into :new.TID from sys.dual;  
end;

2. 修改sequence:

Alter sequence 可以修改sequence(除起始值)步幅、最大/最小值、是否循环、缓存个数 这些参数;

例:

代码语言:javascript
复制
Alter Sequence seq_name  
Increment  By  2 
Maxvalue 9999
Cycle
Cache 5;

需要修改sequence的起始值,则需要删除原有sequence,re-create重新创建;

3. 应用sequence:

  • sequence创建完成后,就可以使用sequence的两个参数 currvalnextval
    • currval查询sequence的当前值:select seq_name.currval from dual;
    • nextval查询sequence下一个值:select seq_name.nextval from dual;

例:对某一张表使用:

代码语言:javascript
复制
insert into tb_name(id,name) values(seq_name.nextval,'下一个计数');

4. 删除sequence :

代码语言:javascript
复制
drop sequence seq_name;

5. 查询sequence :

查看序列的属性:

代码语言:javascript
复制
select sequence_name, sequence_name, min_value, max_value, increment_by, cycle_flag, order_flag, cache_size, last_number FROM user_sequences;
-- 查询所有序列
select * from user_sequence;
代码语言:javascript
复制
	-- 查询序列的当前值:
SELECT 序列名.currval FROM user_sequences;  
或
select 序列名.currval  from dual;
-- 查询序列的下一值:
SELECT 序列名.nextval FROM user_sequences;
或
select 序列名.nextval  from dual;

6.附加:

  • 1、currval是取当前值,所以一个新的计数器sequence必须先使用nextval后才可以使用currval否则会报错;
  • 2、nextval是取下一个值,但第一次使用时取的是初始值,之后正常取下一个,且如果一个语句(不同的子句)里面有多个nextval,它们的取值可能是不同的;
  • 3、如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,cache里面的取完后,oracle自动再取一组到cache。

优点:存取的快些,尤其是并发访问时。 缺点:使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在创建的时候用nocache防止这种情况。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180343.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档