导读:
通过创建序列来实现
ORACLE SEQUENCE的简单介绍
在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;
一旦定义了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 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。
可以很简单的Drop Sequence
DROP SEQUENCE order_seq;
最近用vs2005+oracle开发,以前从没用过oracle,对oracle的了解也是甚少.今天,老大说要我建一个表,主键必须是自动增长的.
于是我就用SQL Server的方法在那建.摸索了半天就是建不了,于是我就到网上搜...原来它是用序列来解决自动增长列的.....
下面则是整理出来的一些资料...
序列:
(1).可以为表中的列自动产生值.
(2).由用户创建数据库对象,并可由多个用户共享.
(3).一般用于主键或唯一列.
例子:
create sequence my_seq ---创建序列名
start with 1 ---从1开始
increment by 1 ---每次增长1
maxvalue 999999999 ---最大值
minvalue 1 ---最小值
cycle ---循环
cache ---缓存
order
从1开始,每次增长1,最大值为999999999,之后又循环从1开始.
SQL语句:
insert into mytable values(my_seq,'aaa')
insert into mytable values(my_seq,'bbb')
结果为:
1 aaa
2 bbb
调用:
select my_seq.nextval from mytable ---新值
select my_seq.currval from mytable ---当前值
建表
CREATE TABLE table1
(id NUMBER PRIMARY KEY,
username VARCHAR2(50));
--建序列
CREATE SEQUENCE table1_seq
MINVALUE 1
MAXVALUE 9999999999
START WITH 1
INCREMENT BY 1
CACHE 30
ORDER;
--建触発器
CREATE OR REPLACE TRIGGER table1_tg
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
SELECT table1_seq.NEXTVAL INTO :NEW.id FROM DUAL;
END;
--執行
INSERT INTO table1 (username) VALUES ('張三');
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1601371
分享到:
相关推荐
oracle 增加序列 触发器 全过程 sql文件只需更换表名
oracle 序列自增oracle
详解Oracle序列和触发器的使用。。。。。。。。
oracle 创建序列 完整步骤
一键生成Oracle自增序列和触发器,方便Oracle sql的编写加快代码编写速度。
创建Oracle触发器用于表中序列值自增长(Helloblock写作)
通过sql建立序列和触发器,完成oracle的主键id的自增长
oracle批量生成表和触发器和序列
--创建触发器 CREATE OR REPLACE TRIGGER tg_test BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null) begin select seq_test.nextval into:new.nid from dual; end; --测试 insert条语句将会自动生成...
如何实现Oracle主键自增,通过写sequence和触发器,很全面,绝对帮你解决问题
oracle的自增,创建序列,创建触发器
Oracle触发器 –今天我们根据学到的东西实现一个id列自动增长的触发器 –首先我们需要建个表,主键id,name不为空 create table student( id number primary key, name varchar2(50) not null ) –查一下看看 select...
每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 举个简单的例子: 当员工表中新增一条记录后,自动打印“成功插入新员工” create or replace ...
一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...
oracle创建表,索引,表空间,触发器,schema用户,序列的Sql文
word文档,包括了函数: 表分区 视图 序列 游标 触发器: 有非常详细的讲解和示例代码
–建递增序列 CREATE SEQUENCE LZEAM_SP_LOOP_EQ_SEQ MINVALUE 1 INCREMENT BY 1 START WITH 1 测试: SELECT LZEAM_SP_LOOP_EQ_SEQ.NEXTVAL FROM DUAL –建触发器 CREATE OR REPLACE TRIGGER LZEAM.LZEAM_SP_LOOP_EQ...
在网上找的资料,oracle建表以后如何建自增序列和触发器。觉得比较实用,分享出来
包括11张表,4个视图,15个DML触发器,1个替代触发器,若干个序列和存储过程,只要运行一个SQL文件就可以了。
Oracle数据库表序列ID自增生成器的功能是为数据库中的表添加序列和触发器,以便使数据表的主键ID能够随着记录的增加而自动增加。