
1. 序列(Sequence):
序列的概念:序列是一个数据对象,利用它可以生成唯一的整数。
序列的用途:一般使用序列自动生成主键值。
2. 序列的建立
语法:
CREATE SEQUENCE sequence_name
[START WITH n] -- 设定起始值
[INCREMENT BY n] -- 设定增量值
[MINVALUE n] -- 最小值
[MAXVALUE n] -- 最大值
[CACHE n] -- 缓存数量
[CYCLE | NO CYCLE] -- 是否循环,默认无循环
[ORDER | NO ORDER ] -- 是否有顺序,默认无顺序
注:
-起始值一定要大于等于最小值。
-序列的创建需要CREATE ANY SEQUENCE, CREATE SEQUENCE系统权限。
-省略所有的选项,创建一个默认的序列,由1开始,增量为1,
-序列的最大值为38位整数。
-
例子1:
CREATE SEQUENCE SCOTT.NEWS_SEQUENCE
START WITH 2
INCREMENT BY 1
MINVALUE 2
MAXVALUE 5
CACHE 2
CYCLE
ORDER
例子2:
CREATE SEQUENCE DEPT_NO
1.序列的使用
1)取序列的下个值:
sequence_name.nextval
2)取序列的当前值:
sequence_name.currval
例子:
select NEWS_SEQUENCE.nextval from dual
select NEWS_SEQUENCE.currval from dual
insert into NEWS (newsno, newssubject ) values (news_sequence.nextval, ‘新闻标题’ )
自动在新闻表插入一个新闻编号。
2.序列的修改
语法:
ALTER SEQUENCE sequence_name
[INCREMENT BY n] -- 设定增量值
[MINVALUE n] -- 最小值
[MAXVALUE n] -- 最大值
[CACHE n] -- 缓存数量
[CYCLE] -- 是否循环
[ORDER] -- 是否有顺序
注:Oracle9i中无法改变序列的起始值,
序列修改例子:
ALTER SEQUENCE SCOTT.NEWS_SEQUENCE
INCREMENT BY 2
MINVALUE 1
MAXVALUE 10
CACHE 2
NOCYCLE
NOORDER
3.序列的删除
语法: DROP SEQUENCE sequence_name
例子:
drop sequence DEPT_SEQUENCE
课前提问:
课后作业:
1.建立采购单号序列 : PurchaseOrderNextNo
2.建立销售单号序列: SalesOrderNextNo
3.建立入库单号序列: StockInNextNo
4.建立出库单号序列: StockOutNextNo
CREATE SEQUENCE emp_sequence
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE
CACHE 20;
(1)举一个案例,大多数开发者使用select max(编号字段) from table。来取得下一个编号,会产生序列化的问题。
(2) 问题:如果定义一个序列myNo, 问如下语句是否产生相同的序列号,select myno.nextval, myno.nextval, myno.currval from dual
