oracle序列 闲时练手

来源:互联网 发布:homotopy算法 编辑:程序博客网 时间:2024/05/22 10:23

闲时练手。

 

 

序列语法:

CREATE SEQUENCE sequence_name

[ START WITH start_num]                                    -- default:1

[ INCREMENT BY increment_num]                           -- default:1

[{MAXVALUE maximum_num | NOMAXVALUE }]          -- default:NIMINVALUE

[{MINVALUE minimum_num | NOMINVALUE}]             -- default:NOMINVALUE

[{CYCLE | NOCYCLE}]                                          -- default: NOCYCLE

[{CACHE cache_num | NOCACHE}]                         -- default:  缓存 20 个数

[{ORDER | NOORDER}]                                          -- default: NOORDER

 

 

-- 删除已存在的序列S

DROP SEQUENCE s
/

-- 创建序列 s, 从1开始,增量为1
CREATE SEQUENCE s START WITH 1 INCREMENT BY 1
/

 

序列中包含两个伪列:currval, nextval

 

 

练手时发现问题,记录如下:

 

问题一:调用序列当前值时报错

调用语句:SELECT s.CURRVAL FROM dual

ORA-08002: sequence S.CURRVAL is not yet defined in this session

 

原因:序列未初始化,在检索序列的当前位置前,必须通过检索序列的下一个值对其初始化。

即:SELECT s.NEXTVAL FROM dual, 之后在调用 s.CURRVAL 就不会报错

 

 

 

问题二 SEQUENCE NAME 的大小写问题

执行一下语句结果为空:

                            SELECT * FROM all_sequences WHERE sequence_name = 's'   -- result is null

但是s已经被创建,

sequence name 存到数据库时自动将名字改为了大写的,所以在where 语句中要用大写S,才能检索出结果:

 

SQL> SELECT * FROM user_sequences WHERE sequence_name = 'S';

SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ ---------- ---------- ---------- -----------
S                                       1       1E27            1 N          N                  20          21

 

原创粉丝点击