首先,你要有一张表!
CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50));
然后,你需要一个自定义的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯。
你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
CREATE TRIGGER "触发器名称" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;
下面你就试试插入数据吧!
INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei'); --使用触发器
INSERT INTO example VALUES(emp_sequence.nextval,'Cao','56498543','Heibei'); --如果不建立上文的触发器,也可直接使用序列的nextval
SELECT emp_sequence.currval FROM DUAL;
但是要注意的是:
-第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
-如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失.所以可以在createsequence的时候用nocache防止这种情况。
AlterSequence
你或者是该sequence的owner,或者有ALTERANYSEQUENCE权限才能改动sequence.可以alter除start至以外的所有sequence参数.如果想要改变start值,必须dropsequence再re-create.
Altersequence的例子
ALTER SEQUENC Eemp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE--到10000后从头开始
NOCACHE;
影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES=设置能同时被cache的sequence数目。
可以很简单的Drop Sequence
DROP SEQUENCE order_seq;
可以使用Sequence的地方:
-不包含子查询、snapshot、VIEW的SELECT语句
-INSERT语句的子查询中
-NSERT语句的VALUES中
-UPDATE的SET中
原文作者:老羊
原文地址:http://hi.baidu.com/spidermanzy/blog/item/05a4ca2a22be3a26d52af134.html
分享到:
相关推荐
primary key(id) //id为主键,下面的方法把它设为自增字段 ) 1、建立自增序列TEMP_TEST_IDADD,命名任意,从1开始,每次加1 CREATE SEQUENCE TEMP_TEST_IDADD INCREMENT BY 1 START WITH 1; 2、在表...
Oracle使用序列创建自增字段,自增长列。
很多人都知道在Oracle中并没有像其他数据库中的自增字段,那么我们怎样才能实现Oracle的自增字段功能呢?本文介绍了通过Oracle中的Sequence和Trigger来实现此功能。
Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 很有用哦
Oracle自增字段的实际应用,对比各种数据库自增字段的应用!
大家都知道吧,这很坑,尤其是用惯了mysql里的自增字段设置,结果oracle里面没有的。oh,no 我用的是12c版本的,它有一个新特性,可以这样设置自增序列,在创建表是,把id设置为自增序列 create table t ( id ...
oracle里建一个自增字段示例 oracle里建一个自增字段示例
ORACLE自增主键设置方法ORACLE自增主键设置方法
插入数据时获取自增ID,使用序列,需要在插入数据时,自增字段插入序列下一个值
先假设有这么一个表: 代码... 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREAT
我们今天的主题就是自增字段的实现,下表列出了主流数据库中创建自增字段的几种方法: 自增字段实现方式 MySQL Oracle SQL Server PostgreSQL SQLite 标识列(IDENTITY) — :check_mark: :check_mark: :...
今天从oracle迁移数据到mysql碰到个需求:原先的主键字段需要改成mysql中的自增字段,而且原先数据的值不能变,以后新插入的值从原先数据最大的值开始自增。 解决办法: 构建环境: mysql> CREATE TABLE test -> ( ...
Oracle中创建表,创建序列,创建自增字段,添加注释, 添加记录,添加触发器,提交
Oracle中没有sqlserver中那么方便的自增序列,如果想要达到sqlserver中那种效果,也不是很麻烦,需要创建一个自增序列SEQUENCE,然后建一个触发器即可。 CREATE SEQUENCE emp_sequence INCREMENT BY 1 — ...
第一步:创建一个表、第二步:创建一个自增序列以此提供调用函数、第三步:我们通过创建一个触发器,使调用的方式更加简单
相关代码如下: 1. 创建sequence: 代码如下:CREATE SEQUENCE SEQU_DATA_DATAINFO INCREMENT BY 1 START WITH 1 NOCYCLE NOCACHE NOORDER; 2. 创建触发器: 代码如下:create or replace TRIGGER TRIG_TEST BEFORE ...
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方接下来为大家介绍下Oracle创建自增字段方法感兴趣的各位可不要错过了哈
oracle sqlldr导入带有自动增加的数据实例
如何实现oracle中字段的自增,下面用一个例子来说明,有此需求的各位朋友可以参考下