oracle创建sequence语法_oracle sequence使用

oracle创建sequence语法_oracle sequence使用先假设有这么一个表:createtableS_Depart(DepartIdINTnotnull,DepartNameNVARCHAR2(40)notnull,DepartOrderINTdefault0,constraintPK_S_DEPARTprimarykey(DepartId));

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

先假设有这么一个表:

create

table
S_Depart (
DepartId

INT

not

null
,
DepartName NVARCHAR2(

40
)
not

null
,
DepartOrder

INT

default

0
,

constraint
PK_S_DEPART
primary

key
(DepartId)
);

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 — 每次加几个
START WITH 1 — 从1开始计数
NOMAXVALUE — 不设置最大值
NOCYCLE — 一直累加,不循环
CACHE 10; –设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为———NOCACHE
针对S_Depart创建的sequence如下:

create
sequence S_S_DEPART
minvalue

1

maxvalue

999999999999999999999999999

start

with
1

increment

by

1

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 S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,

12345

,
1
);

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 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE — 到10000后从头开始
NOCACHE ;

影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;

一个简单的例子:
createsequence SEQ_ID
minvalue
1
maxvalue
99999999
start with
1
increment by
1
nocache
order
;

建解发器代码为:

createorreplacetrigger tri_test_id
before inserton S_Depart –S_Depart 是表名
for eachrow
declare

nextid number;
begin
IF
:new.DepartId ISNULLor :new.DepartId=
0THEN —DepartId是列名
select SEQ_ID.nextval —SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
OK
,上面的代码就可以实现自动递增的功能了。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Code Coverage 小结

    Code Coverage 小结在软件测试中 CodeCoverage 常常作为公司衡量软件测试是否充分的一个指标 这其中包括 UTCoverage TestAutomati 下面我列举出常用编程语言所用的 coveragetool 编程语言 工具 评论 LinuxC gcov lcov nbsp Window

    2025年8月25日
    6
  • bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00

    bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00**问题:**将两个long类型的数相除后转换为BigDecimal类型并保留两位小数。思路:1.先将long转换为double类型再相除2.相除之后再转换为BigDecimal类型3.最后是设置小数位数,并设置两位小数后面的数的处置方式。代码:longnum1=5L;longnum2=20L;BigDecimalnum=BigDecimal.valueOf((double)num1/num2).setScale(2,BigDecimal.ROUND_HALF_UP);

    2022年9月23日
    3
  • NIN原理和实现

    NIN原理和实现个人博客 http www chenjianqu com 原文链接 http www chenjianqu com show 65 html 论文笔记 1 解决了什么改进 CNN 2 提出的模型提出 mlpconv 引入了 1×1 卷积和 globalaverag 提出 NetworkInNet NIN 整个模型未使用全连接 3

    2025年12月15日
    6
  • python,java,c语言哪个好_小萌新

    python,java,c语言哪个好_小萌新大学那会也被这个问题被困惑了大半年,直到毕业拿了几个大厂offer才发现语言的选择也就那一回事,我猜不少人刚入门的人依然被这个问题困扰着,所以决定认真分享一波我的经历。如果你还处于大一,大二,或者刚刚入门阶段,那么我认为,语言的选择并不重要,更重要的是底层/通用基础的学习,例如数据结构,算法,计算机网络这些,因为这些语言,是存在很多相同的特性的,例如你学习了C++,后面要转Java,那么其实还是可以很快就上手的。而且,等到了差不多毕业去应聘校招的时候,其实公司并不会对语言有严格的要求,例如你要面

    2025年8月21日
    5
  • android IPC 通信(上)-sharedUserId&&Messenger「建议收藏」

    android IPC 通信(上)-sharedUserId&&Messenger

    2022年2月23日
    52
  • oralce入门学习[通俗易懂]

    oralce入门学习[通俗易懂]oracle的认识sql数据库语言关键字distinct关键字null连接符||比较运算符排序单行函数字符函数数值函数日期函数转换函数通用函数条件表达式多行函数

    2022年7月2日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号