实例说明oracle序列用法

张映 发表于 2011-06-24

分类目录: oracle

标签:, , , ,

一,为什么要创建oracle序列

mysql创建表时,我们可以用auto_increment来设置字段的自动增加,而不需要人为插入。而oracle不行,oracle创建表时,根本没有auto_increment这样的东东,如果要设置自动增加加怎么办?我们要创建一个序列,插入时把查找出来的序列值,手动插入进去。

二,创建,修改序列

1,创建,修改序列,语法规则

CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。

2,创建序列

create sequence seq_tank
increment by 1
start with 1
minvalue 1
maxvalue  99999
nocycle
cache  10

3,修改序列

alter sequence seq_tank
increment by 10
maxvalue 1000
cycle
nocache

4,查看序列

SQL> select * from user_sequences;

5,删除序列

SQL> drop SEQUENCE seq_tank;

6,查看序列值

SQL> select seq_test.nextval from dual;

 NEXTVAL
----------
 1

三,简单说一下oracle dual表

根mysql相比,dual表也是oracle的一个特点,它是oracle中的一个表,任何用户均可读取,常用在没有目标表的select语句中。什么意思呢?看下面的例子就明白了。

SQL> select sysdate;           //不加上dual就报下面的错误
select sysdate
 *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

SQL> select sysdate from dual;    //加上dual就可以,正常显示了

SYSDATE
---------
24-JUN-11

mysql> select now() as time;     //mysql则不需要
+---------------------+
| time                |
+---------------------+
| 2011-06-24 15:20:31 |
+---------------------+
1 row in set (0.00 sec)


转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/oracle/1317.html