您的位置:首页 > 数据库 > Oracle

Oracle数据对象--序列

2013-03-25 10:59 288 查看
1、创建序列语法
CREATE SEQUENCE sequence
[INCREMENT
BY n] //序列值间隔,默认为1 如果指定的为负数,序列值将递减产生
[START
WITH n] //起始序列值,默认为1
[{MAXVALUE n |
NOMAXVALUE}] //最大序列值 |
最大序列值为10的27次方,降序的最大值为-1
[{MINVALUE n | NOMINVALUE}]
//最小序列值 | 升序最小序列值为1,降序最小序列值为-10的26次方
[{CYCLE |
NOCYCLE}]
//序列值在达到指定最大或最小值之后继续产生序列值(从头再开始),NOCYCLE不再生产(默认值)
[{CACHE n
| NOCACHE}]; //序列被预先分配存储到内存,NOCACHE默认值
2、建立序列
CREATE SEQUENCE dept_deptno
INCREMENT
BY 20
START WITH 50
MAXVALUE 200
NOCACHE
CYCLE
/
3、伪列:NEXTVAL和CURRVAL
NEXTVAL:用于返回序列下一个可获取的值。引用(sequence).NEXTVAL时,一个新的序列值产生并保存到CURRVAL伪列。对于每次引用都产生下一个序列值并返回,对于不同的用户引用也是一样。
CURRVAL:被引用前必须使用NEXTVAL产生一个序列值,用于提取当前用户产生的序列值。
4、查询序列
查询当前序列值
SELECT
dept_deptno.CURRVAL FROM dual;
查询下一个返回的序列值
SELECT
dept_deptno.NEXTVAL FROM dual;
注意:这样也是对NEXTVAL的引用,会产生下一个序列值
如果序列不是保存在内存中的,可以查看数据字典,这样不会产生新的序列值
SELECT
sequence_name, min_value, max_value,
increment_by,last_number
FROM
user_sequences
/
5、使用序列
未使用NEXTVAL时情况
SQL> INSERT INTO
dept1(deptno,dname,loc)
2 VALUES
(dept_deptno.CURRVAL,'IT_DEPT','BEIJING')
3 /
VALUES
(dept_deptno.CURRVAL,'IT_DEPT','BEIJING')
*
ERROR at line 2:
ORA-08002:
sequence DEPT_DEPTNO.CURRVAL is not yet defined in this
session
正确的用法
INSERT INTO dept1(deptno,dname,loc)
VALUES
(dept_deptno.NEXTVAL,'IT_DEPT','BEIJING')
/
1 row created.
INSERT INTO
dept1(deptno,dname,loc)
VALUES
(dept_deptno.NEXTVAL,'HR_DEPT','SHANGHAI')
/
1 row created.
SELECT *
FROM dept1;
DEPTNO DNAME LOC
----------
-------------------- --------------------
10 ACCOUNTING NEW
YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40
OPERATIONS BOSTON
50 IT_DEPT BEIJING
60
HR_DEPT SHANGHAI
6 rows selected.
6、修改序列
ALTER SEQUENCE dept_deptno
INCREMENT
BY 10
MAXVALUE 400
NOCACHE
NOCYCLE
/
Sequence altered.
7、删除序列
DROP SEQUENCE dept_deptno;
Sequence
dropped.
CUUG
更多oracle视频教程请点击:http://crm2.qq.com/page/portalpage/wpa.php?uin=800060152&f=1&ty=1&aty=0&a=&from=6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息