一,为什么要创建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