首页 > Linux操作系统 > Linux操作系统 > oracle学习笔记(4)
create sequence name_seq
[ increment by value ]
//步长
[ start with value ] //起始值
[ minvalue value
] //最小值
[ maxvalue value
] //最大值
[ cycle | nocycle
] //是否循环
[ cache value | nocache
] //缓存
--创建序列
create sequence employee_seq;
--因为创建了一个实实在在的数据库对象,因此可以利用视图 user_objects 和 user_sequences
进行查看
select object_name,object_type,status from user_objects
where
lower(object_name) = 'employee_seq';
select sequence_name, min_value, max_value, increment_by from
user_sequences
where lower(sequence_name) = 'employee_seq';
--对于序列有两个重要的属性
-—currval , nextval
select employee_seq.currval from dual;
--error:因为select
employee_seq.currval from dual;用于获得序列employee_seq的当前值。
--可以首先使用
employee_seq.nextval (这是必须的) , 再尝试使用 currval 属性
select employee_seq.nextval from dual;
--eg:
select * from t_employees;
drop sequence employee_seq;
-------------------------------start
with
create sequence employee_seq
start with 7;
insert into t_employees values (employee_seq.nextval,'陆逊' , 0 ,'ACT');
------------------------minvalue
,maxvalue
--minvalue不能大于当前值
alter sequence employee_seq minvalue 1;
alter sequence employee_seq maxvalue 99999;
--or
alter sequence employee_seq nomaxvalue; --最大值修改为无限
nomaxvalue-->maxvalue value;
--------------------------increment by 步长
create sequence test_seq;
--测试步长(1)
select test_seq.nextval from dual;
select test_seq.nextval from dual;
--得到序列的默认步长时 1。
--修改步长
alter sequence test_seq increment by 5;
--测试步长(2)
select test_seq.nextval from dual;
select test_seq.nextval from dual;
------------------------------------cycle
drop sequence test_seq;
create sequence test_seq
start with 5
minvalue 1
maxvalue
30
increment by 1;
--(1)首次获取 test_seq.nextval, value is 5
select test_seq.nextval from
dual;
--(2) 在经过多次测试之后,可以获取其最大值30
select test_seq.nextval from dual;
--(3) 此时,将序列test_seq修改为可循环
alter sequence test_seq cycle;
--(4)再次尝试获取nextval属性
select test_seq.nextval from dual;
--(5)此时的nextval
属性的值为1 ,即为序列的最小值
--(补充)要关闭该选项,不允许序列的循环取值,可利用 nocycle 选项;
alter sequence test_seq
nocycle;
----------------------------------修改cache (序列缓存)
-- 其实际意义为,每次利用nextval,并非直接操作序列,而是一次性获取多个值的列表到缓存。使用
-- nextval获取的值,
实际是从缓存抓取。抓取的值,依赖于序列的currval 和 步长 increment by .
-- 默认缓存的大小是20,可以通过alter
命令修改缓存大小。
-- 可以通过如下步骤测试cache 的存在
--(1)尝试将序列test_seq 的 increment by 属性修改为 2
alter sequence
test_seq increment by 2;
--error :缓存的值必须小于一次循环所能获取的数目。 因为步长为2,最大值是30. 一次循环所能获得的nextval
的数目为15,
--Oracle不能一次抓取20条记录(大于15);
--—(2)现将尝试将序列test_seq 的最大值maxvalue 修改为临界值
39,并再次将步长修改为2,仍然会导致失败。
alter sequence test_seq maxvalue
39;
alter sequence test_seq increment by
2;
---(3)将序列test_seq的最大值修改为40,再次尝试将步长修改为2
alter
sequence test_seq maxvalue 40;
alter sequence test_seq
increment by 2;
---(4)通过上面的结果可知,序列的cache
的存在会对修改其他选项产生影响。当然,可以通过alter 命令修改cache 的大小,
--以适应具体序列的要求,代码如下所示:
alter sequence test_seq cache
10;
注意:不能将序列的缓存容量设置过大,其原因与修改 increment by
选项的原因相同(太大会影响获取最大值.......)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25436591/viewspace-702345/,如需转载,请注明出处,否则将追究法律责任。