Oracle创建自增字段方法-ORACLE SEQUENCE的简介
曾经最头疼的就是对表插入数据的时候,有主键问题。
由于主键不可以反复,所以得用函数自己定义一个规则生成不反复的值赋值给主键。
如今发现oracle有sequence就不用那么麻烦了。
转自:http://zhoufoxcn.blog.51cto.com/792419/166418/
DepartId INT not null,
DepartName NVARCHAR2(40) not null,
DepartOrder INT default 0,
constraint PK_S_DEPART primary key (DepartId)
);
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例如以下:
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;
CURRVAL=返回 sequence的当前值
NEXTVAL=添加sequence的值,然后返回 sequence 值
比方:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
能够使用sequence的地方:
- 不包括子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的valueS中
- UPDATE 的 SET中
能够看例如以下样例:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自己主动添加你定义的INCREMENT BY值。然后返回添加后的值。CURRVAL 总是返回当前SEQUENCE的值。可是在第一次NEXTVAL初始化之后才干使用CURRVAL,否则会出错。一次NEXTVAL会添加一次 SEQUENCE的值,所以假设你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明确?
你或者是该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 order_seq;
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
建解发器代码为:
before insert on S_Depart --S_Depart 是表名
for each row
declare
nextid number;
begin
IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
select SEQ_ID.nextval --SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
OK,上面的代码就能够实现自己主动递增的功能了。
Oracle创建自增字段方法-ORACLE SEQUENCE的简介的更多相关文章
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
引用自 :http://www.2cto.com/database/201307/224836.html Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...
- Oracle中创建自增字段方法
oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 下面给大家讲个例子: 1.在Oracle中创建一个表: .创建一个表 ) prim ...
- Oracle创建自增字段和修改方法-ORACLE SEQUENCE的简单介绍
http://blog.csdn.net/zhoufoxcn/article/details/1762351先假设有这么一个表: create table S_Depart ( DepartI ...
- mongoose 创建自增字段方法
first: create counter collection in mongodb:> db.counters.insert({_id:"entityId",seq:0} ...
- navicat for oracle 创建表ID字段的自动递增
Oracle数据库创建表ID字段的自动递增 将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create table t_user( Id numbe ...
- Oracle创建自增ID
先创建序列sequence create sequence S_User minvalue 1 nomaxvalue -- 或 maxvalue 999 start with 1 increment ...
- Oracle添加自增长字段方法步骤
第一步:创建自增长序列 CREATE SEQUENCE ZH_ALARM_INFO_SEQ--自动增长列 INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 ...
- oracle触发器自增字段
1.创建序列 代码 -- Create sequence create sequence seq_userinfo minvalue 1 start with 1 increment by 1; 2. ...
- oracle 创建自增主键
1.创建表 create table Test_Increase( userid number(10) NOT NULL primary key, /*主键,自动增加*/ username varch ...
随机推荐
- git 设定全局ignore
创建: 2017/08/08 位置: $HOME/.config/git/ignore git/ignore 要自建 内容 https://github.com/github/gitignore ...
- Cookie、Token与Session介绍(非原创)
文章大纲 一.Cookie介绍二.Token介绍三.Session介绍四.Token.Cookie与Session比较五.参考文章 一.Cookie介绍 1. Cookie是什么 cookie机制 ...
- TCP/IP详解(三)
超时与重传: TCP在发送一个包时,启动一个定时器,如果在定时器溢出之前没有收到ACK,则认为发出的包丢失了,此时会重传丢失的包.这就是超时重传. 其中定时器的时间不是一个固定值,它是根据RTT计算的 ...
- 5.14web相关概念
1.软件架构 1.C/S:客户端/服务器端 2.B/S:浏览器/服务器端 2.资源分类 1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析如:html,cs ...
- lua 10进制转换成其它进制table表示
-- params@num integer -- ~) 默认为10 -- NOTE:先不输出符号 function NumberToArray(num, radix) if type(num) ~= ...
- html5与css3入门知识点精炼
<meta name = "keywords" content="…………"/>(网页搜索时要输入的关键字) <meta name = &qu ...
- Centos 自动删除日志文件的Shell代码
#!/bin/bash # #判断文件夹内文件的大小,如果大于一定的数值,那么删除 # echo '判断文件夹内文件的大小,如果大于一定的数值,并且文件名称包含数字(年月日)的删除,那么删除' pat ...
- dubbo之上下文信息
上下文信息 上下文中存放的是当前调用过程中所需的环境信息.所有配置信息都将转换为 URL 的参数,参见 schema 配置参考手册 中的对应URL参数一列. RpcContext 是一个 Thread ...
- day35-2 类的三大特性---多态,以及菱形继承问题
目录 菱形继承问题 经典类 新式类 菱形继承 大招 多态与多态性 多态 多态性 多态在Python中的体现 鸭子类型(重要) 结论 菱形继承问题 经典类 没有继承object类的就是经典类,只有Pyt ...
- 【转载】MySQL之CONCAT()的用法
mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一,下面就将为您详细介绍mysql CONCAT()函数,供您参考 mysql CONCAT(str1,st ...